Python сохраняет значение в списке и запускает grep с оператором if / else? - PullRequest
0 голосов
/ 16 февраля 2019

Я создаю код, в котором мне нужно проверить список IP-адресов из переменной npat, в которой мне нужно создать цикл, код будет запускать две вещи 1 - это grep, а 2 - поиск с использованием whois обаэтой задачи имеет 2 возможных вывода, и его совпадение или несоответствие и результат должны быть в списке.

Q:

  1. сохранить результат оператора if / else всписок, который является результатом grep / whois?

  2. Какой шаблон следует использовать для сопоставления маршрута: (пробелы) из 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 данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...