2019 01 25 24 21 [win] winpcap 的 rpcapd.exe 在 win 2016 無法抓取封包

同事發現在 windows 2016 裡 winpcap 的 rpcapd.exe ,
無法像在其他 windows 版本把封包抓取送出.
可是, 自己寫的測試程式卻可以順利抓取到封包.
後來, 自己重新編譯一次 rpcapd.exe 發現還真的不work.
看了一下, 整個流程發現它在windows平台,
有多call PacketSetLoopbackBehavior 和 PacketSetMinToCopy,

#ifdef WIN32
//
// these flags are supported on Windows only
//
            if (fp != NULL && fp->adapter != NULL)
            {
                /* disable loopback capture if requested */
                if(flags & PCAP_OPENFLAG_NOCAPTURE_LOCAL)
                {
                    if(!PacketSetLoopbackBehavior(fp->adapter, NPF_DISABLE_LOOPBACK))
                    {
                        snprintf(errbuf, PCAP_ERRBUF_SIZE, "Unable to disable the capture of loopback packets.");
                        pcap_close(fp);
                        return NULL;
                    }
                }

                /* set mintocopy to zero if requested */
                if(flags & PCAP_OPENFLAG_MAX_RESPONSIVENESS)
                {
                    if(!PacketSetMinToCopy(fp->adapter, 0))
                    {
                        snprintf(errbuf, PCAP_ERRBUF_SIZE, "Unable to set max responsiveness.");
                        pcap_close(fp);
                        return NULL;
                    }
                }
            }
#endif //WIN32   

把這特別的部分註解掉, 編譯出來的 rpcapd.exe 在windows 2016 就正常了.
暫時先這樣workaround.
就等比較閒暇再來研究到底是怎麼一回事.
Ref: https://github.com/nmap/nmap/issues/1329