Python获取无线局域网IP

本文记录使用Python获取本机IP的两种方法。

通过hostname来获取本机IP

import socket

print(socket.gethostbyname(socket.gethostname()))

此方法是先获取hostname,然后在通过hostname来查看本机的IP。不推荐此方法,因为若是在/etc/hosts中将hostnam设置为127.0.0.1,那么获取到的就是127.0.0.1,而非本机的真实IP。

通过UDP获取本机IP

import socket

try: 
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    s.connect(('8.8.8.8',80)) 
    ip = s.getsockname()[0] 
finally: 
    s.close() 
print(ip)

此方法利用UDP协议,生成一个UDP包,将自己的IP放入UDP协议头中,然后再从中获取本机的IP。此方法虽然不会真实向外发包,但仍然会申请一个UDP的端口,所以如果频繁调用的话也是比较耗时的;可以将查询到的IP缓存在别处以供使用。




本文记录使用Python获取本机IP的两种方法。

通过hostname来获取本机IP

import socket

print(socket.gethostbyname(socket.gethostname()))

此方法是先获取hostname,然后在通过hostname来查看本机的IP。不推荐此方法,因为若是在/etc/hosts中将hostnam设置为127.0.0.1,那么获取到的就是127.0.0.1,而非本机的真实IP。

通过UDP获取本机IP

import socket

try: 
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    s.connect(('8.8.8.8',80)) 
    ip = s.getsockname()[0] 
finally: 
    s.close() 
print(ip)

此方法利用UDP协议,生成一个UDP包,将自己的IP放入UDP协议头中,然后再从中获取本机的IP。此方法虽然不会真实向外发包,但仍然会申请一个UDP的端口,所以如果频繁调用的话也是比较耗时的;可以将查询到的IP缓存在别处以供使用。