免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
libpcap入門--Ying is not gem!

<Kxing 原創(chuàng),水平有限、歡迎批評和指正。如需轉(zhuǎn)載請注明作者與出處>

    libpcap是一個C語言庫,其功能是通過網(wǎng)卡抓取網(wǎng)絡(luò)以太網(wǎng)中的數(shù)據(jù)包,在windows系統(tǒng)下有相應(yīng)的winpcap庫。

    要想使用這個庫自然先要知道它在哪里,怎么安裝就不廢話了。在/usr/local/lib下有l(wèi)ibpcap.a和libpcao.so,在/usr/local/include下有pcap.h,打開手冊的命令是man pcap,而不是man libpcap,如果覺得在字符模式下查看man太麻煩也可以baidu或者google一下"man pcap"會又可讀性更高的手冊。要寫一個使用libpcap的程序只需要在代碼中加上#i nclude <pcap.h>,然后在編譯時使用-lpcap選項就可以了,例如:

    $>gcc -o test1 test1.c -lpcap

    如果能正確的編譯通過使用libpcap的代碼,那么便可以進(jìn)入第二步了,寫一個最簡單的抓包程序。

    先來介紹第一個類型:pcap_t。要抓包就要首先生成一個抓包的描述符(或稱句柄),后來的很多操作都需要用這個描述符做參數(shù)。pcap_t就是由pcap.h定義的抓包描述符的類型,函數(shù)pcap_open_live返回指向該類型的指針:

    pcap_t *pd = pcap_open_live ("eth0", 68, 0, 1000, ebuf);

    其中第一個參數(shù)表示用來抓包的設(shè)備;第二個參數(shù)定義了抓包的最大字節(jié)數(shù),如果這個值小于包的大小(如定義為68,包大于68),那么則只抓這個包的前68個字節(jié);第三個參數(shù)把網(wǎng)卡設(shè)置為混雜模式,以便抓取以太網(wǎng)中的數(shù)據(jù)包;第四個參數(shù)是一個以毫秒為單位的讀取超時時間,如果設(shè)置為0則超時時間為無限大;第五個參數(shù)為出錯信息,需要這樣聲明(第一個簡單的程序不需要出錯處理,只知道這樣聲明就夠了):

    char ebuf[PCAP_ERRBUF_SIZE];

    好了,現(xiàn)在生成了一個描述符了,現(xiàn)在我們可以用它來做一點什么事情了。開始一個抓包的循環(huán),然后關(guān)閉抓包過程(釋放描述符):

    pcap_loop (pd, 7, printer, NULL);

    pcap_close (pd);

    這里的pd就是我們剛剛生成的描述符;pcap_loop的第二個參數(shù)表示抓多少個包,設(shè)置為-1表示不定義數(shù)量,抓取所有的包;第三個參數(shù)是一個回調(diào)函數(shù),每當(dāng)抓到一個數(shù)據(jù)包之后程序?qū)⒆詣诱{(diào)用這個函數(shù);第四個參數(shù)是一個指針,可以為空,將在下面詳細(xì)講解。

    下面我們來詳細(xì)的實現(xiàn)這個回調(diào)函數(shù),使其每抓到一個包則打印一次:

    void printer()
        {
                printf("A packet is captured! ");
                printf(" \n");
                return;
        }

    當(dāng)程序成功編譯以后執(zhí)行,則每抓到一個包后輸出一行"A packet is captured! ",輸出7行以后退出程序。

    這樣,一個最簡單的抓包程序誕生了!
    

參考源碼:


/**
libpcap test program

compile command:"$>gcc -o exe_file_name this_file_name -lpcap"

written by Kxing <S.Kxing@gmail.com>
Last Modified 2006-03-02
*/


#i nclude <stdio.h>
#i nclude <pcap.h>

int main (int argc, char* argv[])
{
        /*the printer running when packet have captured*/
        void printer()
        {
                printf("A packet is captured!");
                printf(" \n");
                return;
        }


        /*the error code buf of libpcap*/
        char ebuf[PCAP_ERRBUF_SIZE];
        /*create capture handler of libpcap*/
        pcap_t *pd = pcap_open_live ("eth0", 68, 0, 1000, ebuf);


        /*start the loop of capture, loop 7 times, enter printer when capted*/
        pcap_loop (pd, 7, printer, NULL);

        pcap_close (pd);

        return 0;
}



本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
linux(ubuntu) 下安裝libpcap
jNetPcap-用Java實現(xiàn)libpcap完整封裝的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)庫
使用libnet與libpcap構(gòu)造TCP/IP協(xié)議軟件
網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)庫Libpcap安裝與使用
libpcap-例程及函數(shù)說明
嵌入式開發(fā)之工具--TCPDUMP移植和使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服