c语言 socket命令,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.csdn.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一个密码的串,如果是其他不做任何操作

------解决思路----------------------

引用:Quote: 引用:ch定义成char *的不就可以了,从键盘接的时候用gets(ch); send(pSocketTx->m_hSocket,ch,sizeof(ch),0);

您好,您那个方法我也用过,不可以我不知道为什么我们可以输入进行输入用户名:root,但是我按回车时它不会提示我们输入密码,也就是程序到登录提示就停止了,是不是加个判断,当我输入字符串了,按enter键就发送指令。。。

不需要判断的,不过读入字符串一定要用gets()

------解决思路----------------------

引用:Quote: 引用:在你接受数据的线程,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一个密码的串,这些内容是写在你接受的线程中,不是在这个线程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值