簡體   English   中英

使用 Python 獲取 IP 地址中的最后一個八位字節

[英]Grab the last octet in an IP address using Python

我正在編寫一個 Python 腳本,它將采用 CIDR 格式的 IP 地址(即 1.1.1.0/32 或 10.0.0.1/24)並將 IP 分成三部分:前三個八位字節 (1.1.1),最后一個八位字節 (0) 和子網掩碼 (32)。 IP 將是可變長度的,所以我不知道是否可以使用某種字符串字符計數器。

有任何想法嗎?

謝謝

正則表達式可能很麻煩。 您還可以使用 split() 函數

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

將 IP 解析為 int,並使用按位運算符獲取它。

另一種方法是使用像ipaddr-py這樣的庫。 我個人更喜歡圖書館。

使用正則表達式:

#!/usr/bin/python
import re


def extractIP( ipStr):

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

print extractIP("1.2.3.45/35")

我會使用正則表達式。 您可以使用 r'.' 將所有八位字節拆分為一個列表。 然后以您喜歡的任何順序重新組合它們。 你可以寫一個更復雜的 re 來一次性完成,但我認為那會有點難。

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

在這種情況下,使用正則表達式會很簡單。

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

結合使用re.match方法會產生你的結果。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM