Se o Python for obrigatório, você pode verificar este artigo:
http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/
Eles apontam, com razão, que um computador tem tantos endereços IP quanto interfaces de rede.
Aqui está o código para obter o endereço IP de um adaptador de rede, testei o código e funciona:
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')
Se o seu RPi estiver conectado via WiFi, o nome do adaptador deve ser wlan0
Caso contrário, você pode obtê-lo com o ip
comando:
ip addr show eth0 | grep inet
Você deve obter algo como:
inet 192.168.0.140/24 brd ....
Esse é o seu endereço IP.
Obviamente, nada disso funcionará se você apenas inicializar o seu RPi e não conseguir se conectar a ele porque não sabe o endereço IP! Se 'for esse o caso, seu servidor DHCP certamente poderá dizer qual endereço IP ele acabou de fornecer ao RPi (ou você apenas tenta todos eles :))
Dito isso, você pode se beneficiar de fazer referência a sua RPi por nome e, como você está usando um Mac, provavelmente a melhor solução seria instalar o avahi-daemon:
sudo apt-get install avahi-daemon
que implementa a especificação Apple Zeroconf (como Bonjour). Você pode então ssh para o seu RPi pelo nome:
ssh pi@raspberry.local
Usei uma abordagem diferente para meus dois Raspberrys (chamados ygdrasill e dvalinn ): optei por um IP fixo (192.168.0.140 e 192.168.0.142), para que eu também possa usar o arquivo etc / hosts em algumas de minhas outras máquinas.
Eu poderia ter configurado um DNS interno ou confiar no Wins, mas a solução atual funciona para mim.