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

Python 将IP地址与子网列表匹配,然后返回防火墙,python,bash,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.2

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

您可以使用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'}
>>> ipfirewall
[['10.10.10.1', 'Firewall-Denver'], ['10.10.10.174', 'Firewall-Denver'], ['10.10.20.126', 'Firewall-NewYork']]
如果要输出嵌套列表,然后将其写入文件,请改用以下方法:

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.20.126': 'Firewall-NewYork', '10.10.10.174': 'Firewall-Denver'}
>>> ipfirewall
[['10.10.10.1', 'Firewall-Denver'], ['10.10.10.174', 'Firewall-Denver'], ['10.10.20.126', 'Firewall-NewYork']]

您可以在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'}
>>> ipfirewall
[['10.10.10.1', 'Firewall-Denver'], ['10.10.10.174', 'Firewall-Denver'], ['10.10.20.126', 'Firewall-NewYork']]
如果要输出嵌套列表,然后将其写入文件,请改用以下方法:

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.20.126': 'Firewall-NewYork', '10.10.10.174': 'Firewall-Denver'}
>>> ipfirewall
[['10.10.10.1', 'Firewall-Denver'], ['10.10.10.174', 'Firewall-Denver'], ['10.10.20.126', 'Firewall-NewYork']]

不,它们是一系列不同的面具。我已经更新到反映你使用的是python 3还是python 2?我可以使用任何版本,因为这是我正在做的挖掘项目。你如何输入子网和防火墙列表?它是一个字典吗?可能是重复的:,除此之外,只需逐行读取文件并与字典进行比较,其中密钥是防火墙地址和值-它们的名称。不,它们是一系列不同的掩码。我已经更新到反映你使用的是python 3还是python 2?我可以使用任何版本,因为这是我正在做的挖掘项目。你如何输入子网和防火墙列表?这是一个字典吗?可能是重复的:,除此之外,只需逐行读取文件并与字典进行比较,其中键是防火墙地址和值-它们的名称。嗨,Farhan,如果我从带有“python3 commands.py”的文件中运行该命令,我将不会得到任何输出。我所有的东西都在里面,没有错误。如果文件中有ip子网和防火墙,是否需要执行其他操作?您是如何在脚本中输入ip子网和防火墙列表的?您可以使用
将输出写入一个文件,其中open('filename','w')作为file:file.writelines('\t'.join(i)+'\n'表示ipfirewall中的i)
它在python shell中工作,但当使用:with open('filename','w')作为file:file.writelines('\t'.join(i)时,我只是从运行该文件的命令行中得到了一个字符+'\n'代表ipfirewall中的i)我已编辑了我的答案,以向您展示我的意思。这就是你在做的吗?我不知道你为什么只得到IP地址而没有防火墙。你能更新你的帖子以显示你的完整代码吗?
ipfirewall。将([j,ipsub[i]])
添加到列表
ipfirewall
(ip地址)和
ipsub[i]
(防火墙)以创建嵌套列表
file.writelines('\t'.join(i)+'\n'表示ipfirewall中的i)
在ip地址和防火墙之间放置一个
\t
(选项卡),然后将其与
\n
(新行)一起写入文件。它对
ipfirewall
Hi Farhan中的每个条目都执行此操作,如果我从带有“python3 commands.py”的文件运行命令,则不会得到任何输出。我所有的东西都在里面,没有错误。如果文件中有ip子网和防火墙,是否需要执行其他操作?您是如何在脚本中输入ip子网和防火墙列表的?您可以使用
将输出写入一个文件,其中open('filename','w')作为file:file.writelines('\t'.join(i)+'\n'表示ipfirewall中的i)
它在python shell中工作,但当使用:with open('filename','w')作为file:file.writelines('\t'.join(i)时,我只是从运行该文件的命令行中得到了一个字符+'\n'代表ipfirewall中的i)我已编辑了我的答案,以向您展示我的意思。这就是你在做的吗?我不知道你为什么只得到IP地址而没有防火墙。你能更新你的帖子以显示你的完整代码吗?
ipfirewall。将([j,ipsub[i]])
添加到列表
ipfirewall
(ip地址)和
ipsub[i]
(防火墙)以创建嵌套列表
file.writelines('\t'.join(i)+'\n'表示ipfirewall中的i)
在ip地址和防火墙之间放置一个
\t
(选项卡),然后将其与
\n
(新行)一起写入文件。它对
ipfirewall