了解最新公司動態及行業資訊
這種方法是最優雅的獲取本地服務器IP的方式。沒有依賴關系服務器運維,也不用猜測機器上的網絡設備信息。
并且是使用UDP協議實現的,它生成一個UDP包,將自己的IP放入UDP協議頭中,然后從UDP包中獲取本機的IP。
這個方法實際上并沒有向外發送數據包,所以對抓包工具是不可見的。但是,它會申請一個UDP端口服務器運維,所以如果頻繁調用,會比較耗時。如果需要緩存查詢到的IP,可以大大提升性能。

注意:以上方法需要網卡配置網關(也可以用錯網關)

# -*- conding:utf-8 -*-
# 使用utf8作為編碼格式
import socket
# 封裝成函數,方便 Python 的程序調用
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"您當前的主機名為: {IPaddr()}")
print(f'當前IP為: {get_host_ip()}')
print('
')

運行結果
當然可以在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])"