1.CERNET trace的文件结构
Trace文件中有多个Packet data,其中每一个Packet data的格式
CERNET的trace文件中每一个报文的长度都固定为52字节,1——4这4个字节为每一个报文的采集时间精确到秒。5——8这4个字节为每一个报文的采集时间精确到毫秒。9——28这20个字节为报文的固定头部,就是IP头部的固定20个字节,采自网络中报文的头部1——20字节。29——50这部分采自网络中报文的21——42字节,如果采集的网络中报文不足42个字节,就需要填充一下,在51——52这2个字节做标记。
处理包的相关代码`
void Readapacket(FILE * fp)
{
int hlen;
unsigned short i;
struct Index_packet inpack;
unsigned char h_lenver;
fread(&inpack.sec,4,1,fp);//读采集时间
fread(&inpack.usec,4,1,fp);
fread(&h_lenver, 1,1,fp);//读IP首部版本号和首部长度
fseek(fp, 11L,SEEK_CUR); //从当前位置读11个字节,到达IP地址部分
fread(&inpack.SIP,4,1,fp);
fread(&inpack.DIP,4,1,fp);
hlen = (int)(h_lenver & 0xf) * sizeof(unsigned long) ; // 计算首部长度
//printf("headlen of ip layer: %d\n",hlen);
fseek(fp, hlen -20, SEEK_CUR);//IP报文首部长度-20得到可选字段+填充字段长度,并从当前位置跳过这段长度达到IP报文数据部分
fread(&inpack.SPort, 2,1,fp);
fread(&inpack.DPort,2,1,fp)