簡體   English   中英

如何確定 libpcap 中的數據包協議?

[英]How determine a packet protocol in libpcap?

我想在c中編寫一個數據包嗅探器。 現在我的代碼可以計算網絡中傳輸的每個數據包。 我希望它只計算http數據包,但我不知道如何確定數據包中的數據包。這是我的代碼:

#include <stdio.h>
#include <pcap.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    char error[PCAP_ERRBUF_SIZE];
    struct bpf_program *fp;
    char filter[] = "port 80";
    bpf_u_int32 network;
    pcap_t *handle = pcap_open_live(argv[1], BUFSIZ, 0, 1000, error);
    if (handle == NULL){
        printf("Error: %s\n", error);
        return 1;
    }
    
    if(pcap_compile(handle, &fp, filter,0, network)==-1){
        fprintf(stderr, "Error:%s\n", pcap_geterr(handle));
    }   

    if(pcap_setfilter(handle, &fp)==-1){
        fprintf(stderr, "Error:%s\n", pcap_geterr(handle));
        return 1;
    }

    pcap_loop(handle, atoi(argv[2]),callback, NULL );
    return 0;

}

我的回調 function 只是計算數據包的數量。

如果 http 數據包可以在任何端口上(除非您正在測試本地 web 服務器,否則可能不會),您可以首先隔離數據包的有效負載。 https://www.devdungeon.com/content/using-libpcap-c上的“查找數據有效負載”有一個關於如何做到這一點的示例。

然后,您可以將數據有效負載的第一個字節與任何 HTTP 方法或字符串“HTTP”進行比較以捕獲響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM