1. 背景
马上有电子政务外网攻防演练要处理ip
2. 脚本1
生成c段和连续c段所有ip地址.py
用处:生成单一c段或者连续c段范围内的所有ip地址。
用法:ipc.txt 放入 ip段或者两个ip段范围:如:
192.168.3.0/24
 172.16.1.0/24-172.16.3.0/24
 192.168.1.0/24
结果保存到ip.txt
优缺点:单个c段不会生成.0 和 .255,连续c段范围会生成.0 和 .255 广播地址。

python38 生成c段和连续c段所有ip地址.py:
import ipaddress  def generate_ips_from_cidr(cidr):  """生成单个CIDR的所有IP地址"""  network = ipaddress.ip_network(cidr, strict=False)  return [str(ip) for ip in network.hosts()]  def generate_ips_from_range(start_cidr, end_cidr):  """生成CIDR范围的所有IP地址"""  start_network = ipaddress.ip_network(start_cidr, strict=False)  end_network = ipaddress.ip_network(end_cidr, strict=False)  # 计算CIDR范围的起始和结束IP地址  start_ip = int(ipaddress.IPv4Address(start_network.network_address) + 1)  end_ip = int(ipaddress.IPv4Address(end_network.broadcast_address))  # 生成范围内的所有IP地址  all_ips = []  current_ip = start_ip  while current_ip <= end_ip:  all_ips.append(str(ipaddress.IPv4Address(current_ip)))  current_ip += 1  return all_ips  def process_cidrs_and_save_unique_ips(input_file, output_file):  """处理CIDR和CIDR范围,去重后保存IP地址到文件"""  with open(input_file, 'r') as file:  lines = file.readlines()  all_ips = set()  # 使用集合来自动去重  for line in lines:  line = line.strip()  if '-' in line:  # 处理CIDR范围  start_cidr, end_cidr = line.split('-')  all_ips.update(generate_ips_from_range(start_cidr, end_cidr))  else:  # 处理单个CIDR  all_ips.update(generate_ips_from_cidr(line))  # 将去重后的IP地址写入文件  with open(output_file, 'w') as file:  for ip in sorted(all_ips):  # 对IP地址进行排序  file.write(ip + '\n')  print(f"Saved {len(all_ips)} unique IP addresses to {output_file}")  # 定义输入和输出文件名  
input_file = 'ipc.txt'  
output_file = 'ip.txt'  # 处理文件并保存结果  
process_cidrs_and_save_unique_ips(input_file, output_file)3. 脚本2
生成范围内C段.py
用处:如果多个c段范围,要自己手工,用的肯定不多,还是为了偷懒。
用法:两个ip段范围:如:
172.16.1.0/24-172.16.3.0/24
 192.168.8.0/24-192.168.30.0/24

python38 生成范围内C段.py
import ipaddress  def generate_c_blocks(start_cidr, end_cidr):  """生成从start_cidr到end_cidr范围内的所有C段"""  start_network = ipaddress.ip_network(start_cidr, strict=False)  end_network = ipaddress.ip_network(end_cidr, strict=False)  c_blocks = []  current_network = start_network  while current_network <= end_network:  c_blocks.append(str(current_network))  current_network = ipaddress.ip_network(f"{current_network.network_address + 256}/{current_network.prefixlen}", strict=False)  return c_blocks  def process_cidr_ranges(input_file, output_file):  """处理CIDR范围并保存到输出文件"""  with open(input_file, 'r') as file:  for line in file:  line = line.strip()  if not line or line.startswith('#'):  # 忽略空行和注释行  continue  # 假设每行包含一个CIDR范围,用"-"分隔  start_cidr, end_cidr = line.split('-')  c_blocks = generate_c_blocks(start_cidr, end_cidr)  # 将C段写入输出文件  with open(output_file, 'a') as out_file:  for c_block in c_blocks:  out_file.write(c_block + '\n')  # 调用函数处理ipc.txt文件并将结果保存到ip.txt  
process_cidr_ranges('ipc.txt', 'ip.txt')