给定一个IP地址和子网掩码,确定网络IP。

3
在Python中,如果我有一个IP地址和子网掩码的字符串,如何确定网络IP?
例如,IP = 10.0.0.20,掩码=255.255.255.0将导致网络IP为10.0.0.0。

{btsdaf} - Ron Maupin
Are these strings? - Stephen Rauch
1
{btsdaf} - Ron Maupin
{btsdaf} - Stephen Rauch
1
{btsdaf} - Yaroslav Surzhikov
显示剩余2条评论
4个回答

9
您可以使用内置的 ipaddress 库:
import ipaddress
network = ipaddress.IPv4Network('10.0.0.20/255.255.255.0', strict=False)
print(network.network_address)

结果:

10.0.0.0

4

模块ipcalc可以方便地将IP地址作为字符串处理:

代码:

import ipcalc

addr = ipcalc.IP('10.0.0.20', mask='255.255.255.0')
network_with_cidr = str(addr.guess_network())
bare_network = network_with_cidr.split('/')[0]

print(addr, network_with_cidr, bare_network)

结果:

IP('10.0.0.20/24') '10.0.0.0/24' '10.0.0.0'

很不幸,我无法控制托管代码的机器,并且无法导入ipcalc。我必须用“困难”的方式来完成它。 - Calab
1
大多数库都是Python的。您可以像部署代码一样简单地部署库... - Stephen Rauch

2

好的,我应该发布我所做的事情..它适用于我的目的:

# Return the network of an IP and mask
def network(ip,mask):

    network = ''

    iOctets = ip.split('.')
    mOctets = mask.split('.')

    network = str( int( iOctets[0] ) & int(mOctets[0] ) ) + '.'
    network += str( int( iOctets[1] ) & int(mOctets[1] ) ) + '.'
    network += str( int( iOctets[2] ) & int(mOctets[2] ) ) + '.'
    network += str( int( iOctets[3] ) & int(mOctets[3] ) )

    return network

0
import ipaddress
network_address = ipaddress.ip_network('1000::5665/96', strict=False).network_address
#works for both ipv4 and ipv6
print(network_address)

你好,请不要只在你的答案中提交代码,还要添加一些详细信息,说明为什么你认为这是最佳解决方案。 - Destroy666

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接