我正在寻找一些指示,让我朝着正确的方向前进。我有一个大约60个可变子网的列表,这些子网驻留在全球各种防火墙上。
10.10.10.0/24 Firewall-Denver
10.10.20.0/25 Firewall-NewYork
10.10.30.0/28 Firewall-China
等等......
我有另一个(很长的)IP地址列表,我想根据子网列表进行检查(我假设python模块最适合这样做吗?)然后我想返回防火墙那个子网与。
相关联10.10.10.1
10.10.10.174
10.10.20.3
10.10.30.19
所以返回类似
的内容10.10.10.1 Firewall-Denver
10.10.10.174 Firewall-Denver
10.10.20.3 Firewall-NewYork
10.10.30.19 Firewall-China
提前感谢您的建议。所以我不只是寻找IP /子网,而是要返回一个不同的密钥。
答案 0 :(得分:4)
您可以在python 3中使用ipaddress
模块:
import ipaddress
ipsub = {"10.10.10.0/24": "Firewall-Denver", "10.10.20.0/25": "Firewall-NewYork"}
iplist = ["10.10.10.1","10.10.10.174","10.10.20.126"]
ipfirewall = {}
for i in ipsub:
for j in iplist:
if ipaddress.ip_address(j) in ipaddress.ip_network(i):
ipfirewall[j] = ipsub[i]
输出:
>>> ipfirewall
{'10.10.10.1': 'Firewall-Denver', '10.10.20.126': 'Firewall-NewYork', '10.10.10.174': 'Firewall-Denver'}
如果要输出嵌套列表,然后将其写入文件,请改用:
import ipaddress
ipsub = {"10.10.10.0/24": "Firewall-Denver" ,"10.10.20.0/25": "Firewall-NewYork"}
iplist = ["10.10.10.1","10.10.10.174","10.10.20.126"]
ipfirewall = []
for i in ipsub:
for j in iplist:
if ipaddress.ip_address(j) in ipaddress.ip_network(i):
ipfirewall.append([j,ipsub[i]])
with open('output.txt', 'w') as file:
file.writelines('\t'.join(i) + '\n' for i in ipfirewall)
输出:
>>> ipfirewall
[['10.10.10.1', 'Firewall-Denver'], ['10.10.10.174', 'Firewall-Denver'], ['10.10.20.126', 'Firewall-NewYork']]