Python netifaces给出两个地址

时间:2018-07-27 18:24:01

标签: python networking

我正在尝试获取机器的ip地址和广播地址,经过大量研究netifaces可以正常工作,但是问题是ip地址可以正确打印,但是当我想要广播地址时,它也提供了docker广播地址以及“ lo”广播地址,但是我只想要“ lo”广播地址,我不确定如何仅获取与“ lo”关联的广播地址。请帮我一些想法。另外我不确定我是否提到过只想要'lo'广播地址,但是它也给了我dockers广播地址。

代码:

import netifaces
interfaces=netifaces.interfaces()
for i in interfaces:
   if i=='lo':
   continue
   iface= netifaces.ifaddresses(i).get(netifaces.AF_INET)
   if iface != None:
      for j in iface:
        bd=(j['broadcast'])
        print(bd)

输出:

192.169.x.x('lo'-broadcast)
175.17.x.x ('docker'-broadcast)

1 个答案:

答案 0 :(得分:1)

您为什么要去lo?这通常是本地环回,并且始终具有127.0.0.1。我只是在CentOS环境中做到的。如果您使用的是Windows,则只需在星期几输入“ ifconfig adapter-name”字符串...就可以使用“ ipconfig / all”之类的东西。

#! /usr/bin/python
import os
import re

def get_ip_data(ether_adapter):
    ip_list = []
    ip_data = os.popen("ifconfig " + ether_adapter)
    for line in ip_data:
        match1 = re.search(r'inet\s+(\d+.\d+.\d+.\d+)', line)
        match2 = re.search(r'broadcast\s+(\d+.\d+.\d+.\d+)', line)
        if match1:
            ip = match1.group(1)
            ip_list.append(ip)
        if match2:
            bcast = match2.group(1)
            ip_list.append(bcast)
    return ip_list


if __name__ == "__main__":
    ethernet_card = "virbr0"
    inet_list = get_ip_data(ethernet_card)
    for element in inet_list:
        print(element)

[root@server Desktop]# ./ip.py 
192.168.122.1
192.168.122.255

在客户端中,“ virbr0”是我的wifi卡的名称。只需将其替换为您的wifi卡或以太网卡名称作为字符串即可。