0

我正在尝试通过 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。

4

1 回答 1

0

我有同样的问题。

我解决它的步骤:

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