IP2Расположение + Netmiko для SSH и VM для MTR и вывод результатов (если, elif, другие операторы выдают проблемы) PYTHON3 - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в задании вопроса, всегда читаю ответы, чтобы улучшить свои коды, но никогда не спрашивал, поэтому я впервые здесь.

Я пытаюсь создать простой сценарий, реализующий некоторую автоматизацию сети.

Сценарий: у меня 3 виртуальных машины (1-я в Аргентине, 2-я в Бразилии, 3-я в Майами) Необходимо подключиться к этим машинам через SSH, чтобы выполнить тест MTR по недавно заполненному IP-адресу в IP2Locationмодуль.Дело в том, что мне нужно выполнить этот тест через самую близкую точку IP.Пример: если у меня есть IP-адрес в Чили, мне нужно выполнить этот тест на виртуальной машине в Аргентине, если IP-адрес из Мексики, мне нужно проверить его на моей виртуальной машине в Майами и т. Д. Чтобы это работало, я использую IP2Location (я простоизменил базовый код, чтобы заполнить IP-адрес вручную) После размещения IP-адреса IP2Location печатает полное название страны.Получив полное название страны, я использую операторы (if, elif, else) для подключения к различным виртуальным машинам, которые у меня есть с Netmiko, чтобы выполнить тесты и распечатать результаты.

Но этоне работает, как я ожидал, он всегда идет к оператору "else" с видом на IF и ELIF.

Вот код:

import IP2Location
from netmiko import ConnectHandler
from datetime import datetime
import subprocess 

IP2LocObj = IP2Location.IP2Location();
IP2LocObj.open("/Volumes/DATA/nico/Desktop/ServDeg/IP2LOCATION-LITE-DB1.BIN"); #Path to the Database BIN
rec = IP2LocObj.get_all((str(input("IP: ")))); 
print(rec.country_long)

if rec.country_long is 'Brazil':
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', username='xxx', password='xxx')
    output = net_connect.send_command('mtr ' + IP2LocObj + ' -c 10')
    print(output)
elif rec.country_long is 'Argentina':
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', username='xxx', password='xxx')
    output = net_connect.send_command('mtr ' + IP2LocObj + ' -c 10')
    print(output)
elif rec.country_long is 'Chile':
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', username='xxx', password='xxx')
    output = net_connect.send_command('mtr ' + IP2LocObj + ' -c 10')
    print(output)
elif rec.country_long is 'Uruguay':
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', username='xxx', password='xxx')
    output = net_connect.send_command('mtr ' + IP2LocObj + ' -c 10')
    print(output)
else: 
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', username='xxx', password='xxx')
    output = net_connect.send_command('mtr ' + IP2LocObj + ' -c 10')
    print(output)

Youможно загрузить файл bin для базы данных IP2location здесь https://www.ip2location.com/developers/python

(я не показываю IP-адреса, потому что они публичные, и каждый может войти), но это можно просто эмулировать на GNS3.

Спасибо и С уважением !!!

1 Ответ

0 голосов
/ 20 сентября 2018

Итак, вот решение:

#Serv_deg_without_Demark_device by NMorra
from netmiko import ConnectHandler
from datetime import datetime
import IP2Location

start_time = datetime.now()
IP2LocObj = IP2Location.IP2Location() #Modulo IP-GEOLOCATION
IP2LocObj.open("/Volumes/DATA/nico/Desktop/ServDeg/IP2LOCATION-LITE-DB1.BIN"); 
#Bin Location
country = IP2LocObj.get_all(ipaddr) # ('mtr ' + str(var) + ' -c 10')
print("", ipaddr) #
country.country_long = str(country.country_long)[2:-1]


print(country.country_long)                       
print('Test in progress...')

if country.country_long == ('Argentina'):
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', 
    username='xxx', password='xxx')
mtr = net_connect.send_command('mtr ' + str(ipaddr) + ' -c 10 -r')
net_connect.disconnect()
elif country.country_long == ('Chile'):
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', 
    username='xxx', password='xxx')
    mtr = net_connect.send_command('mtr ' + str(ipaddr) + ' -c 10 -r')
    net_connect.disconnect()
elif country.country_long == ('Uruguay'):
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', 
    username='xxx', password='xxx')
mtr = net_connect.send_command('mtr ' + str(ipaddr) + ' -c 10 -r')
net_connect.disconnect()
elif country.country_long == ('Brazil'):
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', 
    username='xxx', password='xxx')
mtr = net_connect.send_command('mtr ' + str(ipaddr) + ' -c 10 -r')
net_connect.disconnect()
else:
    net_connect = ConnectHandler(device_type='linux', ip='xxx.xxx.xxx.xxx', 
    username='xxx', password='xxx')
    mtr = net_connect.send_command('mtr ' + str(ipaddr) + ' -c 10 -r')
    net_connect.disconnect()

print('')
print('>'*10, 'MTR', '<'*10)
print(mtr)
end_time = datetime.now()
time = end_time-start_time
print('_'*5)
print('Time: ', time)
...