【发布时间】:2012-05-25 15:39:55
【问题描述】:
我有兴趣编写一个可以执行类似 netcats "nc -L -d -p -t -e cmd.exe" 命令的程序。所以它提供了一个远程shell。我已经尝试过管道输出和输入到 cmd.exe 并通过套接字发送和接收它,但它似乎并不能很好地工作。还有其他方法吗?顺便说一句,我正在用 C# 编程。
这是我编写的一些测试代码,用于测试是否可以制作自己的“shell”。它的输出是应该通过套接字发送的。但是,当需要读取输出时,程序会停止。这只能通过使用 .readline() 方法来解决,但我不知道如何检测它何时不应再读取行。
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.Start();
StreamReader sr = p.StandardOutput;
StreamWriter sw = p.StandardInput;
while (true)
{
Console.Write(">> ");
string cmd = Console.ReadLine();
sw.WriteLine(cmd);
var resp = sr.ReadLine();
Console.WriteLine(resp);
}
谢谢。
【问题讨论】:
-
具体是在什么方面做得不好?我过去确实这样做过,并且效果与宣传的一样,因此可能需要注意细节。
-
感谢您的回复。我刚刚用现在正在运行的代码更新了我的帖子。你能看出哪里不对吗?