IP 范围 Script.py 帮助。输出文件中的重复条目

IP Range Script.py Help. Repeating Entries on Output file

我目前使用 Python 编写的脚本应该从文本文档中获取两个 IP,找到 IPS 之间的范围,然后将该输出写入新文件。我得到了脚本来输出我想要的内容,但问题是它打印了两次相同的 IP,这不会像我想要的那样有效。我认为问题出在我的第一个正则表达式上,但我愿意接受任何建议。

import re

def ipRange(start_ip, end_ip):
   start = list(map(int, start_ip.split(".")))
   end = list(map(int, end_ip.split(".")))
   temp = start
   ip_range = []

   ip_range.append(start_ip)
   while temp != end:
      start[3] += 1
      for i in (3,2):
        if temp[i] == 256:
            temp[i] = 0
            temp[i-1] += 1
        ip_range.append(".".join(map(str, temp)))
        
    return ip_range
with open(r'AU Sorted IPs') as f:
    fstring = f.readlines()

newFile = open("AU IP Block.txt", "w")    

start_ip = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1})')
end_ip = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{3})')


for line in fstring:
    ip_range = ipRange(start_ip.search(line).group(), end_ip.search(line).group())

    for ip in ip_range:
        newFile.write((ip)+"\n")
        print(ip)

newFile.close()

输出文件如下所示:

1.1.1.1 1.1.1.1 1.1.1.2 1.1.1.2 1.1.1.3 1.1.1.3 1.1.1.4 1.1.1.4 等等 我希望输出不重复。

您可以将 ip_range 的类型从列表更改为集合;后者不允许重复条目:

def ipRange(start_ip, end_ip):
   start = list(map(int, start_ip.split(".")))
   end = list(map(int, end_ip.split(".")))
   temp = start
   ip_range = set()

   ip_range.add(start_ip)
   while temp != end:
      start[3] += 1
      for i in (3,2):
        if temp[i] == 256:
            temp[i] = 0
            temp[i-1] += 1
        ip_range.add(".".join(map(str, temp)))
    
   return ip_range

在这种情况下,输出应是一组具有唯一条目(在这种情况下为 ip(s))