如何确定 libpcap 中的数据包协议?
How determine a packet protocol in libpcap?
我想在c
中写一个数据包嗅探器。现在我的代码可以计算网络中传输的每个数据包。我希望它只计算 http
个数据包,但我不知道如何确定 packet.This 中的那些是我的代码:
#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;
}
我的回调函数只计算数据包的数量。
如果 http 数据包可以在任何端口上(除非您正在测试本地 Web 服务器,否则可能不会),您可以首先隔离数据包的有效负载。 https://www.devdungeon.com/content/using-libpcap-c 上的“查找数据有效负载”中有一个关于如何执行此操作的示例。
然后您可以将数据负载的前几个字节与任何 HTTP 方法或字符串“HTTP”进行比较以捕获响应。
我想在c
中写一个数据包嗅探器。现在我的代码可以计算网络中传输的每个数据包。我希望它只计算 http
个数据包,但我不知道如何确定 packet.This 中的那些是我的代码:
#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;
}
我的回调函数只计算数据包的数量。
如果 http 数据包可以在任何端口上(除非您正在测试本地 Web 服务器,否则可能不会),您可以首先隔离数据包的有效负载。 https://www.devdungeon.com/content/using-libpcap-c 上的“查找数据有效负载”中有一个关于如何执行此操作的示例。
然后您可以将数据负载的前几个字节与任何 HTTP 方法或字符串“HTTP”进行比较以捕获响应。