[英]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.