WinPcap:丢弃的WiFi数据包

时间:2016-01-07 15:13:04

标签: c network-programming raw-sockets winpcap

考虑sending a single packet的WinPcap教程。要开始运行它,它相对简单:

  1. 将代码复制并粘贴到您的IDE for C(在我的案例中为代码:: blocks)
  2. #define HAVE_REMOTE添加到第1行
  3. 设置构建选项(链接库和目录)
  4. 设置正确的mac地址
  5. 使用您要发送的数据填充数组
  6. 编译并执行(以管理员身份)
  7. 它很好用并且有很好的文档记录。如果您运行capturing packets的其他教程,您将看到数据包已正确传输。

    但是,如果将第13个数组元素设置为0~5,则无法正确传输数据包。例如,在发送数据包之前,添加以下代码行:

    包[12] = 5;

    这样,先前正在传输的数据包不再被传输(没有任何错误消息)。哪个没有任何意义。根据文档,此数组元素已经是有效负载的一部分(即:不再是mac地址,长度或标头),可以是0到255之间的任何整数。

    问题
    为什么第13个数组元素导致数据包不再被传输?

1 个答案:

答案 0 :(得分:0)

packet[12]packet[13]包含已使用的EtherType,例如,IP这是0x0800

有关EtherType个数字的列表,请参阅herehere

  

哪个没有任何意义。 根据文档,这个   数组元素已经是有效载荷的一部分(即:不再是mac   地址,长度或标题),可以是0到255之间的任何整数。

看起来并非如此:

  

pcap_sendpacket()将包含数据的缓冲区作为参数   发送,缓冲区的长度和将发送它的适配器。   请注意,缓冲区按原样发送到网络,没有任何缓冲区   操纵。这意味着应用程序必须创建   正确的协议标题,以便发送有意义的内容。

所以你需要自己组装完整的数据包,包括IP头,TCP头,校验和等。