在 Windows 10 上使用草莓 perl 安装 Net::P cap



我正在尝试使用便携式草莓Perl v5.28.1版本安装Net::P cap(https://metacpan.org/pod/Net::Pcap(,以下是我的步骤:

1.我从 https://nmap.org/npcap/#download 安装了npcap(Windows 10的winpcap(

2.我从 https://nmap.org/npcap/#download 下载了 npcap sdk

3.我将 SDK zip 文件夹解压缩到 c:/WdpPack 并验证包含和 Lib 文件夹是否包含头文件和库

4.然后运行以下命令

perl Makefile.PL INC=-IC:/WpdPack/Include "LIBS=-LC:/WpdPack/Lib -lwpcap"

我收到以下错误消息:

socket.h patched... ok
looking for -lwpcap... yes
checking for pcap_lib_version() in -lwpcap... no
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
You appear to lack the WinPcap developer pack.
If it is installed in a non-standard location, please try setting the LIBS
and INC values on the command line.  For instance, if you have unzipped the
developer's pack in C:WpdPack, you should execute:
perl Makefile.PL INC=-IC:/WpdPack/Include "LIBS=-LC:/WpdPack/Lib -lwpcap"
Or get and install the WinPcap developer's pack from
http://www.winpcap.org/install/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

知道如何解决这个问题吗?

我能够通过将 SDK 文件夹从C:WdpPack移动到我的C:User文件夹来编译它。我对 Windows 不太熟悉,所以我不确定为什么会这样,也许与权限有关?

更新

运行perl Makefile.PL后,运行gmake编译模块失败并显示错误:

[...]
stubs.inc:91:8: error: redefinition of 'struct pcap_if'
[...]
stubs.inc:267:5: error: conflicting types for 'pcap_compile_nopcap'
[...]
stubs.inc:357:8: error: redefinition of 'struct pcap_rmtauth'
[...]
stubs.inc:363:10: error: conflicting types for 'pcap_open'
[...]
stubs.inc:438:8: error: redefinition of 'struct pcap_send_queue'
[...]
stubs.inc:497:8: error: redefinition of 'struct pcap_samp'

要解决此问题,请编辑文件stubs.inc

  • 删除第91-97行

    struct pcap_if {
    struct pcap_if *next;
    char *name;     /* name to hand to "pcap_open_live()" */
    char *description;  /* textual description of interface, or NULL */
    struct pcap_addr *addresses;
    bpf_u_int32 flags;  /* PCAP_IF_ interface flags */
    };
    
  • 删除行 : 267-271

    int pcap_compile_nopcap(int snaplen, int linktype, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask);
    int pcap_compile_nopcap(int snaplen, int linktype, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask) {
    FUNCTION_NOT_IMPLEMENTED_ERROR(pcap_compile_nopcap)
    return -1;
    
  • 删除行:357-361

    struct pcap_rmtauth {
    int type;
    char *username;
    char *password;
    };
    
  • 删除第 438-442 行:

    struct pcap_send_queue{
    u_int maxlen;
    u_int len;
    char *buffer;
    };
    
  • 删除第 519-521 行:

    struct pcap_samp {
    int method;
    int value;
    };
    

现在gmake编译文件,但链接器失败:

[...]
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Pcap.o:Pcap.c:(.text+0x23be): undefined reference to `pcap_geterr'
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Pcap.o:Pcap.c:(.text+0x2580): undefined reference to `pcap_geterr'
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Pcap.o:Pcap.c:(.text+0x2590): undefined reference to `pcap_stats'
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Pcap.o:Pcap.c:(.text+0x2820): undefined reference to `pcap_fileno'
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Pcap.o:Pcap.c:(.text+0x29c4): undefined reference to `pcap_file'
[...]

这里的问题是我们与 32 位库wpcap.lib链接,请参阅这篇文章。事实证明,该库在文件夹中的SDK中有一个64位版本的库Lib/x64.因此,我们必须使用正确的库路径重新运行Makefile.PL

perl Makefile.PL INC=-IC:/Users/Me/Libraries/npcap/Include "LIBS=-LC:/Users/Me/Libraries/npcap/Lib/x64 -lwpcap"

(更改上述命令中的路径以符合 SDK 的安装目录(,然后重新运行gmake

相关内容

  • 没有找到相关文章

最新更新