Telnet服务器响应仅在C#应用程序中响应

Telnet服务器响应仅在C#应用程序中响应,c#,echo,telnet,parrot,C#,Echo,Telnet,Parrot,我需要开发一个应用程序,能够在通过Telnet连接到ip后发出一些命令,然后只记录正在进行的响应 所以我尝试了PrimS.Telnet和Minimalistic.Telnet这样的包;问题是它可以与其他telnet服务器协同工作,但不能与此服务器协同工作;我得到的都是大写的echo: 而当我使用Putty(我无法自动化)时,它确实给出了正确的响应: 我必须先按一个回车键,然后才能把那个奇怪的小毛病角色弄走 这正常吗?我是不是遗漏了什么,为什么我不能在这个服务器上使用我的C#应用程序 编辑1:

我需要开发一个应用程序,能够在通过Telnet连接到ip后发出一些命令,然后只记录正在进行的响应

所以我尝试了PrimS.Telnet和Minimalistic.Telnet这样的包;问题是它可以与其他telnet服务器协同工作,但不能与此服务器协同工作;我得到的都是大写的echo:

而当我使用Putty(我无法自动化)时,它确实给出了正确的响应:

我必须先按一个回车键,然后才能把那个奇怪的小毛病角色弄走

这正常吗?我是不是遗漏了什么,为什么我不能在这个服务器上使用我的C#应用程序


编辑1:我已经发现我的C#不支持某些要求不回显文本的telnet命令(请参阅)。所以我的问题是如何解析这些telnet命令以便发送它们?

好的,这是一个小例子。方法
AskReceive
发送一个命令并等待200毫秒以获得答案。它使用流进行发送和接收。如果您发送
clearTextWriter.WriteLine(命令行)
则表示您正在向设备发送字符串命令

使用系统;
使用System.IO;
使用System.Net.Sockets;
命名空间CommonCore.Classes.Helper
{
类别TelnetDevice01
{
静态int连接超时=1300;
字符串AskReceive(字符串命令行、引用字符串\u日志)
{
_log+=“>”+commandline+Environment.NewLine;
clearTextWriter.WriteLine(命令行);
字符串_str;
系统线程线程睡眠(200);
_str=clearTextReader.ReadLine();
_log+=“<”+\u str+Environment.NewLine;
返回_str;
}
void exitror(字符串str、参考字符串日志、参考字符串错误)
{
_误差=str;
_log+=”!!错误:“+str+Environment.NewLine+Environment.NewLine;
clearTextWriter.WriteLine(“退出”);
}
StreamReader clearTextReader=null;
StreamWriter clearTextWriter=null;
public void ConnectTelnet(字符串登录、字符串密码、字符串服务器、int端口、,
输出字符串日志、输出字符串恢复、输出字符串错误
)
{
字符串_response=“”;
resume=“”;
错误=”;
log=“”;
TcpClient client=新的TcpClient();
//使连接超时
如果(!client.ConnectAsync(服务器,端口).Wait(connectionTimeout))
{
//log=例如exceptionString();
错误=$“无法连接端口“{port}”处的“{server}”;
log+=Environment.NewLine+error+Environment.NewLine;
resume=Environment.NewLine+$“[FAIL]Port={Port}。无法连接端口{Port}'”+Environment.NewLine上的{server}”;
返回;
}
使用(客户端)
{
使用(NetworkStream=client.GetStream())
使用(clearTextReader=new StreamReader(stream))
使用(clearTextWriter=newstreamWriter(stream){AutoFlush=true})
{
log+=Environment.NewLine+Environment.NewLine+“##已连接”+Environment.NewLine;
//阅读开始响应行,如“用户:?”
字符串connectResponse=clearTextReader.ReadLine();
log+=“<”+connectResponse+Environment.NewLine;
如果(!connectResponse.StartsWith(“登录”))
{
ExitError(_响应、参考日志、参考错误);
resume=Environment.NewLine+$“应为‘登录’”;
返回;
}
//发送登录
if(!(_response=AskReceive(login,ref log)).StartsWith(“密码”))
{
ExitError(_响应、参考日志、参考错误);
resume=Environment.NewLine+$“Asnswer应该是‘密码’”;
返回;
}
//正在询问密码,让我们现在发送通行证
如果(!(_response=AskReceive(密码,参考日志)).StartsWith(“登录确定”))
{
ExitError(_响应、参考日志、参考错误);
resume=Environment.NewLine+$“回答应该是‘登录确定’”;
返回;
}
//发送命令SMDR
_响应=AskReceive($“SMDR”,参考日志);
//检查答案是否符合您的要求
//像_response.Contains(“blabla”)
}
}
}
}
}

很难说,因为您没有共享代码,但我猜您没有发送正确的telnet命令序列。IAC做回音。我已经创建了一个类来与SMTP服务器通信。我还发送命令并得到答案。它使用
NetworkStream
StreamReader(stream)
+
StreamWriter(stream)
。。我想这正是尤普需要的。我不需要任何Telnet应用程序来实现这一点@itsme86 Sow如何发送这些命令?就像你发送一个普通的文本命令一样?我正在写一个例子。。请稍等几分钟,谢谢你的努力。我确实有一个C#包,我目前正在使用:PrimS.Telnet和Minimalistic.Telnet;它们在很多telnet服务器上工作得很好,但我有一个telnet服务器上有它的echo。因此,我的问题是如何转换这些字节码(Telnet命令),以便使用当前的发送方法发送它们?对于我读到的内容(我不是专家),您必须禁用来自客户端或服务器的回显。在windows telnet客户端上,是命令
u localecho
unset localecho