You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HP路由器通过Paramiko执行display arp会话挂起,指定IP查询却正常?

解决HP路由器Paramiko执行display arp会话挂起的问题

这问题我碰到过好几次,典型的设备分页机制导致的阻塞——当ARP表条目多的时候,HP路由器默认会分页输出,Paramiko的会话就卡在等待用户交互的环节了,而过滤后的命令输出少,不会触发分页,所以能正常返回结果。

问题根源

HP路由器默认开启了分页显示(类似Linux的more功能),执行display arp时,输出满一页后设备会暂停,等待你按空格/回车继续输出。但Paramiko的exec_command是一次性发送命令并等待EOF,此时设备没发送结束信号,stdout.read()就会一直阻塞,会话直接挂起。而带IP或关键字过滤的display arp输出内容少,不会触发分页,所以能正常完成。

解决方案

最直接的办法是先关闭设备的分页功能,让它一次性输出所有内容,下面给两种可行的代码实现:

方法1:关闭分页后执行display arp

用exec_command一次性发送关闭分页和查询ARP的命令(HP设备常用关闭分页命令为undo terminal page,部分型号也支持terminal length 0):

import paramiko
import time

try:
    print(f"\n!!!Connecting to {ip_connect}!!!\n\n")
    session = paramiko.SSHClient()
    session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    session.connect(ip_connect, username=a, password=b, timeout=20)
    
    # 先关闭分页,再执行ARP查询
    stdin, stdout, stderr = session.exec_command('undo terminal page\ndisplay arp\n')
    
    # 读取并解码输出(注意:部分HP设备输出为GBK编码,需替换为decode('gbk'))
    data = stdout.read() + stderr.read()
    print(data.decode('utf-8'))
    
    session.close()
except paramiko.SSHException as e:
    print(f"!FAILED! Error: {str(e)}")

方法2:模拟交互式会话处理分页(适合复杂场景)

如果关闭分页的命令无效,或者需要处理其他交互式操作,可以用invoke_shell()模拟手动登录设备的流程:

import paramiko
import time

try:
    print(f"\n!!!Connecting to {ip_connect}!!!\n\n")
    session = paramiko.SSHClient()
    session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    session.connect(ip_connect, username=a, password=b, timeout=20)
    
    # 开启交互式shell
    shell = session.invoke_shell()
    # 关闭分页
    shell.send('undo terminal page\n')
    time.sleep(1)  # 等待设备响应
    # 发送ARP查询命令
    shell.send('display arp\n')
    time.sleep(3)  # 根据ARP表大小调整等待时间,确保输出完成
    
    # 循环读取所有输出
    output = ''
    while shell.recv_ready():
        output += shell.recv(1024).decode('utf-8')
    
    print(output)
    
    session.close()
except paramiko.SSHException as e:
    print(f"!FAILED! Error: {str(e)}")

额外提示

  • 不确定关闭分页的命令?可以手动登录设备执行display terminal查看当前终端配置,找到分页相关的设置项。
  • 遇到乱码?部分HP设备命令行输出用GBK编码,把decode('utf-8')换成decode('gbk')就行。

内容的提问来源于stack exchange,提问作者Dover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:21:41