当前位置:   article > 正文

wireshark tcp报文深度解析_wireshark解析tcp报文的内容

wireshark解析tcp报文的内容

封包详细信息是用来查看协议中的每一个字段。各行信息分别对应TCP/IP协议的不同层级。以下图为例,分别表示:传输层、网络层、数据链路层、物理层,一共四层。如果有应用层数据会显示第五层,即一共会出现五层。

4e61913d0ce0417599e4c63147baeace.png

 

就举例查看一个tcp报文

cefe8e7a187e4bb8aceffce028a96ff8.png

 

物理层->mac层->数据链路层->传输层的数据结构如下: 

  1. #ifndef LITTLE_ENDIAN
  2. #define LITTLE_ENDIAN (1) //BYTE ORDER
  3. #else
  4. #error Redefine LITTLE_ORDER
  5. #endif
  6. //Mac头部,总长度14字节
  7. typedef struct _eth_hdr
  8. {
  9. unsigned char dstmac[6]; //目标mac地址
  10. unsigned char srcmac[6]; //源mac地址
  11. unsigned short eth_type; //以太网类型
  12. }eth_hdr;
  13. //IP头部,总长度20字节
  14. typedef struct _ip_hdr
  15. {
  16. #if LITTLE_ENDIAN
  17. unsigned char ihl:4; //首部长度
  18. unsigned char version:4, //版本
  19. #else
  20. unsigned char version:4, //版本
  21. unsigned char ihl:4; //首部长度
  22. #endif
  23. unsigned char tos; //服务类型
  24. unsigned short tot_len; //总长度
  25. unsigned short id; //标志
  26. unsigned short frag_off; //分片偏移
  27. unsigned char ttl; //生存时间
  28. unsigned char protocol; //协议
  29. unsigned short chk_sum; //检验和
  30. struct in_addr srcaddr; //源IP地址
  31. struct in_addr dstaddr; //目的IP地址
  32. }ip_hdr;
  33. //TCP头部,总长度20字节
  34. typedef struct _tcp_hdr
  35. {
  36. unsigned short src_port; //源端口号
  37. unsigned short dst_port; //目的端口号
  38. unsigned int seq_no; //序列号
  39. unsigned int ack_no; //确认号
  40. #if LITTLE_ENDIAN
  41. unsigned char reserved_1:4; //保留6位中的4位首部长度
  42. unsigned char thl:4; //tcp头部长度
  43. unsigned char flag:6; //6位标志
  44. unsigned char reseverd_2:2; //保留6位中的2
  45. #else
  46. unsigned char thl:4; //tcp头部长度
  47. unsigned char reserved_1:4; //保留6位中的4位首部长度
  48. unsigned char reseverd_2:2; //保留6位中的2
  49. unsigned char flag:6; //6位标志
  50. #endif
  51. unsigned short wnd_size; //16位窗口大小
  52. unsigned short chk_sum; //16位TCP检验和
  53. unsigned short urgt_p; //16为紧急指针
  54. }tcp_hdr;
  55. //UDP头部,总长度8字节
  56. typedef struct _udp_hdr
  57. {
  58. unsigned short src_port; //远端口号
  59. unsigned short dst_port; //目的端口号
  60. unsigned short uhl; //udp头部长度
  61. unsigned short chk_sum; //16位udp检验和
  62. }udp_hdr;
  63. //ICMP头部,总长度4字节
  64. typedef struct _icmp_hdr
  65. {
  66. unsigned char icmp_type; //类型
  67. unsigned char code; //代码
  68. unsigned short chk_sum; //16位检验和
  69. }icmp_hdr;

每层数据分析:

网络层

eb9c7ac574f64e19b6131281d53a0d00.png

 

936729650f404a94ab68b78da059f548.png

//Mac/以太网首部,总长度14字节  
typedef struct _eth_hdr  
{  
    unsigned char dstmac[6]; //目标mac地址  
    unsigned char srcmac[6]; //源mac地址  
    unsigned short eth_type; //以太网类型  
}eth_hdr;

 数据链路层:

1a7a8b0427eb4be3874bba9a1a9d47bd.png

aa857d3de6af4fc6be8131211d400f86.png

 //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包首部如下:

d975b2277b2b499ea6ef9567611cf0d2.png

4da1f8ceeec44095b48e073c9b6ba62c.png

 //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;  

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/639236
推荐阅读
  

闽ICP备14008679号