python paramiko 远程登陆主机并获取主机信息

#!/usr/bin/python
# encoding: utf-8
#filename: host_information_get.py
#author: gaohaixiang
#writetime:20200409

import paramiko

def host_ssh_conn(ip):
    port,username,userpassword = 22,"root","123456"

    #存放查询数据结果的文件
    ff = open("result.txt","a+")
    ff.writelines("#"*50+"\n")
    ff.writelines(ip+"\n")

    #登陆主机及登陆时错误捕捉处理
    try:
        ssh = paramiko.SSHClient()         #调用paramiko模块下的SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #加上这句话不用担心选yes的问题,会自动选上(用ssh连接远程主机时,第一次连接时会提示是否继续进行远程连接,选择yes)
        ssh.connect(ip,port,username,userpassword,timeout=3)    #连接远程主机,SSH端口号为22,会话超时为3秒
    except:
        return None
    else:
        pass

    #ip,主机名,系统类型
    commands = ["ip a|grep inet|grep brd","hostname","cat /etc/redhat-release"]
    for command in commands:
        stdin, stdout, stderr = ssh.exec_command(command,timeout=10,get_pty=True)   #执行命令
        # print (stdout.readlines())
        results = stdout.readlines()
        print(results)
        for result in results:
            ff.writelines(result)
    ssh.close()
    ff.close()

if __name__ == '__main__':
    # ip处理
    file = open("ip_list.txt", "r")
    iplist = file.readlines()
    for ips in iplist:
        ip = ips.strip("\n").strip()
        print(ip)

        #调用函数
        host_ssh_conn(ip)
    file.close()

### 回答1: 你可以使用Python来写一个脚本来获取华为路由器接口IP地址。你可以使用urllib模块来实现这一功能,并使用正则表达式来提取IP地址。你还可以使用requests模块来访问指定的URL,获取该网页的源代码,并解析出IP地址。 ### 回答2: 要编写一个自动获取华为路由器接口IP地址的Python脚本,首先需要使用Python的网络编程库来与路由器进行通信。以下是一个可能的实现思路: 1. 导入必要的Python库,如paramiko(用于SSH连接)、re(用于正则表达式匹配)和time(用于延时等待)。 2. 创建一个SSH连接路由器的函数。在函数中使用paramiko库来建立SSH连接,并使用用户名和密码进行身份验证。 3. 在SSH连接中执行命令来获取路由器的接口信息。使用paramiko库中的`exec_command()`函数来执行命令,并使用`recv()`函数来获取命令输出。 4. 使用正则表达式匹配从路由器接口信息中提取IP地址。可以使用re库中的`findall()`函数来匹配IP地址的模式,并将匹配到的IP地址保存在一个列表中。 5. 返回IP地址列表。 以下是一个简单的示例代码: ```python import paramiko import re import time def get_router_ip(username, password): router_ip_list = [] # SSH连接路由器 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('router_ip', username=username, password=password) # 执行命令获取接口信息 stdin, stdout, stderr = ssh.exec_command('display ip interface brief') time.sleep(1) # 等待命令执行完成 # 获取命令输出并使用正则表达式匹配IP地址 output = stdout.read().decode('utf-8') ip_addresses = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', output) # 将匹配到的IP地址添加到列表中 for ip_address in ip_addresses: router_ip_list.append(ip_address) # 关闭SSH连接 ssh.close() return router_ip_list # 调用函数并打印结果 username = 'your_username' password = 'your_password' router_ip_list = get_router_ip(username, password) print(router_ip_list) ``` 请注意,此示例仅提供了基本的框架和思路,实际操作中需根据华为路由器的具体配置和命令进行调整。同时,需要替换掉代码中的'router_ip'、'your_username'和'your_password'为实际的路由器IP地址、用户名和密码。 ### 回答3: 要编写一个自动获取华为路由器接口IP地址的Python脚本,你可以使用telnetlib库来远程连接路由器并发送命令。以下是一个示例脚本: ```python import telnetlib host = "路由器IP地址" username = "路由器用户名" password = "路由器密码" # 连接到路由器 tn = telnetlib.Telnet(host) # 输入用户名 tn.read_until(b"Username: ") tn.write(username.encode('ascii') + b"\n") # 输入密码 tn.read_until(b"Password: ") tn.write(password.encode('ascii') + b"\n") # 登录成功后发送命令 tn.write(b"interface brief\n") tn.write(b"display ip interface brief\n") tn.write(b"quit\n") # 读取路由器返回的结果 output = tn.read_all().decode('ascii') # 解析结果,获取接口IP地址 lines = output.split("\n") for line in lines: words = line.split() if len(words) >= 4 and words[0].startswith("GigabitEthernet"): interface = words[0] ip_address = words[1] print("接口名:", interface, " IP地址:", ip_address) # 关闭连接 tn.close() ``` 在上述脚本中,需要将`host`变量替换为你的华为路由器的IP地址,`username`和`password`变量替换为你的登录凭据。脚本首先通过telnet连接到路由器,然后输入用户名和密码进行登录。之后发送命令`interface brief`和`display ip interface brief`来获取接口IP地址的信息,并解析返回的结果,输出接口名和IP地址。最后关闭telnet连接。 请注意,使用telnet进行远程连接存在安全风险。为了更安全地获取接口IP地址,推荐使用SSH协议,可以使用`paramiko`库来进行SSH连接和命令发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值