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的时间,但目前只能这样了。。。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM