在Python中获取网络地址和网络掩码

2024-05-16 03:04:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的Python脚本中,我需要检索运行脚本的机器的IP地址、网络地址和网络字节。

至于IP地址,我在档案中找到了解决方案:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("www.google.com",80))
myAddress = (s.getsockname()[0])
s.close()

但是我应该如何查找网络地址和网络字节呢?如果有帮助的话,我需要将这些信息放入格式为$NetworkAddress/$NetworkBytes的tcpdump过滤器中。

示例:

128.1.2.0/20

当我运行ip addr时,实际上可以在inet下找到它。用Python获取这些信息有什么简单的方法吗?


Tags: import网络脚本机器信息字节connect档案
2条回答

您可以使用pyroute2模块检索任何与ip相关的信息:

from pyroute2 import IPDB
ip = IPDB()
print(ip.interfaces['em1'].ipaddr)
ip.release()

或作为变体:

from pyroute2 import IPRoute
ip = IPRoute()
info = [{'iface': x['index'],
         'addr': x.get_attr('IFA_ADDRESS'),
         'mask': x['prefixlen']} for x in ip.get_addr()]
ip.close()

对于Linux尝试

iface = "eth0"
socket.inet_ntoa(fcntl.ioctl(socket.socket(socket.AF_INET, socket.SOCK_DGRAM), 
                             35099, struct.pack('256s', iface))[20:24])

http://github.com/rlisagor/pynetlinux

(此处建议:Retrieving network mask in Python

对于Linux、Windows和MacOS,请考虑http://alastairs-place.net/projects/netifaces/

更新:

如果您需要cidr(如“128.1.2.0/20”),可以使用任何相关的lib:http://pypi.python.org/pypi?%3Aaction=search&term=cidr&submit=search

例如netaddr

>> from netaddr import IPNetwork
>> print str(IPNetwork('1.2.3.4/255.255.255.0').cidr)
1.2.3.0/24

相关问题 更多 >