Libcap
的安装
长春工业大学 张振虎
Libpcap
简介
libpcap
是unix/linux
平台下的网络数据包捕获函数包,
大多数网络监控软件都以它为基础。
Libpcap
可以在绝大多数类unix
平台下工作.
Libpcap
应用程序框架
Libpcap
提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap
可以在绝大多数类unix
平台下工作,在windows
平台下,一个与libpcap
很类似的函数包 winpcap
提供捕获功能,其官方网站是http://winpcap.polito.it/
。
Libpcap
软件包可从
http://www.tcpdump.org/
下载,然后依此执行下列三条命令即可安装,但如果希望libpcap
能在linux
上正常工作,则必须使内核支持"packet"
协议,也即在编译内核时
打开配置选项 CONFIG_PACKET(
选项缺省为打开)
。
./configure
./make
./make install
libpcap
源代码由20
多个C
文件构成,但在 Linux
系统下并不是所有文件都用到。可以通过查看命令make
的输出了解实际所用的文件。本文所针对的libpcap
版本号为1.1.1
,网络类型为常规以太网。Libpcap
应用程序从形式上看很简单.
Libpcap
安装
以下命令适用于
ubuntu
等
deb
包管理式
linux
系统,如果是
Fedora
或
RedHat
以及
SUSE
等基於
RPM
包管理的
linux
系统可用
yum
install
代替
apt-get install
1.
安装
gcc g++
编译器
命令:
sudo apt-get install
build-essential
C
语言经典的入门例子是 *Hello World
,下面是一示例代码:
#include <stdio.h>
int main(void)
{
printf("Hello, world!/n");
return 0;
}
我们假定该代码存为文件‘hello.c’
。
要用 编译该文件,使用下面的命令: $ gcc -Wall hello.c -o hello
该命令将文件‘hello.c’
中的代码编译为机器码并存储在可执行文件 ‘hello’
中。
机器码的文件名是通过 选项指定的。该选项通常作为命令行中的最後一个参数。如果被省略,输出文件默认为
‘a.out’
。 如果当前目录中与可执行文件重名的文件已经存在,它将被复盖。 选项 开启编译器几乎所有常用的警告──
。 编译器有很多其他的警告选项,但 是最常用的。默认情况下GCC
不会产生任何警告信息。当编写 C
或 C++
程序时编译器警告非常有助于检测程序存在的问题。 本例中,编译器使用了
选项而没产生任何警告,因为示例程序是完全合法的。
要运行该程序,输入可执行文件的路径如下: $ ./hello Hello, world!
这将可执行文件载入内存,并使 CPU
开始执行其包含的指令。 路径 指代当前目录,因此 载入并执行当前目录下的可执行文件 ‘hello’
。
2.
安装
GNU M4
命令:
sudo apt-get install
m4
这个是编译flex
必备的环境,否则会提示“GNU M4 1.4 is required”
的错误
3.
安装
flex
命令:
sudo apt-get install
flex
没有flex
,直接安装libpcap
会提示“Your
operating system's lex is insufficient to compile libpcap”
错误。
4.
编译
bison
命令:
sudo apt-get install
bison
在安装flex
后直接安装libpcap
会提示“don't
have both flex and bison;reverting to lex/yacc”
错误,前面安装的是flex
,就需要搭配bison
5.
编译
libpcap
上面四步完成后,就可以使用下面三个指令安装libpcap
环境: 切换到libpcap
目录下(
具体可查看libcap
目
录下官方提供的install
文档)
./configure
make
sudo make install
6.
运行
ldconfig
,至此完成。
简单的例子测试一下libpcap
:
//device.c
#include <stdio.h>
int main(int argc,char *argv[])
{
char *dev,
errbuf[PCAP_ERRBUF_SIZE];
dev=pcap_lookupdev(errbuf);
if(dev==NULL)
{
printf(stderr,"couldn't find default device: %s/n",errbuf);
return(2);
}
printf("Device: %s/n",dev);
return(0);
}
编译指令:gcc -o device device.c -lpcap
备注:编译时要使用libpcap
的参数 -lpcap
,否则会提示“pcap_lookupdev
未定义的引用”
的错误。
运行指令:./device
在QT creator
中使用libpcap
编写代码时在头文件中引入
pcap.h
即可
.
编译时需要在
.pro
工程文件中加入选项
LIBS
+= -L/usr/local/lib
/
-lpcap