在ubuntu下安装libpcap库

这两天公司里要我了解一下pcap,但是还不知道它是干什么的。首先,我从网上查到了,pcap实际上是抓包库。这个抓包库给抓包系统提供了一个高层次的接口。所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的。它也支持把捕获的数据包保存为本地文件和从本地文件读取信息。进一步了解到,在linux下的这个库是libpcap,libpcap是unix/linux平台下的网络数据包捕获函数包,并且大多数网络监控软件都以它为基础。在windows下对应的是winpcap库版本。

首先呢,需要先在一个最新的libpcap源文件。我下载的是最新的版本是libpcap-1.2.0,然后解压到用户目录下。

在linux系统下,安装只需要三步:1. ./configure;2. make;3. make install。

在按照这三部安装的过程中遇到了两个问题,是安装过程中出现的错误。这些错误是因为没有对应的工具。我把错误和解决办法罗列如下,和大家一起分享:

第一步,配置过程中出现这样的一个错误:./configure:error:Your operating system's lex is insufficient to compile libpcap.意思就是你的操作系统的词法分析器(lex)不足以编译libpcap。有关这个lex的详细资料大家可以百度一下。然后我查阅了资料,解决办法是需要安装一个flex,sudo apt-get install flex回车。安装这个后就可以通过了,生成Makefile文件以及其他配置文件。

第二步,make编译过程中也遇到了一个错误:make:yacc: 命令未找到。yacc(Yet Another Compiler Compiler)是unix/linux上用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器使用C语言写成的语法解析器(Parser),需要与词法分析器lex一起使用,再把两部分产生出来的C程序一并编译。解决这个问题的办法是:安装bison,关于bison的详细资料,这儿不啰嗦了。sudo apt-get install bison。还要注意一个问题,在编译的时候可能有一些文件有权限要求,所以最好使用sudo make命令。

第三步,make install 安装。这一步倒没出现问题。不过也最好使用sudo make install 吧。

接下来就是使用这个libpcap库了。

 

在安装成功后,接下来在使用该库编译或者执行编译之后的可执行文件时,或许还会遇到如下的问题:

1. 编译时:比如,

gcc  packet.o  -lpcap -lpthread  /* -lpcap是用于调用libpcap库的,所以不要忘了添加上。*/
/usr/local/lib/libpcap.so: undefined reference to `pcap_parse’
collect2: ld returned 1 exit status

对于这样的错误信息,首先确认一下是否安装了libpcap-dev,如果没有可以先安装一下:sudo apt-get install libpcap-dev;我尝试了一下安装这个以后问题并没有解决,但是我不确定下面的方法是不是和这一步有关系,我是先尝试这个方案,最后不行。

然后下面的解决的办法确实让人很难想到:重新安装libpcap库。进入解压后的库目录里,首先make clean,然后再从新安装一遍:1. ./configure;2. make;3. make install;问题就解决了。这个解决方法很难让我们想到,具体是什么原因,还待研究。

2. 执行时:比如,

编译通过后生成可执行文件:a.out,然后再终端里执行:sudo ./a.out,出现如下错误信息:

error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory

解决办法是:将/usr/lib/libpcap.so库文件改一下名字,改成libpcap.so.1就可以了。当然也可以为libpcap.so.1建一个软连接:ln  -s /usr/lib/libpcap.so  /usr/lib/libpcap.so.1;这样问题就解决了。


你可能感兴趣的:(学习网络)