-
Notifications
You must be signed in to change notification settings - Fork 337
Open
Description
The function get_ip_seg_len() in net.py encountered an error when processing a subnet that spans multiple CIDR blocks. Specifically, attempting to handle IP ranges like 103.168.174.0-103.168.176.255 resulted in an invalid subnet conversion (103.168.174.0/22). which would need to be something like...
103.168.174.0/23 (covers 103.168.174.0 - 103.168.175.255)
103.168.176.0/24 (covers 103.168.176.0 - 103.168.176.255)
OG code:
def get_ip_seg_len(ip_seg: str) -> int:
"""获取一个 IP 段内的 IP 数目"""
if '-' in ip_seg or '/' in ip_seg:
return IPy.IP(ip_seg, make_net=True).len()
else:
return 1
What I changed that to:
import IPy
import random
import requests
from xml import etree
from ipaddress import summarize_address_range, ip_address
def get_ip_seg_len(ip_seg: str) -> int:
"""获取一个 IP 段内的 IP 数目 (Handles both CIDR & Range)"""
if '-' in ip_seg:
start_ip, end_ip = map(ip_address, ip_seg.split('-'))
cidr_blocks = list(summarize_address_range(start_ip, end_ip))
return sum(IP(str(cidr)).len() for cidr in cidr_blocks)
if '/' in ip_seg:
return IP(ip_seg, make_net=True).len()
return 1
Seemed to work ok for me now.
Metadata
Metadata
Assignees
Labels
No labels