Wenn Python ein Muss ist, können Sie diesen Artikel lesen :
http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/
Sie weisen zu Recht darauf hin, dass ein Computer so viele IP-Adressen wie Netzwerkschnittstellen hat.
Hier ist ihr Code, um die IP-Adresse eines Netzwerkadapters zu erhalten. Ich habe den Code getestet und er funktioniert:
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')
Wenn Ihr RPi über WLAN verbunden ist, sollte der Adaptername lauten wlan0
Andernfalls können Sie es mit dem ip
Befehl erhalten:
ip addr show eth0 | grep inet
Sie sollten etwas bekommen wie:
inet 192.168.0.140/24 brd ....
Das ist deine IP-Adresse.
Natürlich funktioniert nichts davon, wenn Sie nur Ihr RPi starten und keine Verbindung herstellen können, weil Sie die IP-Adresse nicht kennen! Wenn dies der Fall ist, kann Ihr DHCP-Server Ihnen sicherlich mitteilen, welche IP-Adresse er gerade dem RPi gegeben hat (oder Sie probieren einfach alle aus :))
Das heißt, Sie könnten davon profitieren, wenn Sie Ihr RPi nach Namen referenzieren. Da Sie einen Mac verwenden, ist es wahrscheinlich die beste Lösung, avahi-daemon zu installieren:
sudo apt-get install avahi-daemon
Dies implementiert die Apple Zeroconf-Spezifikation (wie Bonjour). Sie können dann mit Namen zu Ihrem RPi ssh:
ssh pi@raspberry.local
Ich habe für meine beiden Himbeeren ( ygdrasill und dvalinn ) einen anderen Ansatz verwendet : Ich habe mich für eine feste IP (192.168.0.140 und 192.168.0.142) entschieden, damit ich auf einigen meiner anderen Computer auch die Datei etc / hosts verwenden kann.
Ich hätte ein internes DNS einrichten oder mich auf Wins verlassen können, aber die aktuelle Lösung funktioniert für mich.