获取Python中的网络地址和网络掩码(Get network address and networ

2019-07-30 09:52发布

在我的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()

但我应该如何去寻找网络地址和网络字节? 我需要把这个信息到过滤器tcpdump的格式为$NetworkAddress/$NetworkBytes ,有没有什么帮助的。

例:

128.1.2.0/20

实际上,我可以找到它在inet当我运行ip addr 。 任何简单的方法来获得在Python这一信息?

Answer 1:

对于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

(如下建议: 检索在Python网络掩码 )

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

更新:

如果你需要CIDR(如“128.1.2.0/20”),你可以使用任何相关林达: 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


Answer 2:

你可以检索与任何与知识产权相关的信息pyroute2模块:

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()


文章来源: Get network address and network mask in Python