2013-03-13 15 views
5

Próbuję uzyskać adres IP sieci LAN urządzenia, na którym działa program i porównać go z adresami IP przekazanymi do niego przez UDP.Python Uzyskiwanie adresu IP urządzenia LAN w systemie Ubuntu

Jednak kiedy używam:

print str(socket.gethostbyname(socket.gethostname())) 

Zwraca 127.0.0.1, który powinien być 192.168.1.9.

Przejrzałem maszynę Linux i jej adres IP portu lo (loopBack)? Nie wiem dokładnie, co to jest, ale powinien dostać adres IP eth0.

Znalazłem, że mogę podprocesować polecenie bash "ifconfig eth0", ale to zwraca duży blok ciągu. Potrafię przetworzyć to, czego potrzebuję, ale będzie to działać około 3 razy na sekundę na beaglebone, więc chciałbym, żeby był trochę bardziej skuteczny.

Czy istnieje bardziej elegancki sposób robienia tego?

Czy mogę po prostu zmienić cel gethostname?

Dlaczego jest kierowany na port lo?

Dziękuję za twoją pomoc.

+0

Jeśli ktoś próbuje to zrobić i ma serwer, który zawsze będzie miał dostęp do Internetu, istnieje strona http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a -network-inter/ma sposób, który rozwiązał problem. Ale mój serwer nie zawsze będzie miał internet, więc nie będę mógł go użyć. – Poodimizer

Odpowiedz

1

netifaces Wygląda na całkiem słodki moduł python, który powinien wystarczyć.

+0

To wygląda całkiem obiecująco. Na pewno to sprawdzę i skontaktuję się z Tobą. – Poodimizer

4

Spróbuj wrócić pełną nazwę domeny maszyny:

print str(socket.gethostbyname(socket.getfqdn())) 

/etc/hosts prawdopodobnie posiada wpis do 127.0.0.1 rozwiązującego hosta, dlatego socket.gethostbyname() nie wraca, czego oczekujesz.

Oryginalne pytanie z pytaniem i odpowiedzią here, ale rozwiązanie socket.getfqdn() nie było widoczne na pierwszy rzut oka. Oto dane wyjściowe solution dla parsowania ifconfig, jeśli zdecydujesz się na tę trasę. Biblioteka standardowa wydaje się więcej niż wystarczająca do rozwiązania twojego problemu.

+0

Miałem wrażenie, że plik hosts jest po prostu tabelą wyszukiwania dla serwerów zewnętrznych. Polecenie print str (socket.gethostbyname (socket.getfqdn())) właśnie zwróciło to samo (127.0.1.1). – Poodimizer

+0

@Poodimizer Co zwróciło 'socket.getfqdn()'? Pomocne może być również zobaczenie pliku 'hosts'. – Bryan

+0

Masz rację plik hosts miał: 127.0.0.1 localhost 127.0.1.1 omap Występuje teraz błąd, więc nie mogę uruchomić socket.fqdn() teraz. trzeba zrestartować serwer. – Poodimizer

Powiązane problemy