如何用Python列出Windows系统上所有定义的IP地址?
在一台Windows 7的电脑上,我添加了一些虚拟IP地址,所以运行ipconfig
命令后,输出结果如下:
Windows IP Configuration
Ethernet adapter LAN-Verbindung:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::2d27:f07a:a617:b01e%11
IPv4 Address. . . . . . . . . . . : 172.16.5.23
Subnet Mask . . . . . . . . . . . : 255.255.0.0
IPv4 Address. . . . . . . . . . . : 172.16.5.161
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . . . . . . . . . . : 172.16.5.162
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . . . . . . . . . . : 172.16.5.163
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.5.1
Ethernet adapter VirtualBox Host-Only Network:
----
我想用标准的Python,也就是只用Python自带的库,来获取所有这些IPv4地址的列表。也就是说,我希望有一些Python代码能够返回以下信息:
172.16.5.23
172.16.5.161
172.16.5.162
172.16.5.163
我该如何用Python做到这一点?最好是一行代码就能搞定。
2 个回答
0
这段代码会让你看到ipconfig命令的输出结果:
import subprocess
(out, err) = subprocess.Popen(["ipconfig"], stdout=subprocess.PIPE, shell=True).communicate()
现在只需要处理一下这个字符串,把里面的IP地址提取出来,放到一个列表里。
2
import subprocess
import re
proc = subprocess.check_output("ipconfig" )
print "\n".join(re.findall(r"(?<=IPv4 Address. . . . . . . . . . . : )(\d+\.\d+\.\d+\.\d+)",proc))
这是一个例子:
s = """
Ethernet adapter LAN-Verbindung:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::2d27:f07a:a617:b01e%11
IPv4 Address. . . . . . . . . . . : 172.16.5.23
Subnet Mask . . . . . . . . . . . : 255.255.0.0
IPv4 Address. . . . . . . . . . . : 172.16.5.161
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . . . . . . . . . . : 172.16.5.162
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IPv4 Address. . . . . . . . . . . : 172.16.5.163
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.5.1
"""
In [13]: print "\n".join(re.findall(r"(?<=IPv4 Address. . . . . . . . . . . : )(\d+\.\d+\.\d+\.\d+)",s))
172.16.5.23
172.16.5.161
172.16.5.162
172.16.5.163