import socket
import struct
from ipy import ip
class
ipanalysis
(object):
''' @desc : 初始化函式
@引數ipstring : 初始化傳入ip
eg: 192.168.0.0/24
192.168.0.1-192.168.0.123
192.168.0.100
'''def__init__
(self, ip_string)
: self.ipstring = ip_string
@staticmethod
defgen_ips_for_netmask
(ip_str)
:"""
根據掩碼生成ip迭代物件
"""ip_list = ip(ip_str)
return
(ip_obj for ip_obj in ip_list)
@staticmethod
defgen_ips
(ip_str)
:"""
根據ip段生成ip迭代物件
"""ip_info = ip_str.split(
'-')
start = ip_info[0]
end = ip_info[1]
start = struct.unpack(
'>i'
, socket.inet_aton(start))[
0]end = struct.unpack(
'>i'
, socket.inet_aton(end))[
0]return
(socket.inet_ntoa(struct.pack(
'>i'
, i)
)for i in
range
(start, end+1)
)def
gen_ip_list
(self)
:"""生成ip可迭代物件"""
source_ip_str = self.ipstring
try:if
"/"in source_ip_str:
return self.gen_ips_for_netmask(source_ip_str)
elif
"-"in source_ip_str:
return self.gen_ips(source_ip_str)
else
:return
[source_ip_str]
except exception as e:
return
defgen_net_period_str
(self)
:"""返回ip網路段 str型別
例如:192.168.0.1-192.168.0.123 -> 192.168.0
192.168.0.0/24 -> 192.168.0
192.168.0.0/16 -> 192.168
192.168.0.0 -> 192.168.0.0
"""source_ip_str = self.ipstring
try:if
"/"in source_ip_str:
ip_info = source_ip_str.split(
'/')
mask =
int(ip_info[-1
])net_period_num =(32
- mask)//8
net_period =
".".join(ip_info[0]
.split(
'.')[:
-net_period_num]
)return net_period
elif
"-"in source_ip_str:
ip_list = source_ip_str.split(
'-')
start = ip_list[0]
.split(
'.')
end = ip_list[1]
.split(
'.')
index =
4for s, e in
zip(start, end)
:if s != e:
index = start.index(s)
break
return
".".join(start[
:index]
)else
:return source_ip_str
except exception as e:
logger.error(
"ip 解析失敗: %s"
% e, log_path)
return source_ip_str
if __name__ ==
'__main__'
: ips = ipanalysis(
'192.168.1.0/24'
) ip_iteration = ips.gen_ip_list(
)print
(ip_iteration)
for ip in ip_iteration:
print
(ip)
""".at 0xb69d9e60>
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
...192.168.1.253
192.168.1.254
192.168.1.255
"""
if __name__ ==
'__main__'
: ips = ipanalysis(
'192.168.1.0/24'
) ip_str = ips.gen_net_period_str(
)print
(ip_str)
"""192.168.1
"""
根據ip 掩碼格式位址段得到起始位址和結束位址
需求 給出ip 掩碼的形式,求出起始位址和結束位址,例如6.61.252.0 24的起始位址為6.61.252.1,結束位址為6.61.252.254。因為我是在頁面做處理,所以寫的是js 1 計算起始位址 傳入的引數第乙個為ip,比如例子中的6.61.252.0。第二個引數為掩碼的ip格式,例子中...
根據MAC生成唯一IP
冷勝魁 seaquester lengshengkui gmail.com 2009 5 15 mac2ip.sh bin sh if ne 1 then echo usage basename 0 exit 1 fi we need convert to uppercase,otherwise t...
根據子網掩碼判斷網段有效的IP位址
之前在牛客網上看到一道關於tcp ip的題目,當時不是很理解子網掩碼的機制沒有做出來。前段時間看 tcp ip 剛好裡面有講到這部分的內容,剛好把這道題解決了,知識點分析的感覺通俗易懂,特此分享下。下列選項中,屬於 10.174.20.176 28 該網段的有效ip位址是 a 10.174.20.1...