将IP地址与子网列表匹配,然后返回防火墙

时间:2016-03-11 11:40:42

标签: python bash

我正在寻找一些指示,让我朝着正确的方向前进。我有一个大约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 /子网,而是要返回一个不同的密钥。

1 个答案:

答案 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']]