下面代码是发送请求到局域网内其他电脑的137端口,获得该电脑的主机信息.不知道,请求peticion中的这些16进制是什么意思.有没有 高手解决下 SOCKET sock;
struct sockaddr_in origen,dest;
char respuesta[1000];
unsigned int addr=0;
char peticion[]="\x80\x94\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x43\x4b\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01"; WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)
{
return -1;
} if((sock = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET) //UDP
{
return -1;
}
if(setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout))==SOCKET_ERROR)
AfxMessageBox("Error al establecer 1?opcion"); //设置接收超时
memset(&dest,0,sizeof(dest)); struct hostent * phost; //hostent gethostbyname返回的结构体
phost=gethostbyname(dip);
if (!phost)
addr=inet_addr(dip); if (!phost && addr==INADDR_NONE)
{
return -1;
} if (phost != NULL)
memcpy(&(dest.sin_addr),phost->h_addr,phost->h_length);
else
dest.sin_addr.s_addr = addr;
dest.sin_family = AF_INET;
dest.sin_port = htons(137); // //本程序作为发送端 NetBIOS名称服务
if (sendto (sock, peticion, sizeof(peticion)-1, 0, (struct sockaddr *)&dest, sizeof (dest)) < 0)
{
return -1;
}
struct sockaddr_in origen,dest;
char respuesta[1000];
unsigned int addr=0;
char peticion[]="\x80\x94\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x20\x43\x4b\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01"; WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0)
{
return -1;
} if((sock = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP))==INVALID_SOCKET) //UDP
{
return -1;
}
if(setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout))==SOCKET_ERROR)
AfxMessageBox("Error al establecer 1?opcion"); //设置接收超时
memset(&dest,0,sizeof(dest)); struct hostent * phost; //hostent gethostbyname返回的结构体
phost=gethostbyname(dip);
if (!phost)
addr=inet_addr(dip); if (!phost && addr==INADDR_NONE)
{
return -1;
} if (phost != NULL)
memcpy(&(dest.sin_addr),phost->h_addr,phost->h_length);
else
dest.sin_addr.s_addr = addr;
dest.sin_family = AF_INET;
dest.sin_port = htons(137); // //本程序作为发送端 NetBIOS名称服务
if (sendto (sock, peticion, sizeof(peticion)-1, 0, (struct sockaddr *)&dest, sizeof (dest)) < 0)
{
return -1;
}
序号 字段名 长度
1 Transaction ID 两字节(16位)
2 Flags 两字节(16位)
3 Questions 两字节(16位)
4 AnswerRRs 两字节(16位)
5 AuthorityRRs 两字节(16位)
6 AdditionalRRs 两字节(16位)
7 Name<Workstation/Redirector> 34字节(272位)
8 Type:NBSTAT 两字节(16位)
9 Class:INET 两字节(16位)