[Python-es] Cómo determinar mi ip?
José Luis Redrejo Rodríguez
jredrejo en debian.org
Vie Abr 2 19:31:47 CEST 2010
El día 2 de abril de 2010 14:38, Boris Perez Canedo
<inf200523 en ucf.edu.cu> escribió:
>> Yo preparé dos funciones para esto: una que me da la ip pasándole el
>> interfaz de red, y otra que me da la ip pasándole una ip a la que
>> quiero acceder. Con lo que si hay un interfaz de red para salir a
>> internet y otro para la red local, puedo usar el que necesite. Para
>> salir a internet, le paso por defecto el valor de uno de los DNS root
>> mundiales, pero valdría cualquier ip que sepas que está en internet.
>>
>> def get_ip_inet_address(connection_ip='198.41.0.4'):
>> """Returns the ip address of the interface used to connect to the given ip
>>
>> 198.41.0.4 is a DNS ROOT Server, so it's the default value to
>> connect to Internet
>> """
>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>> s.connect((connection_ip, 0))
>> inet_address= s.getsockname()[0]
>> s.close()
>> logging.getLogger().debug("Inet Address:" + inet_address)
>> return inet_address
>>
>>
>> Si necesitas la que calcula la ip de un interfaz, dímelo.
>>
> Ok, Gracias, me puedes enviar la otra si no te es molestia :)
>
Ninguna molestia:
def get_ip_address(ifname):
"""Returns the ip address of the interface ifname"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
ip= socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15]) )[20:24]
)
except:
ip=''
return ip
Más información sobre la lista de distribución Python-es