from copy import deepcopy
from itertools import product
from typing import List
"""
IPV4 可用地址
A: 1-126 exclude: 10.0-10.255 10 0-255 # 從源頭跳過
exclude: 127.0-127.255 127 0-255 # 從源頭跳過
B: 128-192 exclude: 172.16~172.31 172.16~172.31 # 排除
C: 192-223 exclude: 192.168-192.168 192.168 # 排除
"""
def get_exclude_ipv4() -> List[str]:
"""
獲取需要排除的ip 地址
匹配開頭
"""
exclude_ipv4_1_list = ["172"] # 172
exclude_ipv4_2_list = [] # 16~31
exclude_ipv4_str_list = []
for i in range(16, 31+1):
exclude_ipv4_2_list.append(str(i))
# 排除 172.16~172.31
exclude_ipv4_str_list = [item_ipv4_1__ipv4_2 for item_ipv4_1__ipv4_2 in product(exclude_ipv4_1_list,exclude_ipv4_2_list) ]
# 排除 192.168
exclude_ipv4_str_list.append( ("192", "168") )
return exclude_ipv4_str_list
def get_ipv4_portion():
"""
得到ip 地址的 4個部分
"""
# [1-223].[0-255].[0-255].[1-254]
ipv4_1_list = [] # ipv4 第一部分 [1-223]
ipv4_2_list = [] # ipv4 第二部分 [0-255]
ipv4_3_list = [] # ipv4 第三部分 [0-255]
ipv4_4_list = [] # ipv4 第四部分 [1-254]
# 第一部分
for i in range(1,223+1):
# 從源頭跳過 10 和 127 開頭的 IP
if i == 10 or i ==127:
continue
ipv4_1_list.append(str(i))
# 第二部分
for i in range(0,255+1):
ipv4_2_list.append(str(i))
# 第三部分
ipv4_3_list = ipv4_2_list
# 第四部分
ipv4_4_list = deepcopy(ipv4_2_list)
ipv4_4_list.remove("0")
ipv4_4_list.remove("255")
return ipv4_1_list, ipv4_2_list, ipv4_3_list, ipv4_4_list
def get_all_ipv4():
"""
得到所有可用的ip 地址
"""
exclude_ipv4_prefix_list = get_exclude_ipv4()
for ipv4_portion in product(*get_ipv4_portion()):
prefix = ipv4_portion[:2]
# 第一次對 list in list,測試了幾次,沒發(fā)現(xiàn)問題坐慰,就先這樣寫吧
if prefix in exclude_ipv4_prefix_list:
# 排除
continue
# 用 yield 吧,存到list 中也不清楚要消耗多少內(nèi)存
# yield 保險點
yield ".".join(ipv4_portion)
def get_all_ipv4_port():
"""
知名端口號:知名端口號是指眾所周知的端口號用僧,范圍從0到1023结胀。
動態(tài)端口號:一般程序員開發(fā)應用程序使用端口號稱為動態(tài)端口號, 范圍是從 1024 到 65535 。
"""
for ipv4_address in get_all_ipv4():
for port in range(1024, 65535+1):
yield f"{ipv4_address}:{port}"
if __name__ == "__main__":
for ipv4_address in get_all_ipv4():
print(ipv4_address)
for ipv4_port in get_all_ipv4_port():
print(ipv4_port)
到此結?DragonFangQy?2023.8.26