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))
我目前使用 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))