Я создаю код, в котором мне нужно проверить список IP-адресов из переменной npat, в которой мне нужно создать цикл, код будет запускать две вещи 1 - это grep, а 2 - поиск с использованием whois обаэтой задачи имеет 2 возможных вывода, и его совпадение или несоответствие и результат должны быть в списке.
Q:
сохранить результат оператора if / else всписок, который является результатом grep / whois?
Какой шаблон следует использовать для сопоставления маршрута: (пробелы) из whois?до сих пор мой шаблон регулярных выражений для этой работы, особенно совпадающий с адресом, но у меня есть проблема с соответствием слову "route: (пробелы).
Некоторые выходные данные:
npat list = ['6.120.0.0/18', '6.120.0.0/17', '13.44.61.0/24', '13.44.62.0/24']
Возможные данные Whois: 1.
RADB: % No entries found for the selected source(s).
RADB: маршрут: 6.120.0.0/18 descr: name.com происхождение: AS1111 уведомить: network@email.com источник: RADB
Вот код:
import re, base64, os, sys
#SAMPLE STRING
teststr = """router#sh ip bgp
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, x best-external
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 6.120.0.0/18 2.2.2.11 0 3111 2000 2485 43754 i
*> 6.120.0.0/17 2.2.2.11 0 3111 2000 2485 43754 i
*> 13.44.61.0/24 2.2.2.11 0 3111 4559 i
*> 13.44.62.0/24 2.2.2.11 0 3111 4559 i"""
##print (teststr,"\n")
#SEARCH NETWORK ENTRY*Working)
npat = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})/\d+',teststr)
print ("List: \n",npat)
for ips in npat:
ipnet = ips.strip()
print ("Processing ..... ", ipnet)
fgen = "grep " +ipnet+ " /mnt/hgfs/IRR/fgen.txt"
f2pat = re.findall(ipnet,fgen)
print ("\nCommand: ",fgen)
os.system(fgen)
print ("\n NEW NPATH: ",f2pat)
if ipnet in f2pat:
flist = "Grep Found"
print ("Result ", flist)
else:
flist = "Grep Not found"
print ("Result: ",flist)
f = os.popen('whois -h whois.radb.net ' + ipnet)
who = f.read()
radbpat = re.findall(ipnet,who)
print ("\nRADB: ", who)
radbpat = re.findall(r'(?<=route: )(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})/\d+',who)
print ("Radb :",radbpat)
if ipnet in radbpat:
rlist = "Found in RADB"
print ("Result ", rlist)
else:
rlist = "Not found in RADB"
print ("Result: ",rlist)
## OUTPUT
titles = ['RS-SET', 'GREP', 'RADB']
data = [titles] + list(zip(npat, flist, rlist))
for i, d in enumerate(data):
line = '|'.join(str(x).ljust(15) for x in d)
print(line)
if i == 0:
print('-' * len(line))
Моя цель состоит в том, чтобы создать цикл, чтобы я мог проверить весь список IP-адресов из npat, после чего в выводе будет показан результат задач 1 и 2 ??
Я создалтаблица, так что мой целевой вывод должен быть таким.
RS-SET |Grep |RADB
--------------------------------------------
xx.xx.xx.0/yy |not found |Found
Мой текущий вывод выглядит так:
RS-SET |GREP |RADB
-----------------------------------------------
27.54.41.0/24 |G |N
223.253.0.0/20 |r |o
27.54.41.0/24 |e |t
27.54.42.0/24 |p |
27.54.43.0/24 | |f
Grep и radb выходные данные были добавлены по вертикали ... мои flist и rlistимеет только 1 данные.