赞
踩
封包详细信息是用来查看协议中的每一个字段。各行信息分别对应TCP/IP协议的不同层级。以下图为例,分别表示:传输层、网络层、数据链路层、物理层,一共四层。如果有应用层数据会显示第五层,即一共会出现五层。
就举例查看一个tcp报文
物理层->mac层->数据链路层->传输层的数据结构如下:
- #ifndef LITTLE_ENDIAN
- #define LITTLE_ENDIAN (1) //BYTE ORDER
- #else
- #error Redefine LITTLE_ORDER
- #endif
-
- //Mac头部,总长度14字节
- typedef struct _eth_hdr
- {
- unsigned char dstmac[6]; //目标mac地址
- unsigned char srcmac[6]; //源mac地址
- unsigned short eth_type; //以太网类型
- }eth_hdr;
-
- //IP头部,总长度20字节
- typedef struct _ip_hdr
- {
- #if LITTLE_ENDIAN
- unsigned char ihl:4; //首部长度
- unsigned char version:4, //版本
- #else
- unsigned char version:4, //版本
- unsigned char ihl:4; //首部长度
- #endif
- unsigned char tos; //服务类型
- unsigned short tot_len; //总长度
- unsigned short id; //标志
- unsigned short frag_off; //分片偏移
- unsigned char ttl; //生存时间
- unsigned char protocol; //协议
- unsigned short chk_sum; //检验和
- struct in_addr srcaddr; //源IP地址
- struct in_addr dstaddr; //目的IP地址
- }ip_hdr;
-
- //TCP头部,总长度20字节
- typedef struct _tcp_hdr
- {
- unsigned short src_port; //源端口号
- unsigned short dst_port; //目的端口号
- unsigned int seq_no; //序列号
- unsigned int ack_no; //确认号
- #if LITTLE_ENDIAN
- unsigned char reserved_1:4; //保留6位中的4位首部长度
- unsigned char thl:4; //tcp头部长度
- unsigned char flag:6; //6位标志
- unsigned char reseverd_2:2; //保留6位中的2位
- #else
- unsigned char thl:4; //tcp头部长度
- unsigned char reserved_1:4; //保留6位中的4位首部长度
- unsigned char reseverd_2:2; //保留6位中的2位
- unsigned char flag:6; //6位标志
- #endif
- unsigned short wnd_size; //16位窗口大小
- unsigned short chk_sum; //16位TCP检验和
- unsigned short urgt_p; //16为紧急指针
- }tcp_hdr;
-
- //UDP头部,总长度8字节
- typedef struct _udp_hdr
- {
- unsigned short src_port; //远端口号
- unsigned short dst_port; //目的端口号
- unsigned short uhl; //udp头部长度
- unsigned short chk_sum; //16位udp检验和
- }udp_hdr;
-
- //ICMP头部,总长度4字节
- typedef struct _icmp_hdr
- {
- unsigned char icmp_type; //类型
- unsigned char code; //代码
- unsigned short chk_sum; //16位检验和
- }icmp_hdr;
每层数据分析:
//Mac/以太网首部,总长度14字节
typedef struct _eth_hdr
{
unsigned char dstmac[6]; //目标mac地址
unsigned char srcmac[6]; //源mac地址
unsigned short eth_type; //以太网类型
}eth_hdr;
数据链路层:
//IP首部,总长度20字节
typedef struct _ip_hdr
{
#if LITTLE_ENDIAN
unsigned char ihl:4; //首部长度
unsigned char version:4, //版本
#else
unsigned char version:4, //版本
unsigned char ihl:4; //首部长度
#endif
unsigned char tos; //服务类型
unsigned short tot_len; //总长度
unsigned short id; //标志
unsigned short frag_off; //分片偏移
unsigned char ttl; //生存时间
unsigned char protocol; //协议
unsigned short chk_sum; //检验和
struct in_addr srcaddr; //源IP地址
struct in_addr dstaddr; //目的IP地址
}ip_hdr;
传输层:
TCP包首部如下:
//TCP首部,总长度20字节
typedef struct _tcp_hdr
{
unsigned short src_port; //源端口号
unsigned short dst_port; //目的端口号
unsigned int seq_no; //序列号
unsigned int ack_no; //确认号
#if LITTLE_ENDIAN
unsigned char reserved_1:4; //保留6位中的4位首部长度
unsigned char thl:4; //tcp头部长度
unsigned char flag:6; //6位标志
unsigned char reseverd_2:2; //保留6位中的2位
#else
unsigned char thl:4; //tcp头部长度
unsigned char reserved_1:4; //保留6位中的4位首部长度
unsigned char reseverd_2:2; //保留6位中的2位
unsigned char flag:6; //6位标志
#endif
unsigned short wnd_size; //16位窗口大小
unsigned short chk_sum; //16位TCP检验和
unsigned short urgt_p; //16为紧急指针
}tcp_hdr;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。