Если Python является обязательным, вы можете проверить эту статью:
http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/
Они справедливо указывают, что компьютер имеет столько же IP-адресов, сколько сетевых интерфейсов.
Вот их код для получения IP-адреса сетевого адаптера, я проверил код, и он работает:
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')
Если ваш RPi подключен через WiFi, имя адаптера должно быть wlan0
В противном случае вы можете получить его с помощью ip
команды:
ip addr show eth0 | grep inet
Вы должны получить что-то вроде:
inet 192.168.0.140/24 brd ....
Это твой IP-адрес.
Конечно, ничего из этого не будет работать, если вы просто загрузите свой RPi и не сможете подключиться к нему, потому что вы не знаете IP-адрес! Если это так, ваш DHCP-сервер наверняка сможет сказать вам, какой IP-адрес он только что дал RPi (или вы просто попробуете их все :))
Тем не менее, вам может быть полезно ссылаться на ваш RPi по имени, и, поскольку вы используете Mac, вероятно, лучшим решением будет установка avahi-daemon:
sudo apt-get install avahi-daemon
который реализует спецификацию Apple Zeroconf (например, Bonjour). Затем вы можете SSH к вашему RPi по имени:
ssh pi@raspberry.local
Я использовал другой подход для двух моих Raspberrys (названных ygdrasill и dvalinn ): я выбрал фиксированный IP (192.168.0.140 и 192.168.0.142), поэтому я также могу использовать файл etc / hosts на некоторых других моих машинах.
Я мог бы настроить внутренний DNS или полагаться на Wins, но текущее решение работает для меня.