【问题标题】:Cannot open include file: 'pcap.h'无法打开包含文件:\'pcap.h\'
【发布时间】:2022-12-08 09:57:41
【问题描述】:

我正在尝试用 C++ 编写一个小型 pcap 程序,但出现上述错误。 下面是我写的程序。

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<pcap.h>

void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
{
    cout<<"Got a Packet"<<endl;
}

int main()
{
    pcap_t *handle;
    char errbuf[PCAP_ERRUF_SIZE];
    struct bpf_program fp;
    char filter_exp[] = "icmp";
    bpf_u_int32 net;

    //Step 1
    handle = pcap_open_live("enp0se", BUFSIZ, 1, 1000, errbuf);

    //Step 2
    pcap-compile(handle, &fp, filter_exp, 0, net);
    pcap_setfilter(handle, &fp);

    //Step 3
    pcap_loop(handle, -1, got_packet, NULL);
    pcap_close(handle);
    return 0;
}

【问题讨论】:

  • 常见问题适用,1) 您的计算机上是否有文件 pcap.h? 2)如果你告诉你的编译器在哪里可以找到那个文件?通常编译器不会自动查找头文件。如果您使用非标准头文件,您通常必须告诉编译器在哪里可以找到它们,这不会自动发生。
  • 我想我的系统中没有它,我认为它会像其他头文件一样被包含在内,比如 stdio.h 请帮助我这样做。
  • pcap.h 是非标准的。下面的答案涵盖了您需要做的事情。
  • 还有一点&lt;iostream.h&gt;也是不规范的。正确的头文件是&lt;iostream&gt;。但是你似乎没有使用它,所以它可以被删除。
  • 您需要安装 libpcap 库,它是 libpcap-devlibpcap-devel,具体取决于您的 Linux 发行版。

标签: c++ pcap tcpdump libpcap


【解决方案1】:

这个问题可能是由几件事引起的:

  1. 您没有安装 pcap 库。 (注意:你需要像 pcap-devel 这样的东西,而不仅仅是 pcap)
  2. 您的编译器无法找到它,因此您需要使用 -I 标志提供 lib 标头路径。

    另外,不要忘记在链接时使用 -lpcap。

【讨论】:

    【解决方案2】:

    如果您正在开发一个使用特定库的程序,您将需要拥有声明函数和变量的头文件,并定义使用该库的程序所需的数据类型和常量。

    如果你在 Linux 上这样做:

    Linux 发行版通常有多个库的可安装包:

    • 名称为库名称(例如“libpcap”)的包包含共享库,这些共享库是运行使用库的共享版本构建的程序所必需的,但不包含头文件。
    • 名称为库名称加上“-devel”或“-dev”等后缀的包包含库的标头。

    这个想法是:

    • 如果安装了与库的共享版本链接的任何程序,则安装第一个包 - 通常,这些程序的包包括库的第一个包作为依赖项,因此如果安装了程序的包,则还安装了库的第一个包;
    • 仅当用户想要使用该库开发程序时才安装第二个包。

    因此,当您使用 libpcap 开发程序时,您必须像其他人指出的那样安装 libpcap-devel 或 libpcap-dev 或...包(名称取决于您使用的发行版) .

    请注意,这不是 libpcap 的特殊之处;它适用于其他图书馆。例如,在 Debian 和 Ubuntu 等衍生产品上,有一个 libpcap-0.8 包(“0.8”是出于历史原因)和一个 libpcap-0.8-dev 包(还有一个 libpcap-dev 包,我认为是 libpcap-0.8-dev 的一个更好命名的别名)有一个 libssl 包和一个 libssl-dev 包。

    Linux 以外的操作系统可能会以不同的方式执行此操作。例如,macOS 不提供标头,但 Xcode 中的软件开发工具包提供,您可以获得所有 macOS API 的标头,包括 libpcap - 无需安装单独的包,只需安装 Xcode。我认为 BSD 要么总是提供标头,要么在安装编译器时提供它们。

    【讨论】:

      猜你喜欢
      • 2018-11-11
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2016-06-17
      • 2019-10-28
      • 1970-01-01
      相关资源
      最近更新 更多