今天在做一个局域网文件传输脚本时需要获取局域网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的时间,但目前只能这样了。。。