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