返回信息流的程序的目的是telnet到一个ip去然后dir一下,得到返回的东西。但是这个dir或者其他命令不是手动输入,是源自程序。所以我用到输入输出重定向。
但是现在的问题是CreateProcess虽然返回成功,但是实际上根本没telnet成功,就像从没telnet一样。(telnet服务本身没问题,我自己开窗口手动telnet都能成功。)
我用cmd代替telnet,则第一次能收到cmd刚执行是返回的
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
这种信息,但是在输入重定向中输入dir则未执行成功,根本没有任何返回消息。。就像从没dir过一样。
请假各位大虾,应该怎么做才能得到正确结果呢?
谢谢!
#include <WINSOCK2.H>
#include <stdio.h>
#pragma comment(lib,"Ws2_32")
#define MAXBUFSIZE 1024
int main(int argc, char *argv[])
{
WSADATA ws;
SOCKET connectFD;
int ret,numbytes;
struct sockaddr_in their_addr;
char buf[MAXBUFSIZE]="dir\n";
char command[] = "ping 127.0.0.1";//dir";//ping 127.0.0.1";//"tftp -i 192.168.44.42 get nc.exe";
//建一个管道,用配置文件向其写,管道的read作为telnet的输入。
SECURITY_ATTRIBUTES pipeattr1,pipeattr2;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;
pipeattr1.nLength = 12;
pipeattr1.lpSecurityDescriptor = 0;
pipeattr1.bInheritHandle = true;
CreatePipe(&hReadPipe1,&hWritePipe1,&pipeattr1,0);
pipeattr2.nLength = 12;
pipeattr2.lpSecurityDescriptor = 0;
pipeattr2.bInheritHandle = true;
CreatePipe(&hReadPipe2,&hWritePipe2,&pipeattr2,0);
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;//;//
si.wShowWindow = SW_HIDE;
si.wShowWindow = SW_SHOWNORMAL;
si.hStdInput = hReadPipe1;
si.hStdOutput = si.hStdError = hWritePipe2;//
char cmdLine[] = "telnet 127.0.0.1 830";//cmd";//
PROCESS_INFORMATION processinfo;
ZeroMemory( &processinfo, sizeof(processinfo) );
ret = CreateProcess(NULL, cmdLine, NULL, NULL, 1, 0, NULL, NULL, &si, &processinfo);
unsigned long lBytesRead;
// CloseHandle(hReadPipe1);//test
// CloseHandle(hWritePipe2);//test
while(1)
{
ret = PeekNamedPipe(hReadPipe2, buf, 1024, &lBytesRead, 0, 0);
if (lBytesRead)
{
ret = ReadFile(hReadPipe2, buf, lBytesRead, &lBytesRead, 0);
if (!ret)
{
break;
}
}
else
{
ret = WriteFile(hWritePipe1, command, sizeof(command), &lBytesRead, 0);
if (!ret)
{
exit(1);//break;
}
}
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #18477同步于 2009/1/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教管道重定向telnet的输入输出的问题
littlele0
2009/1/9镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。