1. 程式人生 > >Libcap的簡介及安裝

Libcap的簡介及安裝

pca apt-get 以太網 當前 upd 監控 提示 文件 wall

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

Libcap的簡介及安裝