|
突然想作一个可以连接telnet的东东出来玩.但是发现telnet连接上去是没问题了.但是telnet发送过来的控制数据一直看不明白.也就是说的NVT格式吧(我是这样理解的).telnet回传回来的前几个字符是NVT格式的控制字符.但是一直不明白这些控制字符的据体内容.在网上也没查到NVT规范之类的东东.
#include <stdlib.h>
#include <stdio.h>
#include <WINSOCK2.H>
#include <process.h>
void main()
{
SOCKET test;
int a = 0;
char buff[1024];
char orda[10];
WORD wVersion=MAKEWORD(2,0);//定义版本
struct sockaddr_in ip_addr;//IP地址
char addr[32] = "192.168.1.1";//输入的IP地址
WSADATA wsData;
int nResult= WSAStartup(wVersion,&wsData);
memset(buff,0,sizeof(buff));
memset(orda,0,sizeof(orda));
// memset(addr,0,32);
if (nResult != 0)
{
printf("WINSOCK EEROR\n");
system("pause");
}
// printf("输入IP地址:");
// gets(addr);//输入目标机地址
// printf("\n");
test = socket(AF_INET,SOCK_STREAM,0);//创建套接字
if(test == INVALID_SOCKET)
{
exit(0);
}
ip_addr.sin_family = AF_INET;
ip_addr.sin_port = htons(23);//端口
ip_addr.sin_addr.S_un.S_addr = inet_addr(addr);//地址格式转换,连接地址
a = connect(test,(struct sockaddr *)&ip_addr,sizeof(struct sockaddr_in));//连接目标地址
a = WSAGetLastError();
if(0 != a)
{
printf("连接错误!\n");
exit(0);
}
do
{
a = recv(test,buff,sizeof(buff),0);
printf("%s",buff);
memset(buff,0,sizeof(buff));
gets(orda);
*(orda+strlen(orda)) = 13;
send(test,orda,strlen(orda)+1,MSG_DONTROUTE);
memset(orda,0,sizeof(orda));
memset(buff,0,sizeof(buff));
}while (1);
}
这样能连接上去.也能收到数据.但是数据前面的控制字符一直无法理解.如连上去后.telnet马上回传过来的是 ff fd 01 ff fd 21 ff fb 03
|
|