我正在編寫一個Python腳本,它將採用CIDR格式的IP地址(即1.1.1.0/32或10.0.0.1/24)並將IP分成三部分:前三個八比特組(1.1.1),最後一個八位字節(0)和子網掩碼(32)。 IP的長度是可變的,所以我不知道我是否可以使用某種字符串字符計數器。使用Python獲取IP地址中的最後一個字節使用Python獲取IP地址的最後一個八位字節
任何想法?
感謝
我正在編寫一個Python腳本,它將採用CIDR格式的IP地址(即1.1.1.0/32或10.0.0.1/24)並將IP分成三部分:前三個八比特組(1.1.1),最後一個八位字節(0)和子網掩碼(32)。 IP的長度是可變的,所以我不知道我是否可以使用某種字符串字符計數器。使用Python獲取IP地址中的最後一個字節使用Python獲取IP地址的最後一個八位字節
任何想法?
感謝
解析IP爲一個int,並使用位運算符來得到它。
另一種方法是使用像ipaddr-py這樣的庫。我個人比較喜歡圖書館。
我會使用正則表達式。您可以使用r'將所有八位字節分割成一個列表。然後按照您喜歡的順序重新組合它們。你可以寫一個更復雜的重做一次,但我認爲這會更困難。
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()函數
inp = '192.168.0.1/24'
ip, submask = inp.split('/')
octets = ip.split('.')
IPv6怎麼樣? – plaes
Python 3.3有一個['ipaddress'模塊](http://docs.python.org/3/library/ipaddress.html),可以很好地處理CIDR格式的遮罩。有一個[port](https://pypi.python.org/pypi/ipaddress)可用於Python 2.6/2.7。 –
如果你使用的是子網掩碼,你爲什麼關心八位字節的邊界?你不是真的想要:網絡號碼,主機號碼和子網掩碼嗎? –