首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IP2Location + Netmiko to SSH to VM's to MTR并打印结果(If,elif,MTR语句发布) PYTHON3

IP2Location + Netmiko to SSH to VM's to MTR并打印结果(If,elif,MTR语句发布) PYTHON3
EN

Stack Overflow用户
提问于 2018-09-16 15:29:16
回答 1查看 225关注 0票数 0

我刚开始问一个问题,总是读答案来改进我的代码,但从来没有问过,所以这是我第一次来这里。

我试图制作一个简单的场景来实现一些网络自动化。

场景:我有3个VM(第一个在阿根廷,第二个在巴西,第三个在迈阿密)需要通过SSH连接到这台机器,以便在IP2Location模块中最近填充的IP地址上执行一个地铁测试。问题是,我需要通过IP中最接近的点来执行这个测试。示例:如果我有一个智利IP地址,我需要在阿根廷的VM上进行这个测试,如果IP来自墨西哥,我需要通过我在迈阿密的VM来测试它。为了工作,我使用IP2Location (我只是在IP放置后修改了基本代码来手动填充IP ),IP2Location打印了国家的全名。一旦我有了国家全名,我就使用(if,elif,else)语句连接到我与Netmiko拥有的不同的VM,执行测试并打印结果。

但是,这并不像我预期的那样有效,它总是指向忽略IF和ELIF的“否则”语句。

,这是代码:

代码语言:javascript
复制
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)

您可以从这里下载IP2location DB的bin文件https://www.ip2location.com/developers/python

(我没有显示IP,因为它们是公共的,每个人都可以进入),但这可以简单地在GNS3上模仿。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 20:54:11

所以解决办法是:

代码语言:javascript
复制
#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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52355629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档