1樓:鐘翦
Python 優雅獲取本機 IP 方法
這篇博文裡面那個用UDP的方式不錯。我稍微改了下,是這樣:
import socket
_local_ip = None
def get_host_ip34;""
這個方法是目前見過最優雅獲取本機伺服器的IP方法了。沒有任何的依賴,也沒有去猜測機器上的網路裝置資訊。
而且是利用 UDP 協議來實現的,生成乙個UDP包,把自己的 IP 放如到 UDP 協議頭中,然後從UDP包中獲取本機的IP。
這個方法並不會真實的向外部發包,所以用抓包工具是看不到的。但是會申請乙個 UDP 的埠,所以如果經常呼叫也會比較耗時的,這裡如果需要可以將查詢到的IP給快取起來,效能可以獲得很大提公升。
:return:
"""global _local_ip
s = None
tryif not _local_ips = socket.socket(socket.AF_INET, socket.
SOCK_DGRAMs.connect(('8.8.
8.8', 80local_ip = s.getsockname()[0return _local_ip
finallyif ss.close()
2樓:
沒發現虛擬網絡卡是沒有預設閘道器的嗎?
Windows如下
import
osdef
get_local_ip
():result=
ipv4
=None
ipv6
=None
forx
inos
.popen
('ipconfig'
):result.(
x)forx
inrange
(len
(result
)):if
'IPv4'
inresult[x
]and
result[x
+2][-
2]!=' '
:ipv4
=result[x
][result[x
].find
(':')+
2:-1
]elif
'IPv6'
inresult[x
]and
result[x
+3][-
2]!=' '
:ipv6
=result[x
][result[x
].find
(':')+
2:-1
]return
ipv4
,ipv6
3樓:
事實上socket.gethostbyname()並不好用,所以import socket
def get_host_ip():
trys = socket.socket(socket.AF_INET, socket.
SOCK_DGRAMs.connect(('8.8.
8.8', 80ip = s.getsockname()[0]
finallys.close()
return ip
不知道對你適不適用
4樓:
如果想獲取正在上網所使用的本機IP,通過route命令可以得到:
Windows下用
[a for a in os.popen('route print').readlines() if ' 0.
0.0.0 ' in a][0].
split()[-2]
Linux下用
[a for a in os.popen('/sbin/route').readlines() if 'default' in a][0].split()[1]
Python如何獲取呼叫檔案的路徑?
彭雨嫣 a.py from com.company.testForInspect.c import just print if name main just print hey it s a b.py from com.company.testForInspect.c import just pri...
剛開始接觸Python,如何正確高效的開展Python學習?
zhaossbnu python安裝目錄下有乙個人doc資料夾,裡面又乙個chm檔案,你參考那個學習乙個 官方還有pdf版的Download Python 3.4.5 documentation 傅坦坦 看下基本語法,然後直接開始擼碼。比如前些天我要考學位英語,頻繁查網頁版的有道詞典,其實我的需求只...
Python如何呼叫另乙個py獲取函式名稱?
Python蕭邦 from HelloWorld import Hello h Hello h.hello Hello,world 輸出結果 HelloWorld.py檔案內容 class Hello object def hello self,name world print Hellp,s na...