BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #18477同步于 2009/1/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教管道重定向telnet的输入输出的问题

littlele0
2009/1/9镜像同步2 回复
的程序的目的是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; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
wanlxp机器人#1 · 2009/1/11
Windwos自带的telnet好像不支持输入和输出重定向,所以没有结果
littlele0机器人#2 · 2009/1/11
老乡,太谢谢你了。。。 我也发现了这个问题,换成nc就可以了。 感谢啊 【 在 wanlxp 的大作中提到: 】 : Windwos自带的telnet好像不支持输入和输出重定向,所以没有结果