关于pcap:在Windows 10 python 2.7(64位)上安装pypcap

Installing pypcap on Windows 10 python 2.7 (64 bit)

我正在尝试从以下位置安装pypcap:https://github.com/dugsong/pypcap/blob/master/INSTALL#L75

我正在尝试在Windows 10-64位和python 2.7.11 64位上安装它。我下载了源并将其移至c:\\pypcap。下载并安装了pyrex。像安装页面所说的那样,将wpdpack文件放在c:\\wpdpack中。创建配置文件并更改了makefile。

我还从他们的网站上安装了基本包和g++包的mingw

我尝试做:

1
2
C:\\pypcap> set PATH=%PATH%;c:\\MinGW\\bin;c:\\Python27
C:\\pypcap> mingw32-make

在这里失败,它得到以下错误:

1
2
3
4
In file included from C:\\Python27\\include/Python.h:8:0,
                 from pcap.c:4:
C:\\Python27\\include/pyconfig.h:68:16: fatal error: io.h: No such file or directory
 #include <io.h>

所以我没有这个io.h文件。我该怎么做才能编译并使用pypcap

尝试之前,我尝试做

1
2
3
4
5
6
7
8
C:\\pypcap>pip install pypcap
Collecting pypcap
  Using cached pypcap-1.1.4.tar.gz
    Complete output from command python setup.py egg_info:
    pcap.h not found

    ----------------------------------------
Command"python setup.py egg_info" failed with error code 1 in c:\\users\\USER\\appdata\\local\\temp\\pip-build-fvgkhs\\pypcap\\

,然后我尝试使用滚轮下载,但同样失败。

