pcap_sendpacket将发送两个相同的数据包一次

时间:2016-01-24 06:59:12

标签: windows network-programming pcap

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

环境是Win7 64bit。而且,在另一台Win7 64bit上运行的相同代码库在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。

1 个答案:

答案 0 :(得分:0)

我有同样的问题。

我要解决的步骤:

  1. 卸载winpcapnpcap。我都在本地计算机上
  2. 仅安装npcap
  3. 根据https://nmap.org/npcap/guide/npcap-devguide.html部分“对于要在Npcap和WinPcap共存时首先使用Npcap的软件”使用延迟的dll加载。