请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Python 优雅获取本机 IP 方法

[复制链接]
查看: 100|回复: 0

1万

主题

2万

帖子

5万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
50428
发表于 2019-11-9 18:43 | 显示全部楼层 |阅读模式
见过很多获得办事器当地IP的代码,小我以为都不是很好,例如以下这些
不举荐:靠猜测去获得当地IP方式
  1. #!/usr/bin/env python# -*- coding: utf-8 -*- import socketimport fcntlimport 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]) print "br1 = "+ get_ip_address('br1')print "lo = " + get_ip_address('lo')print "virbr0 = " + get_ip_address('virbr0')
复制代码
这类代码带有猜测的行为。
假如呆板上只要eth0 大要 只要bond0上有IP,那末此类代码都有大要失利,而且还不轻易移植到其他平台上。
不举荐:经过hostname来获得本机IP
  1. import socketprint(socket.gethostbyname(socket.gethostname())) # 有大要出现这个情况Traceback (most recent call last):  File "", line 1, in socket.gaierror: [Errno -2] Name or service not known
复制代码
这个方式是经过获得hostname,然后再经过hostname反查处呆板的IP。这个方式也是不举荐的。由于很多的呆板没有标准这个hostname的设备。
此外就是有些办事器会在 /etc/hosts 中增加本机的hostname的地址,这个做法也不是不成以,可是假如设备成了 127.0.0.1,那末获得出来的IP就都是这个地址了。
经过 UDP 获得本机 IP,现在见过最文雅的方式
这个方式是现在见过最文雅获得本机办事器的IP方式了。没有任何的依靠,也没有去猜测呆板上的收集装备信息。
而且是操纵 UDP 协议来实现的,天生一个UDP包,把自己的 IP 放如到 UDP 协议头中,然后从UDP包中获得本机的IP。
这个方式并不会实在的向内部发包,所以用抓包工具是看不到的。可是会申请一个 UDP 的端口,所以假如经常挪用也会比力耗时的,这里假如必要可以将查询到的IP给缓存起来,性能可以获得很大提升。
  1. # 在 shell 中可以一行挪用,获得到本机IPpython -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
复制代码
转自:https://www.cnblogs.com/lfxiao/p/9672975.html

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表