根據IP段或掩碼生成所有可能存在的IP迭代物件

2021-10-10 12:54:35 字數 3129 閱讀 3766

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