python 获取准确IPv4地址的另一种思路

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

posted @ 2019-04-01 23:02  b10ckO  阅读(1970)  评论(0)    收藏  举报