无法打开include文件:'pcap.h'



我正试图在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 lib。(注意:你需要像pcap-devel这样的东西,而不仅仅是pcap)
  2. 你的编译器找不到它,所以你需要使用-I标志提供lib头路径。

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

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

如果你在Linux上这样做:

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

  • 包的名称是库的名称,如"libpcap",包括共享库,这是必要的,以便运行与库的共享版本构建的程序,但不包括头文件。
  • 包的名称是库的名称加上后缀,如"- developer "或者"-dev",包含库的头文件。

意思是:

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

因此,当您使用libpcap开发程序时,您必须像其他人注意到的那样安装libpcap-dev或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要么总是提供头文件,要么在你安装编译器时提供它们。

最新更新