分享 最近碰到的telnet程序自动登录的解决方法
最近着手写一个程序,自动登录到交换机,获取端口的mac地址,并逐级找出该mac的终端接在交换机的那个端口,本来以为不麻烦的,没想到,刚上手就发现有问题了
本来控制台程序用管道重定向程序的输入和输出,然后里面的内容就能自动获取了,但是实际上,我发现,在cmd下运行,dir命令,通过管道可以获取内容,但是一旦运行了telnet.exe ,立刻就无法获取信息了
放狗搜索,最后有一个帖子说,处于安全原因,微软的telnet.exe不允许管道重定向。。。。
好吧,换一种思路。。
微软的telnet.exe可以在命令行下运行telnet.exe /help,通过-f abc.log参数可以指定telnet的日志,你所有的操作都会记录在这里面,这样就解决了输出问题,就剩下输入问题了
通过vbs脚本可以解决这个问题,类似
set ws=wscript.createobject("wscript.shell")wscript.sleep 1000ws.SendKeys "telnet{enter}"Wscript.sleep 500ws.SendKeys "set logfile aa.log{enter}"Wscript.sleep 1000ws.SendKeys "o 192.168.1.1{enter}"Wscript.sleep 1000ws.SendKeys "root{enter}"wscript.sleep 1000ws.SendKeys "password{enter}" AnsiString strPath; STARTUPINFO StartInfo; PROCESS_INFORMATION procStruct; memset(&StartInfo, 0, sizeof(STARTUPINFO)); StartInfo.cb = sizeof(STARTUPINFO); StartInfo.dwFlags =STARTF_USESHOWWINDOW;StartInfo.wShowWindow = SW_HIDE; strPath = "telnet.exe -f aaa.log 192.168.1.1"; bool b = CreateProcess(NULL, strPath.c_str(), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartInfo, &procStruct); if (b) { Sleep(1000); if (hTelnet = ::FindWindow("ConsoleWindowClass", "Telnet 192.168.1.1")) // 找到控制台句柄 { 。。。。。 } }Sleep(100); PostMessage(hTelnet, WM_CHAR, 'A' , 0); // ' 发送一个 字符