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



我目前用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.11.1.1.11.1.1.21.1.1.21.1.1.31.1.1.31.1.1.41.1.1.4等。我不希望输出重复。

可以将ip_range的类型从list更改为set;后者不允许重复条目:

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

最新更新