socket发送命令到telnet客户端有关问题
socket发送命令到telnet客户端问题
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
char pBuff[256];
int nRet;
char ch;
while(1)
{
if ( pSocketTx->m_nExit == 1 )
{
ExitThread(0);
return 0;
}
//等待用户输入信息
WaitForSingleObject(stdin1,INFINITE);
ch=getch();
//将用户的输入信息发送给Telnet服务器
nRet = send(pSocketTx->m_hSocket,&ch,sizeof(ch),0);
if ( nRet == SOCKET_ERROR )
{
TRACE("\nSend Fail........!\n");
pSocketTx->m_nExit = 0;
continue;
}
}
return 0;
}
**************************************************************************************************************************************上面是我网上找到的一段程序,主要功能是进入路由器的,getch()函数是向打开的telnet客户端发送我们从键盘上输入的字符,当我们输入路由器IP以后,会在界面上有提示输入用户名和密码,先输用户名,输完用户名按enter键,会提示输入密码,如果按照上面的程序,我们只要一个字符一个字符输入用户名和密码就可以进入路由器。可现在我想直接发送字符串,进入到路由器,也就是不通过一个字符一个字符的输入,我想用通过数组的方式先定义好用户名和密码,等到提示输入用户名和密码时就发送字符串,实现路由器的自动登录,我搞了好久都没弄出来,求各位大神指点我,该怎么做。。。。。以前也有人在帖子上说过这个问题,http://bbs.****.net/topics/360034328,我的问题和他一样的吧。
------解决思路----------------------
------解决思路----------------------
ch定义成char *的不就可以了,从键盘接的时候用gets(ch); send(pSocketTx->m_hSocket,ch,sizeof(ch),0);
------解决思路----------------------
在你接受数据的线程,recv收到的串和login:,Password:比较,如果是login:就立马send一个用户名的串,如果是Password就send一个密码的串,如果是其他不做任何操作
------解决思路----------------------
不需要判断的,不过读入字符串一定要用gets()
------解决思路----------------------
用pBuf和你的两个string比较,如果和login相同就send一个用户名的串,如果和password相同就send一个密码的串,这些内容是写在你接受的线程中,不是在这个线程
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
char pBuff[256];
int nRet;
char ch;
while(1)
{
if ( pSocketTx->m_nExit == 1 )
{
ExitThread(0);
return 0;
}
//等待用户输入信息
WaitForSingleObject(stdin1,INFINITE);
ch=getch();
//将用户的输入信息发送给Telnet服务器
nRet = send(pSocketTx->m_hSocket,&ch,sizeof(ch),0);
if ( nRet == SOCKET_ERROR )
{
TRACE("\nSend Fail........!\n");
pSocketTx->m_nExit = 0;
continue;
}
}
return 0;
}
**************************************************************************************************************************************上面是我网上找到的一段程序,主要功能是进入路由器的,getch()函数是向打开的telnet客户端发送我们从键盘上输入的字符,当我们输入路由器IP以后,会在界面上有提示输入用户名和密码,先输用户名,输完用户名按enter键,会提示输入密码,如果按照上面的程序,我们只要一个字符一个字符输入用户名和密码就可以进入路由器。可现在我想直接发送字符串,进入到路由器,也就是不通过一个字符一个字符的输入,我想用通过数组的方式先定义好用户名和密码,等到提示输入用户名和密码时就发送字符串,实现路由器的自动登录,我搞了好久都没弄出来,求各位大神指点我,该怎么做。。。。。以前也有人在帖子上说过这个问题,http://bbs.****.net/topics/360034328,我的问题和他一样的吧。
------解决思路----------------------
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
char pBuff[256]="username\r\npassword\r\n";
int nRet,i;
char ch;
i=0;
while(1) {
if ( pSocketTx->m_nExit == 1 ) {
ExitThread(0);
return 0;
}
//等待用户输入信息
// WaitForSingleObject(stdin1,INFINITE);
// ch=getch();
ch=pBuff[i++];
if (!ch) break;
//将用户的输入信息发送给Telnet服务器
nRet = send(pSocketTx->m_hSocket,&ch,sizeof(ch),0);
if ( nRet == SOCKET_ERROR ) {
TRACE("\nSend Fail........!\n");
pSocketTx->m_nExit = 0;
continue;
}
}
return 0;
}
------解决思路----------------------
ch定义成char *的不就可以了,从键盘接的时候用gets(ch); send(pSocketTx->m_hSocket,ch,sizeof(ch),0);
------解决思路----------------------
在你接受数据的线程,recv收到的串和login:,Password:比较,如果是login:就立马send一个用户名的串,如果是Password就send一个密码的串,如果是其他不做任何操作
------解决思路----------------------
不需要判断的,不过读入字符串一定要用gets()
------解决思路----------------------
在你接受数据的线程,recv收到的串和login:,Password:比较,如果是login:就立马send一个用户名的串,如果是Password就send一个密码的串,如果是其他不做任何操作
您好,那意思就是我要定义一个数组为login[]="login";,password[]="password";,然后把这个放到recv这里是吗,
nRet = recv(pSocketTx->m_hSocket,pBuf,sizeof(pBuf),0);这里来判断当我输完ip是ok的,返回login等待输入,然后就在sand函数模块下发送一个str1="root";str2="****";这样可行吗?但是我感觉这样做的话,while(1),循环我就不知道怎么弄了。
用pBuf和你的两个string比较,如果和login相同就send一个用户名的串,如果和password相同就send一个密码的串,这些内容是写在你接受的线程中,不是在这个线程