【问题标题】:pcap_sendpacket will send two identical packets oncepcap_sendpacket 将发送两个相同的数据包一次
【发布时间】:2016-04-30 14:38:41
【问题描述】:

我正在尝试通过 Winpcap API pcap_sendpacket() 发送一些自打包的以太网数据包,但在调用 API 一次后我得到了两个相同的数据包。这两个数据包可以在 Wireshark 上捕获以进行调试,具有相同的数据和连续的帧号。

环境为Win7 64bit。奇怪的是,在另一个 Win7 64 位上运行的相同代码库在 Wireshark 上只显示一个数据包。

编辑:

[2016.1.24 19:30]

对不起,由于机密,我只能发布pcap相关的代码部分

// first, enum the device list
pcap_if_t *m_alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
if (pcap_findalldevs(&m_alldevs, errbuf) == -1)
{
    // log error ...

for(pcap_if_t *d = m_alldevs; d != NULL; d = d->next)
{


// second, open the interface
// use flag PCAP_OPENFLAG_MAX_RESPONSIVENESS to get response quickly
// set timeout to 1000ms
errbuf[PCAP_ERRBUF_SIZE];
pcap_t* fp = pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS|PCAP_OPENFLAG_MAX_RESPONSIVENESS, 1000, NULL, errbuf);


// third, get the interface device then release all the device
pcap_freealldevs(m_alldevs);

// 4th, send data
// unsigned char* buf;
// int size;
pcap_sendpacket(fp, buf, size);

对于数据包,数据包是手工制作的,大小在 64 到 1500 之间,有一个 IEEE 802.3 类型的帧头,两个 mac 字段是自定义的。

在出现错误的机器上,Winpcap的版本是“4.1.0.2980”,Wireshark是“64bit 1.12.3”;明天我会检查另一台没有错误的机器。

编辑:

[2016.1.26 10:30] Winpcap的版本是“4.1.0.2980”,和出错机器上的一样。 Wireshark 的版本是“64bit 1.12.8”。两个操作系统都是Win7 Enterprise 64bit。

【问题讨论】:

  • 如果您不向我们展示您使用的源代码,则很难帮助您查明您的问题。
  • “奇怪的是,在另一个 Win7 64 位上运行的相同代码库在 Wireshark 上只显示一个数据包。”相同版本的 Wireshark,相同版本的 WinPcap,在两台机器上?
  • 我已经添加了一些代码部分以及Wireshark和WinPcap的版本比较,希望能更清楚。感谢您的回复!

标签: windows network-programming pcap winpcap npcap


【解决方案1】:

我遇到了同样的问题。

我的解决方法:

  1. 卸载winpcap & npcap。我的本地机器上都有这两个
  2. 只安装npcap
  3. 根据https://nmap.org/npcap/guide/npcap-devguide.html 部分“对于在 Npcap 和 WinPcap 共存时要先使用 Npcap 的软件”使用延迟 dll 加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多