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

时间:2013-03-28 15:16:17

标签: python

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

有什么想法吗?

由于

6 个答案:

答案 0 :(得分:3)

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

另一种方法是使用像ipaddr-py这样的库。我个人更喜欢图书馆。

答案 1 :(得分:2)

使用正则表达式:

#!/usr/bin/python
import re


def extractIP( ipStr):

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

print extractIP("1.2.3.45/35")

答案 2 :(得分:2)

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

inp = '192.168.0.1/24'
ip, submask = inp.split('/')
octets = ip.split('.')

答案 3 :(得分:0)

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

import re
ip = '1.1.1.1/32'
re.split(r'(\.|/)', ip)

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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