当前位置:   article > 正文

Winpcap数据包的抓取及还原_udp payload还原

udp payload还原

winpcap技术手册,除了安装文件里doc文件下有个帮助,这里在给一个:http://www.ferrisxu.com/WinPcap/html/index.html

这里我们用pcap_next_ex 函数抓取到数据包后,我们就要开始提取其中的关键信息了,这里我保存在了pkt_data里,之后又传到了处理函数中

代码如下,我也已经写的很清楚了。其中MAC地址是在数据链路层获取的,其他的诸如端口号,IP等都是通过分析IP包和TCP包获取。

唯一需要注意的就是在定义结构体的时候要注意字节的大小,不然获取的信息就是错误的了。


  1. #include <stdio.h>
  2. #include <iostream>
  3. #define HAVE_REMOTE
  4. #include "pcap.h"
  5. #include "remote-ext.h"
  6. #pragma comment(lib, "Ws2_32.lib")
  7. #pragma comment(lib, "wpcap.lib")
  8. using namespace std;
  9. FILE* fp;
  10. // 以太网协议格式的定义
  11. typedef struct ether_header {
  12. u_char ether_dhost[6]; // 目标地址
  13. u_char ether_shost[6]; // 源地址
  14. u_short ether_type; // 以太网类型
  15. }ether_header;
  16. // 用户保存4字节的IP地址
  17. typedef struct ip_address {
  18. u_char byte1;
  19. u_char byte2;
  20. u_char byte3;
  21. u_char byte4;
  22. }ip_address;
  23. // 用于保存IPV4的首部
  24. typedef struct ip_header {
  25. #ifdef WORDS_BIGENDIAN
  26. u_char ip_version : 4, header_length : 4;
  27. #else
  28. u_char header_length : 4, ip_version : 4;
  29. #endif
  30. u_char ver_ihl; // 版本以及首部长度,各4位
  31. u_char tos; // 服务质量
  32. u_short tlen; // 总长度
  33. u_short identification; // 身份识别
  34. u_short offset; // 分组偏移
  35. u_char ttl; // 生命周期
  36. u_char proto; // 协议类型
  37. u_short checksum; // 包头测验码
  38. ip_address saddr; // 源IP地址
  39. ip_address daddr; // 目的IP地址
  40. u_int op_pad; //可选 填充字段
  41. }ip_header;
  42. // 保存TCP首部
  43. typedef struct tcp_header {
  44. u_short sport;
  45. u_short dport;
  46. u_int sequence; // 序列码
  47. u_int ack; // 回复码
  48. #ifdef WORDS_BIGENDIAN
  49. u_char offset : 4, reserved : 4; // 偏移 预留
  50. #else
  51. u_char reserved : 4, offset : 4; // 预留 偏移
  52. #endif
  53. u_char flags; // 标志
  54. u_short windows; // 窗口大小
  55. u_short checksum; // 校验和
  56. u_short urgent_pointer; // 紧急指针
  57. }tcp_header;
  58. typedef struct udp_header {
  59. u_int32_t sport; // 源端口
  60. u_int32_t dport; // 目标端口
  61. u_int8_t zero; // 保留位
  62. u_int8_t proto; // 协议标识
  63. u_int16_t datalen; // UDP数据长度
  64. }udp_header;
  65. typedef struct icmp_header {
  66. u_int8_t type; // ICMP类型
  67. u_int8_t code; // 代码
  68. u_int16_t checksum; // 校验和
  69. u_int16_t identification; // 标识
  70. u_int16_t sequence; // 序列号
  71. u_int32_t init_time; // 发起时间戳
  72. u_int16_t recv_time; // 接受时间戳
  73. u_int16_t send_time; // 传输时间戳
  74. }icmp_header;
  75. typedef struct arp_header {
  76. u_int16_t arp_hardware_type;
  77. u_int16_t arp_protocol_type;
  78. u_int8_t arp_hardware_length;
  79. u_int8_t arp_protocol_length;
  80. u_int16_t arp_operation_code;
  81. u_int8_t arp_source_ethernet_
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/162530
推荐阅读