Używam Mac OSx, aby uzyskać dostęp do mojego Pi przez SSH. Aby uzyskać do niego dostęp, wiem, że potrzebuję adresu IP Pi. Postanowiłem więc użyć kilku poleceń Pythona, którym zawsze udało mi się podać lokalny adres IP.
import socket
host_name = socket.gethostname()
host_ip = socket.gethostbyname(host_name)
print host_ip
O dziwo, dostałem tylko lokalny adres IP hosta (127.0.1.1).
Czy ktoś może mi powiedzieć, jak uzyskać właściwy lokalny / globalny (cokolwiek jest lepsze, na razie musi to działać tylko przez sieć LAN) IP dla PI?
ssh
? Na pewno potrzebujesz adresu IP przed sobąssh
.Odpowiedzi:
Jeśli Python jest koniecznością, możesz sprawdzić ten artykuł: http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/
Słusznie wskazują, że komputer ma tyle adresów IP, ile interfejsów sieciowych.
Oto ich kod, aby uzyskać adres IP karty sieciowej, przetestowałem kod i działa:
Jeśli Twoje RPi jest połączone przez Wi-Fi, nazwa adaptera powinna być
wlan0
W przeciwnym razie możesz go uzyskać za pomocą
ip
polecenia:Powinieneś dostać coś takiego:
To twój adres IP.
Oczywiście nic z tego nie zadziała, jeśli po prostu uruchomisz RPi i nie możesz się z nim połączyć, ponieważ nie znasz adresu IP! Jeśli tak jest, twój serwer DHCP z pewnością będzie w stanie powiedzieć ci, który adres IP właśnie podał RPi (lub po prostu wypróbujesz je wszystkie :))
To powiedziawszy, możesz skorzystać z odniesienia do RPi po nazwie, a ponieważ używasz komputera Mac, prawdopodobnie najlepszym rozwiązaniem byłoby zainstalowanie demona avahi:
która implementuje specyfikację Apple Zeroconf (jak Bonjour). Następnie możesz ssh do swojego RPi według nazwy:
Użyłem odmiennego podejścia do moich dwóch Raspberrys (o nazwach ygdrasill i dvalinn ): zdecydowałem się na stały adres IP (192.168.0.140 i 192.168.0.142), aby móc używać pliku etc / hosts na niektórych moich innych komputerach.
Mogłem skonfigurować wewnętrzny DNS lub polegać na wygranych, ale obecne rozwiązanie działa dla mnie.
źródło
ssh [email protected]
podać domyślną nazwę hosta dla RPiraspberrypi
. Dlaczego avahi-demon nie jest powszechnie zainstalowany w świecie Debiana, jest poza mną. Sieci ad-hoc są marzeniem, gdy działają od razu po wyjęciu z pudełka.Ten kod:
działa tylko pod Pythonem 2.7, nie działa z Pythonem 3, pojawi się błąd, że argument dla 's' musi być obiektem bajtowym ...
źródło
python3
?gniazdo może zwrócić localhost, w zależności od konfiguracji systemu operacyjnego. Więc nie jest przenośny.
Ta odpowiedź na przepełnienie stosu dotycząca uzyskiwania adresu IP przez python jest pomocna - wyjaśnia problem z / etc / hosts i daje przyzwoite obejście. Nie jest doskonały (ipv6), a jeśli masz kilka powiązanych adresów IP, może nie znaleźć wersji z routingiem, ale na twoje potrzeby jest to dobry oneliner.
Z wiersza polecenia
ifconfig
jest twoim przyjacielem. Zazwyczaj wyświetla listę wszystkich powiązanych interfejsów i tym podobnych.źródło