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:
import socket
import fcntl
import struct
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
print get_ip_address('lo')
print get_ip_address('eth0')
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:
ip addr show eth0 | grep inet
Powinieneś dostać coś takiego:
inet 192.168.0.140/24 brd ....
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:
sudo apt-get install avahi-daemon
która implementuje specyfikację Apple Zeroconf (jak Bonjour). Następnie możesz ssh do swojego RPi według nazwy:
ssh pi@raspberry.local
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.