Python: Pegando o endereço IP
Ainda não necessitei disto, mas assim que esbarrei com a informação, a achei relevante suficiente para não deixar passar em banco.
Primeiro deve-se saber exatamente o que deseja, pois as duas formas de se pegar o endereço ip pelo Python, encontradas na rede, podem dar resultados bem diferentes. Vou tentar explicitá-las a seguir:
Endereço em /etc/hosts
Referência: mgltools.scripps.edu/documentation/faq/get-ip-using-python
Além, é claro, de acessar o arquivo /etc/hosts, você pode usar o módulo socket, como segue no exemplo abaixo:
>>> import socket
>>> socket.gethostbyname(socket.gethostname())
'127.0.0.1'
>>> socket.gethostbyname_ex(socket.gethostname())
('khelben.forgotten', ['khelben'], ['127.0.0.1'])
>>> socket.gethostbyaddr(socket.gethostname())
('localhost', [], ['127.0.0.1'])
Embora este procedimento funcione em qualquer sistema, não é muito útil quando não se tem muita informação declarada no /etc/hosts, o que acontece quando a minha máquina pega ip dinâmicamente. Neste caso o conteúdo do /etc/hosts erá:
# For loopbacking. 127.0.0.1 localhost # This next entry is technically wrong, but good enough to get TCP/IP apps # to quit complaining that they can't verify the hostname on a loopback-only # Linux box. 127.0.0.1 khelben.forgotten khelben
Através do dispositivo de rede
Referência: http://code.activestate.com/recipes/439094/
O código a seguir funciona, desde que você conheça o dispositivo que está conectado a rede.
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])
Conclusão
Encontrei outros códigos que utilizavam comandos do Shell como ifconfig, e por isto não os coloquei aqui. Pessoalmente esperava encontrar muitas outras formas diferentes de se pegar o IP em Python, com o uso de outros módulos. Mas depois de alguns minutos de pesquisa pela rede, não vi nada muito diferente do que apresentei acima.
Deixe uma resposta