方法一
通常使用 socket.gethostname() 方法即可获取本机 IP 地址, 但有时候获取不到 (比如没有正确设置主机名称)import socket
# 获取计算机名称
hostname = socket.gethostname()
# 获取本机 IP
ip = socket.gethostbyname(hostname)
print(ip)
方法二
本方法在 Windows 和 Linux 系统下均可正确获取 ip 地址import socket
def get_host_ip():
"""
查询本机 ip 地址
"""
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
return ip
except Exception as e:
logger.exception(str(e))
finally:
if s:
s.close()import socket
_local_ip = None
def get_host_ip():
"""
这个方法是目前见过最优雅获取本机服务器的IP方法了。没有任何的依赖,也没有去猜测机器上的网络设备信息。
而且是利用 UDP 协议来实现的,生成一个UDP包,把自己的 IP 放如到 UDP 协议头中,然后从UDP包中获取本机的IP。
这个方法并不会真实的向外部发包,所以用抓包工具是看不到的。但是会申请一个 UDP 的端口,所以如果经常调用也会比较耗时的,这里如果需要可以将查询到的IP给缓存起来,性能可以获得很大提升。
:return:
"""
global _local_ip
s = None
try:
if not _local_ip:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
_local_ip = s.getsockname()[0]
return _local_ip
finally:
if s:
s.close()