今天在做一個局域網文件傳輸腳本時需要獲取局域網IP,第一個想到的肯定是socket模塊,用如下代碼:
1 import socket 2 myname = socket.getfqdn(socket.gethostname()) 3 myaddr = socket.gethostbyname(myname) 4 print(myaddr)
運行后發現得到的不是我物理有線網卡的ip地址,而是虛擬機網卡的ip地址,如圖:
遂放棄這種方法,直接用os庫操作命令行 ,然后導出到文本,再讀取文本信息用正則表達式提取出正確的ip地址
import os,re def get_realip(self): filename = "ip.swbd" # open(filename, "w").write("") os.system("ipconfig > {}".format(filename)) text = open("{}".format(filename)).read() print(text) try: ipv4 = re.findall(r'以太網適配器 以太網:(.*?)默認網關', text, re.S)[0] ipv4 = re.findall(r'IPv4 地址 . . . . . . . . . . . . :(.*?)子網掩碼', ipv4, re.S)[0].replace(" ", "") print(ipv4) except: ipv4 = re.findall(r'無線局域網適配器 WLAN:(.*?)默認網關', text, re.S)[0] ipv4 = re.findall(r'IPv4 地址 . . . . . . . . . . . . :(.*?)子網掩碼', ipv4, re.S)[0].replace(" ", "") print(ipv4) os.remove(filename) return ipv4 ipv4 = get_realip()
雖然運行要耗費0.02s的時間,但目前只能這樣了。。。