将列表与字符串进行比较,并在字符串中打印列表的匹配行

时间:2019-10-08 14:36:18

标签: python python-3.6

我正在尝试将列表与字符串文本进行比较,并打印与列表中元素匹配的行

我尝试了下面的代码,但获得的IP地址不在列表中的行

acl = """
 access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh

"""

 myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']


acl_match = []
for a in myip:
   for b in acl.splitlines():
      if a in b:
         acl_match.append(b)


print(acl_match)
['access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh', 
'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh', 
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh',
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh', 
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh', 
'access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh', 
'access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh', 
'access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh', 
'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh', 
'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh', 
'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh', 
'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh']

2 个答案:

答案 0 :(得分:0)

如果“格式”是一致的,则可以在每一行中搜索每个ip(前后带有空格),也可以使用正则表达式。

acl = r"""
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh

"""

acl = [ x for x in  acl.splitlines()]

myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2 ', '11.2.3.4']

acl_match = []
for ip in myip:
    for string in acl:
        if string.find(" " + ip + " ")!=-1:
            acl_match.append(string)
            #print(string)

print(acl_match)

access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh

答案 1 :(得分:0)

您可以使用正则表达式来确保IP地址仅在字符串中匹配,前提是它们前面没有或后面没有其他点或数字。

import re

myip = ['18.1.1.2', '20.1.1.2', '5.2.3.4', '15.2.3.4', '9.2.3.4', '8.1.1.2', '11.2.3.4']
acl = """
access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh
access-list access_myside_in line 2 extended permit tcp host 18.1.2.2 host 15.1.3.4 eq ssh
access-list access_myside_in line 3 extended permit tcp host 16.1.1.2 host 5.2.23.4 eq ssh
access-list access_myside_in line 4 extended permit tcp host 18.2.1.2 host 15.2.1.4 eq ssh
access-list access_myside_in line 5 extended permit tcp host 10.1.1.2 host 15.2.3.14 eq ssh
access-list access_myside_in line 6 extended permit tcp host 13.1.1.2 host 10.2.3.4 eq ssh
access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh
access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh
access-list access_myside_in line 9 extended permit tcp host 15.1.1.2 host 15.22.3.4 eq ssh
access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh
access-list access_myside_in line 19 extended permit tcp host 1.1.1.2 host 15.2.13.4 eq ssh
access-list access_myside_in line 25 extended permit tcp host 11.1.1.2 host 15.12.3.4 eq ssh
access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh
access-list access_myside_in line 31 extended permit tcp host 111.1.1.2 host 15.2.3.40 eq ssh
access-list access_myside_in line 33 extended permit tcp host 18.1.11.2 host 17.2.3.4 eq ssh
access-list access_myside_in line 40 extended permit tcp host 19.1.1.2 host 55.2.3.4 eq ssh
access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh
"""

# add negated class and escape dots, combine list into alternating regex pattern
pattern = re.compile('|'.join('[^\d.]{}[^\d.]'.format(ip.replace('.', '\.')) for ip in myip))
result = [s for s in acl.splitlines() if re.search(pattern, s)]
print(result)
# ['access-list access_myside_in line 1 extended permit tcp host 18.1.1.12 host 15.2.3.4 eq ssh', 'access-list access_myside_in line 7 extended permit tcp host 18.1.1.2 host 12.2.3.4 eq ssh', 'access-list access_myside_in line 8 extended permit tcp host 12.1.1.2 host 9.2.3.4 eq ssh', 'access-list access_myside_in line 10 extended permit tcp host 5.1.1.2 host 11.2.3.4 eq ssh', 'access-list access_myside_in line 30 extended permit tcp host 8.1.1.2 host 5.2.3.4 eq ssh', 'access-list access_myside_in line 49 extended permit tcp host 20.1.1.2 host 80.2.3.4 eq ssh']