通过 UDP 获取本机 IP, 目前见过最优雅的方法
这个方法是目前见过最优雅获取本机服务器的 IP 方法了. 没有任何的依赖, 也没有去猜测机器上的网络设备信息.
而且是利用 UDP 协议来实现的, 生成一个 UDP 包, 把自己的 IP 放如到 UDP 协议头中, 然后从 UDP 包中获取本机的 IP.
这个方法并不会真实的向外部发包, 所以用抓包工具是看不到的. 但是会申请一个 UDP 的端口, 所以如果经常调用也会比较耗时的, 这里如果需要可以将查询到的 IP 给缓存起来, 性能可以获得很大提升.
- # 在 shell 中可以一行调用, 获取到本机 IP
- python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])"
- 10.12.189.16
- # 可以封装成函数, 方便 Python 的程序调用
- import socket
- def get_host_ip():
- try:
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- s.connect(('8.8.8.8', 80))
- ip = s.getsockname()[0]
- finally:
- s.close()
- return ip
来源: http://www.bubuko.com/infodetail-2736045.html