方法一:
通常使用socket.gethostbyname()
方法即可獲取本機IP地址,但有時候獲取不到(比如沒有正確設置主機名稱),示例代碼如下:
1 import socket 2 #獲取本機電腦名 3 myname = socket.gethostname() 4 #獲取本機ip 5 myaddr = socket.gethostbyname(myname) 6 print(myaddr)
方法二:
這個方法獲取本機服務器的IP。沒有任何的依賴。
而是利用 UDP 協議來實現的,生成一個UDP包,把自己的 IP 放入到 UDP 協議頭中,然后從UDP包中獲取本機的IP。
這個方法並不會真實的向外部發包,所以用抓包工具是看不到的。但是會申請一個 UDP 的端口,所以如果經常調用也會比較耗時的,這里如果需要可以將查詢到的IP給緩存起來,性能可以獲得很大提升。
1 import socket 2 3 def get_host_ip(): 4 """ 5 查詢本機ip地址 6 :return: ip 7 """ 8 try: 9 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 10 s.connect(('8.8.8.8', 80)) 11 ip = s.getsockname()[0] 12 finally: 13 s.close() 14 15 return ip 16 17 if __name__ == '__main__': 18 print(get_host_ip())