SSH.NET从shellstream获取整个输出

ia2d9nvy  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(185)

我遇到了一个奇怪的现象当使用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);的值的含义是什么?

gajydyqb

gajydyqb1#

这是在黑暗中拍摄的。。试试这个:

shell = cl.createShellStream("Tail", 0, 0, 0, 0, 1024)

我对SSH.NET还是个新手,但我认为这基本上将shell窗口大小设置为无限大,因此更少/更多并不起作用。

cgh8pdjw

cgh8pdjw2#

只要在会话开始时运行“term len 0”,您就可以完全避免--More--提示

hgncfbus

hgncfbus3#

编辑:Adam Shortland给出了更好的答案:term len 0找到了解决方案,但忘记回来回答。SNMP(第二个选项)仍然是一个有效的解决方案,你可以用它来获得莫尔信息,但对于这个问题,正确的答案是亚当的。
这看起来和我最近做的很像。虽然Simon的答案会给你给予更多的数据,但如果返回的数据比shell的大小多,那就没有用了(例如:如果您有一个带有许多端口的大型交换机)。
我尝试了两种方法来解决这个问题:
1.读取最新一行并检查是否存在--更多--
问题是,根据交换机的软件版本,此格式不同。这打破了我的使用。
1.对我来说,第二个更好的选择是使用SNMP来获取这些信息。
如果您只想从交换机获取信息,我肯定会使用SNMP而不是SSH。如果您有正确的OID,所有这些信息都很容易获得。您需要执行SNMP遍历以获取此信息。我使用的库是SNMPSharp.NET(http://www.snmpsharpnet.com/
至于进入CashShellStream方法的值,这里是来自文档的方法声明:public String s(String s,String s,String s,String s,String s)

相关问题