在此先感谢您的帮助


  • 解压缩WinPcap Developer包,以便您具有C:\\WpdPack\\IncludeC:\\WpdPack\\Lib

  • 解压缩pypcap源代码,以便拥有C:\\pypcap-1.1.4\\setup.py

  • 安装适用于Python 2.7的Microsoft Visual C编译器

  • 从以下位置启动有关您的Python27位的cmd提示符:
    Start -> Programs -> Microsoft Visual C++ Compiler Package for Python 2.7

  • 使用以下命令从该cmd提示符安装/构建pypcap:

  • 1
    2
    3
    4
        set INCLUDE=%INCLUDE%;c:\\WpdPack\\Include
        set LIB=%LIB%;c:\\WpdPack\\Lib
        pushd C:\\pypcap-1.1.4
        python setup.py install


    更改的答案

    • 下载https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download。

    • 运行。

    • 选择:

      • mingw32-base

      • mingw32-gcc-g

    • 选择菜单安装=>应用更改

    现在,您已经具有功能齐全的MinGW GCC编译器,包括头文件。

    io.h应该驻留在C:\\MinGW\\include中。

    更新

    我现在已经按照问题中描述的步骤,使用Python 2.7.11(在Wine上,因为我没有运行Windows,但应该是相同的)成功地编译了它。

    我要做的一件事是修改pypcapsetup.py的部分,因为它没有设置pcap包含的正确路径。

    让我知道是否/何时到达。

    希望有帮助。

    更改为setup.py

    用此修改后的版本替换功能_pcap_config

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    def _pcap_config(self, dirs=[ None ]):
        cfg = {}
        if not dirs[0]:
            dirs = [ '/usr', sys.prefix ] + glob.glob('/opt/libpcap*') + \\
                   glob.glob('../libpcap*') + glob.glob('../wpdpack*')
        for d in dirs:
            for sd in ('include/pcap', 'include', ''):
                if os.path.exists(os.path.join(d, sd, 'pcap.h')):
                    cfg.setdefault('include_dirs', []).append(os.path.join(d, sd))
        for d in dirs:
            for sd in ('include/pcap', 'include', ''):
                for sd in ('lib', 'lib64', ''):
                    for lib in (('pcap', 'libpcap.a'),
                                ('pcap', 'libpcap.so'),
                                ('pcap', 'libpcap.dylib'),
                                ('wpcap', 'wpcap.lib')):
                        if os.path.exists(os.path.join(d, sd, lib[1])):
                            cfg['library_dirs'] = [ os.path.join(d, sd) ]
                            cfg['libraries'] = [ lib[0] ]
                            if lib[0] == 'wpcap':
                                cfg['libraries'].append('iphlpapi')
                                cfg['extra_compile_args'] = \\
                                    [ '-DWIN32', '-DWPCAP' ]
                            print 'found', cfg
                            self._write_config_h(cfg)
                            return cfg
        raise Exception("couldn't find pcap build or installation directory")

    它基本上只是将包含pcap.h的所有路径添加到包含中。

    编译

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Z:\\pypcap-master>mingw32-make
    python setup.py config --with-pcap=c:\\\\wpdpack
    running config
    found {'libraries': ['wpcap', 'iphlpapi'], 'library_dirs': ['c:\\\\wpdpack\\\\lib'], 'extra_compile_args': ['-DWIN32', '-DWPCAP'], 'include_dirs': ['c:\\\\wpdpack\\\\include/pcap', 'c:\\\\wpdpack\\\\include']}
    python setup.py build
    running build
    running build_ext
    building 'pcap' extension
    creating build
    creating build\\temp.win32-2.7
    creating build\\temp.win32-2.7\
    elease
    C:\\MinGW\\bin\\gcc.exe -mdll -O -Wall -Ic:\\wpdpack\\include/pcap -Ic:\\wpdpack\\include -IC:\\Python27\\include -IC:\\Python27\\PC -c pcap.c -o build\\temp.win32-2.7\
    elease\\pcap.o -DWIN32 -DWPCAP
    pcap.c: In function '__pyx_f_4pcap_3bpf_filter':
    pcap.c:328:48: warning: passing argument 2 of 'PyObject_AsCharBuffer' from incompatible pointer type
       __pyx_1 = (PyObject_AsCharBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) < 0);
                                                    ^
    In file included from C:\\Python27\\include/Python.h:133:0,
                     from pcap.c:4:
    C:\\Python27\\include/abstract.h:476:22: note: expected 'const char **' but argument is of type 'char **'
          PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
                          ^
    pcap.c:337:86: warning: pointer targets in passing argument 2 of 'bpf_filter' differ in signedness [-Wpointer-sign]
       __pyx_1 = (bpf_filter(((struct __pyx_obj_4pcap_bpf *)__pyx_v_self)->fcode.bf_insns,__pyx_v_p,__pyx_v_n,__pyx_v_n) == 0);
                                                                                          ^
    In file included from pcap.c:30:0:
    c:\\wpdpack\\include/pcap/pcap.h:354:7: note: expected 'const u_char *' but argument is of type 'char *'
     u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
           ^
    pcap.c: In function '__pyx_f_4pcap_4pcap_dispatch':
    pcap.c:955:91: warning: passing argument 3 of 'pcap_dispatch' from incompatible pointer type
       __pyx_v_n = pcap_dispatch(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,__pyx_1,__pyx_f_4pcap___pcap_handler,((unsigned char *)(&__pyx_v_ctx)));
                                                                                               ^
    In file included from pcap.c:30:0:
    c:\\wpdpack\\include/pcap/pcap.h:300:5: note: expected 'pcap_handler' but argument is of type 'void (*)(void *, struct pcap_pkthdr *, char *)'
     int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
         ^
    pcap.c: In function '__pyx_f_4pcap_4pcap_loop':
    pcap.c:1059:99: warning: passing argument 3 of 'pcap_ex_next' from incompatible pointer type
         __pyx_v_n = pcap_ex_next(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,(&__pyx_v_hdr),(&__pyx_v_pkt));
                                                                                                       ^
    In file included from pcap.c:31:0:
    pcap_ex.h:13:7: note: expected 'u_char **' but argument is of type 'char **'
     int   pcap_ex_next(pcap_t *pcap, struct pcap_pkthdr **hdr, u_char **pkt);
           ^
    pcap.c: In function '__pyx_f_4pcap_4pcap_sendpacket':
    pcap.c:1154:98: warning: pointer targets in passing argument 2 of 'pcap_sendpacket' differ in signedness [-Wpointer-sign]
       __pyx_3 = PyInt_FromLong(pcap_sendpacket(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,__pyx_1,__pyx_2)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; goto __pyx_L1;}
                                                                                                      ^
    In file included from pcap.c:30:0:
    c:\\wpdpack\\include/pcap/pcap.h:311:5: note: expected 'const u_char *' but argument is of type 'char *'
     int pcap_sendpacket(pcap_t *, const u_char *, int);
         ^
    pcap.c: In function '__pyx_f_4pcap_4pcap___next__':
    pcap.c:1312:99: warning: passing argument 3 of 'pcap_ex_next' from incompatible pointer type
         __pyx_v_n = pcap_ex_next(((struct __pyx_obj_4pcap_pcap *)__pyx_v_self)->__pcap,(&__pyx_v_hdr),(&__pyx_v_pkt));
                                                                                                       ^
    In file included from pcap.c:31:0:
    pcap_ex.h:13:7: note: expected 'u_char **' but argument is of type 'char **'
     int   pcap_ex_next(pcap_t *pcap, struct pcap_pkthdr **hdr, u_char **pkt);
           ^
    C:\\MinGW\\bin\\gcc.exe -mdll -O -Wall -Ic:\\wpdpack\\include/pcap -Ic:\\wpdpack\\include -IC:\\Python27\\include -IC:\\Python27\\PC -c pcap_ex.c -o build\\temp.win32-2.7\
    elease\\pcap_ex.o -DWIN32 -DWPCAP
    pcap_ex.c: In function 'pcap_ex_next':
    pcap_ex.c:237:34: warning: passing argument 3 of 'pcap_next_ex' from incompatible pointer type
      return (pcap_next_ex(pcap, hdr, pkt));
                                      ^
    In file included from pcap_ex.c:16:0:
    c:\\wpdpack\\include/pcap/pcap.h:303:6: note: expected 'const u_char **' but argument is of type 'u_char **'
     int  pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
          ^
    writing build\\temp.win32-2.7\
    elease\\pcap.def
    creating build\\lib.win32-2.7
    C:\\MinGW\\bin\\gcc.exe -shared -s build\\temp.win32-2.7\
    elease\\pcap.o build\\temp.win32-2.7\
    elease\\pcap_ex.o build\\temp.win32-2.7\
    elease\\pcap.def -Lc:\\wpdpack\\lib -LC:\\Python27\\libs -LC:\\Python27\\PCbuild -LC:\\Python27\\PC\\VS9.0 -lwpcap -liphlpapi -lpython27 -lmsvcr90 -o build\\lib.win32-2.7\\pcap.pyd

    Z:\\pypcap-master>

    链接

    对于MinGW(32位),您需要安装32位Python。使用64位Python,您需要安装MinGW(64位)。

    因此您可以安装32位Python或安装64位MinGW。

    我们现在关闭,您将成为:-)