Сравнение списка со строкой и печать совпадающей строки списка в строке - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь сравнить список с текстом строк и вывести строку, соответствующую элементу в списке

Я пробовал приведенный ниже код, но получаю строки, 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 голосов
/ 08 октября 2019

Вы можете использовать регулярное выражение, чтобы гарантировать, что 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']
0 голосов
/ 08 октября 2019

Если формат постоянен, вы можете искать каждый 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
...