了解最新公司動(dòng)態(tài)及行業(yè)資訊
這種方法是最優(yōu)雅的獲取本地服務(wù)器IP的方式。沒(méi)有依賴關(guān)系服務(wù)器運(yùn)維,也不用猜測(cè)機(jī)器上的網(wǎng)絡(luò)設(shè)備信息。
并且是使用UDP協(xié)議實(shí)現(xiàn)的,它生成一個(gè)UDP包,將自己的IP放入U(xiǎn)DP協(xié)議頭中,然后從UDP包中獲取本機(jī)的IP。
這個(gè)方法實(shí)際上并沒(méi)有向外發(fā)送數(shù)據(jù)包,所以對(duì)抓包工具是不可見(jiàn)的。但是,它會(huì)申請(qǐng)一個(gè)UDP端口服務(wù)器運(yùn)維,所以如果頻繁調(diào)用,會(huì)比較耗時(shí)。如果需要緩存查詢到的IP,可以大大提升性能。
注意:以上方法需要網(wǎng)卡配置網(wǎng)關(guān)(也可以用錯(cuò)網(wǎng)關(guān))
# -*- conding:utf-8 -*-
# 使用utf8作為編碼格式
import socket
# 封裝成函數(shù),方便 Python 的程序調(diào)用
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
a = socket.socket(socket.AF_INET)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
if __name__ == '__main__':
print(f"您當(dāng)前的主機(jī)名為: {IPaddr()}")
print(f'當(dāng)前IP為: {get_host_ip()}')
print('
')
運(yùn)行結(jié)果
當(dāng)然可以在shell中調(diào)用一行獲取服務(wù)器的本地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])"
24小時(shí)免費(fèi)咨詢
請(qǐng)輸入您的聯(lián)系電話,座機(jī)請(qǐng)加區(qū)號(hào)