我已经在控制面板 - 程序/功能上打开了 telnet 选项。 虽然 telnet 手动工作正常,但是当我从 C# 库运行下面时,我收到此错误:
"'telnet' is not recognized as an internal or external command, operable program or batch file."
这是我用来启动 Telnet 的代码:
Process.Start("cmd", "/k telnet")
这与手动从命令提示符运行它有什么区别?如何克服这种差异?
最佳答案
Telnet 是一个程序,始终安装在系统文件夹中。这也意味着,它总是在路上。您不需要需要启动cmd.exe
来启动telnet.exe
。只需使用
Process.Start("telnet.exe");
使用arguments
参数将参数传递给telnet本身,例如主机、日志文件等:
Process.Start("telnet.exe","localhost 80 -f mylog.txt");
还有其他可能更好的选择。
使用 Telnet 库
您可以使用 Telnet 库并直接连接到服务器,例如使用 Telnet NuGet package :
using (Client client = new Client("localhost",80, new System.Threading.CancellationToken()))
{
await client.WriteLine("abcd");
string response = await client.ReadAsync();
Console.WriteLine(response);
}
使用 PowerShell
Telnet 通常用于测试与 Web 服务器的连接,而不是实际发送命令。在这种情况下,您可以使用 PowerShell 的 Test-NetConnection接收有关连接的诊断信息:
using System.Management.Automation;
var ps = PowerShell.Create()
.AddCommand("test-netconnection")
.AddArgument("localhost")
.AddParameter("CommonTCPPort", "HTTP");
var results = cmd.Invoke();
foreach (dynamic result in results)
{
Console.WriteLine($"{result.TcpTestSucceeded} {result.SourceAddress}");
}
确保添加正确的 Powershell NuGet 包 Microsoft.PowerShell.5.ReferenceAssemblies ,而不是不受支持和废弃的 System.Management.Automation
包
PowerShell 的优势在于,您只需添加更多 AddComand
、AddScript
调用即可将命令和脚本链接在一起。每个命令都会收到前一个命令的输出。您可以使用Import-CSV
从文件中读取服务器和端口列表,并将输出通过管道传输到Test-NetConnection
关于c# - 从 C# 中的 Process.Start 启动 cmd.exe 时,Telnet 无法识别命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942704/