void getIHL(BYTE b,BYTE &result) {
result = (b & 0x0f) *4; }
//解析服务类型
char * parseServiceType_getProcedence(BYTE b){ switch(b>>5){ case 7:
return \ case 6:
return \ case 5:
return \ case 4:
return \ case 3: return \ case 2:
return \ case 1:
return \ case 0:
return \
default:
return \ } }
char * parseServiceType_getTOS(BYTE b){ b=(b>>1)&0x0f; switch(b){ case 0:
return \ case 1:
return \ case 2:
return \ case 4:
return \ case 8:
return \ case 15:
return \ default:
return \ } }
/* 获取禁止分片标志和分片标志 */
void getFlags(WORD w,BYTE &DF, BYTE &MF){ DF=(w>>14)&0x01; MF=(w>>13)&0x01; }
/* 获取分片偏移量 */
void getFragoff(WORD w,WORD &fragoff){ fragoff=w&0x1ffff; } //获取协议
char * getProtocol(BYTE Protocol){ switch (Protocol){ case 1: return \ case 2: return \ case 3: return \ case 4:
return \ case 6: return \ case 8:
return \ case 17: return \ case 41: return \ case 46: return \ default:
return \ } }
/* 解析IP数据包 */
void ipparse(FILE * file,char *buffer){ IP_HEADER ip = *(IP_HEADER *)buffer; fseek(file,0,SEEK_END); BYTE version;
getVersion(ip.Version,version); fprintf(file,\版本=IPV%d\\r\\n\ BYTE headerLen;
getIHL(ip.HdrLen,headerLen);
fprintf(file,\头长度=%d(BYTE)\\r\\n\ fprintf(file,\服务类型=%s,%s\\r\\n\
parseServiceType_getProcedence(ip.ServiceType),
parseServiceType_getTOS(ip.ServiceType));
fprintf(file,\数据报长度=%d(BYTE)\\r\\n\ fprintf(file,\数据报ID=%d\\r\\n\
/* DF表示禁止分片标志,MF表示分片标记 */ BYTE DF,MF;
getFlags(ip.Flags,DF,MF);
fprintf(file,\分段标志 DF=%d,MF=%d\\r\\n\ WORD fragOff;
getFragoff(ip.FragOff,fragOff);
fprintf(file,\分段偏移值=%d\\r\\n\ fprintf(file,\生存期=%d(hops)\\r\\n\ fprintf(file,\协议=%s\\r\\n\ fprintf(file,\头校验和=0x%0x\\r\\n\
fprintf(file,\源IP地址=%s\\r\\n\ fprintf(file,\目的IP地址=%s\\r\\n\ fprintf(file,\ }
/* 程序入口 */
int main(int argc,char *argv[]){ /* cmd参数 */ if(argc!=2){
printf(\ return -1;