我遇到了一个很奇怪的现象;当使用
client.RunCommand()
函数时,我从开关获得整个输出,但是当使用我自己的实现时:
SshClient cl = new SshClient(ip, username, password);
cl.Connect();
shell = cl.createShellStream("Tail", 80, 24,800, 600, 1024);
StreamWriter wr = new StreamWriter(shell);
StreamReader rd = new StreamReader(shell);
wr.AutoFlush = true;
wr.WriteLine("show int status");
string rep = shell.Expect("Switch_Wan#", new TimeSpan(0,0,3));
MessageBox.Show(rep, "Output");
我只得到部分输出,并提示“
--More--
”。
如何获得开关的全部输出?
部分输出的示例:
show int status
Port Name Status Vlan Duplex Speed Type
Fa0/1 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/2 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/3 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/4 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/5 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/6 Team7 disabled 97 auto auto 10/100BaseTX
Fa0/7 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/8 Team7 connected 97 a-full a-100 10/100BaseTX
Fa0/9 Team11 connected 11 a-full a-100 10/100BaseTX
Fa0/10 Team11 connected 11 a-full a-100 10/100BaseTX
Fa0/11 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/12 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/13 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/14 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/15 Team4 disabled 94 auto auto 10/100BaseTX
Fa0/16 Team11 connected 11 a-full a-100 10/100BaseTX
Fa0/17 Team11 connected 11 a-full a-100 10/100BaseTX
Fa0/18 Team11 connected 11 a-full a-100 10/100BaseTX
Fa0/19 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/20 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/21 Team4 connected 94 a-full a-100 10/100BaseTX
Fa0/22 Team4 connected 94 a-full a-100 10/100BaseTX
--More--
Switch_Wan#
使用
client.RunCommand()
函数时,我在输出中获得了全部 48 个端口。
我不能使用
client.RunCommand()
,我必须使用流。
cl.CreateShellStream("Trail", 80, 24,800, 600, 1024);
中的值的含义是什么?
这是在黑暗中拍摄的......试试这个:
shell = cl.createShellStream("Tail", 0, 0, 0, 0, 1024)
我对 SSH.NET 还很陌生,但我认为这本质上将你的 shell 窗口大小设置为无限,因此 less/more 不会发挥作用。
只需在会话开始时运行“term len 0”,您就可以完全避免 --More-- 提示
编辑:Adam Shortland 给出了更好的答案:term len 0 找到了解决方案,但忘记回来回答。 SNMP(第二个选项)仍然是一个有效的解决方案,您可以使用它来获取更多信息,但对于这个问题,正确的答案是 Adam 的答案。
这看起来与我最近正在做的事情相似。 虽然西蒙的答案将为您提供更多数据,但如果返回的数据多于外壳大小,则无济于事(例如,如果您有一个带有很多端口的大型交换机)。
我尝试用两种方法来解决这个问题:
问题在于,根据交换机的软件版本,这种格式是不同的。所以这打破了我的用法。
如果您只想从交换机获取信息,我肯定会使用 SNMP 而不是 SSH。如果您有正确的 OID,那么所有这些信息都很容易获得。 您需要执行 SNMP 遍历才能获取此信息。我使用的库是 SNMPSharp.NET (http://www.snmpsharpnet.com/)
对于进入 CreateShellStream 方法的值,以下是文档中的方法声明: 公共ShellStream CreateShellStream(字符串终端名称,uint列,uint行,uint宽度,uint高度,int bufferSize)