2016-05-10 24 views
-1

我可以在「ip_list」和「banned_subnets」中傳遞文件嗎?我有多個需要與多個子網匹配的IP列表,並且不可能在腳本中列出它們。爲此,我創建了兩個文件ipaddr_list,其中包含IP列表和sub_list,其中包含子網列表。使用python和netaddr模塊將一組IP地址與子網進行比較

一些可以建議我怎麼得到這個在下面的腳本:

import netaddr 

ip_list = ['10.22.140.10', '10.11.14.11', '10.71.13.13', '10.10.131.2', '10.12.6.11', '10.1.6.10'] 

banned_subnets = ['10.1.6.0/24', '10.10.13.0/24', '10.10.14.0/24' ] 

new_list = [str(ip) for ip in netaddr.IPSet(ip_list) & (netaddr.IPSet(banned_subnets))] 

print new_list 

回答

2

我假設你說你有ip_listbanned_subnets文件是用含有IP每行的文本文件。

你需要做的是讀取這些文本文件並將它們去掉,以便它們以列表的形式出現。我將在下面添加一個代碼,您可以相應地使用另一個代碼。

with open('ip_list.txt') as f: 
    IP_list = [line for line in f] 

希望你也可以做同樣的banned_subnets以及。

+0

它的工作原理,但得到以下錯誤: ['10 .11.10.100 \ n','10 .11.18.110 \ n','10 .71.131.123 \ n','10 .71.131.200 \ n','10 .11.6.11 \ n','10 .11.6.121 \ n','10.11.6.11 \ n','204.11.6.11 \ n','\ n'] ['10.11.6.0/24 \ n','10.71.131.0/24 \ n ''10 .11.18.0/24_ \ n '] 下面是修改後的腳本: #在/ usr/bin中/ Python的 進口netaddr中 開放(' ip_list.txt')作爲f: ip_list = [用於f中的行的線路] 張開( 'sub.txt')爲p: banned_subnets = [線在P LINE用於IP在netaddr.IPSet(ip_list) new_list = [STR(IP)(netaddr.IPSet(banned_subnets) )] 打印new_list – beginnertopython

+0

所以,你可以用它來生成列表: 'F =開放( 'ip_list.txt', 'R') IP_list =(f.read())分裂( '\ n'。 )' – harshil9968

+0

[閱讀此](http://stackoverflow.com/questions/3277503/how-to-read-a-file-line-by-line-into-a-list-with-python)這裏如何閱讀逐行列表給出 – harshil9968