Python 獲取本機內網IP
本文記錄使用Python獲取本機IP的兩種方法。
通過hostname來獲取本機IP
import socket
print(socket.gethostbyname(socket.gethostname()))
此方法是先獲取hostname,然后在通過hostname來查看本機的IP。不推薦此方法,因為若是在/etc/hosts
中將hostnam設置為127.0.0.1
,那么獲取到的就是127.0.0.1
,而非本機的真實IP。
通過UDP獲取本機IP
import socket
try:
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect(('8.8.8.8',80))
ip = s.getsockname()[0]
finally:
s.close()
print(ip)
此方法利用UDP協議,生成一個UDP包,將自己的IP放入UDP協議頭中,然后再從中獲取本機的IP。此方法雖然不會真實向外發包,但仍然會申請一個UDP的端口,所以如果頻繁調用的話也是比較耗時的;可以將查詢到的IP緩存在別處以供使用。