Julho 15, 2009 at 11:53 pm

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.

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

No comments yet, be the first!

Leave a reply

Spam Protection by WP-SpamFree

Back to top