如何把捕获到的一个IP包中的数据正确显示出来??(全天在线等!!...)
通过raw socket编写了一个嗅探器,现在想把其中IP包中的数据显示出来,该怎么做呢??
我用的是netmon.h,里面有定义好的IP和TCP头。
#define BUFFERSIZE 65535
int len;
char RecvBuf[BUFFERSIZE];
len=recv(sock, RecvBuf,BUFFERSIZE,0);
if(len>0)
{
ip = *(IP*)RecvBuf;
char *Data;
Data=RecvBuf+IP_HdrLen(&ip);
}
可是在我把data中的东西显示出来时,却都是很少的,而且数据显示都差不多一样多。。
IP头中有一项是TotalLen,我考虑可能是因为我直接把缓冲区的内容输出来,而没有根据IP包的总长度来输出,可是当我把那一行改为:memcpy(Data,RecvBuf,ip.TotalLen);输出的却是一个字母,所有的IP包数据都是这一个字母,感到很纳闷。。。
想做到下面这样的显示,该如何做呢??
0x13 0x42 0x69 0x74 0x54 0x6F 0x72 0x72 0x65 0x6E 0x74 0x20 0x70 0x72 0x6F 0x74 .BitTorrent prot
0x6F 0x63 0x6F 0x6C 0x65 0x78 0x00 0x00 0x00 0x00 0x00 0x00 0xD7 0xB7 0x83 0x23 ocolex.........#
0xBF 0xE7 0x34 0x2D 0x05 0xF6 0xD4 0x07 0x11 0x11 0x78 0x7A 0xCE 0x6A 0x42 0xC0 ..4-......xz.jB.
0x65 0x78 0x62 0x63 0x00 0x38 0x11 0xEB 0x11 0x67 0xAA 0x86 0x42 0xB3 0x11 0xC4 exbc.8...g..B...
至于winpcap实现嗅探器的那种方法,我已掌握,想知道如何用raw socket把IP包中的数据给正确的显示出来,希望大家帮助我!!谢谢!