使用Python获取IP地址中的最后一个八位字节

使用Python获取IP地址中的最后一个八位字节,python,Python,我正在编写一个Python脚本,它将采用CIDR格式(即1.1.1.0/32或10.0.0.1/24)的IP地址,并将IP分为三部分:前三个八位字节(1.1.1)、最后一个八位字节(0)和子网掩码(32)。IP将是可变长度的,所以我不知道是否可以使用某种字符串计数器 有什么想法吗 谢谢将IP解析为int,并使用位运算符获取它 另一种方法是使用像这样的库。我个人更喜欢这个库。我会使用正则表达式。您可以使用r'.'将所有八位字节拆分为一个列表,然后按照您喜欢的顺序重新组合它们。你可以写一个更复杂的r

我正在编写一个Python脚本,它将采用CIDR格式(即1.1.1.0/32或10.0.0.1/24)的IP地址,并将IP分为三部分:前三个八位字节(1.1.1)、最后一个八位字节(0)和子网掩码(32)。IP将是可变长度的,所以我不知道是否可以使用某种字符串计数器

有什么想法吗


谢谢

将IP解析为int,并使用位运算符获取它


另一种方法是使用像这样的库。我个人更喜欢这个库。

我会使用正则表达式。您可以使用r'.'将所有八位字节拆分为一个列表,然后按照您喜欢的顺序重新组合它们。你可以写一个更复杂的re来一笔完成,但我认为这会有点难

import re
ip = '1.1.1.1/32'
re.split(r'(\.|/)', ip)
使用正则表达式:

#!/usr/bin/python
import re


def extractIP( ipStr):

    l = re.split('(.*)\.(.*)\.(.*)\.(.*)/(.*)', ipStr)
    return l[1:-1]

print extractIP("1.2.3.45/35")

在这种情况下,使用正则表达式很简单

(\d{,3}\.\d{,3}\.\d{,3})\.(\d{,3})\/(\d+)

结合使用
re.match
方法将产生结果。

正则表达式可能会很麻烦。也可以使用split()函数


Python3.3有一个可以很好地处理CIDR格式的掩码的方法。Python2.6/2.7有一个可用的子网掩码。如果您使用子网掩码,为什么要关心八分位边界?你真的不想要:网络号、主机号和子网掩码吗?这个问题很老了。但对于新来者,我强烈支持Martjin Pieters的建议,即使用ipaddress模块,因为它可以处理子网和ipv6(现在开始定期出现)。我认为下面所有的正则表达式解决方案都过时了。
inp = '192.168.0.1/24'
ip, submask = inp.split('/')
octets = ip.split('.')
ipstring="192.168.1.1/12"
s=re.split(r"\b(\d{1,3}\.\d{1,3}\.\d{1,3})\.(\d{1,3})\/(\d+)\b",ipstring)
print s
['', '192.168.1', '1', '12', '']
print s[1]
192.168.1
print s[2]
1
print s[3]
12
>>>