【发布时间】:2022-01-03 14:18:19
【问题描述】:
我不明白为什么我的以下代码不能正常工作。 当我嗅探以太网时,我收到的字节移动了 2 个字节
我用sudo sendip -p ipv4 -p udp 127.0.0.1 -d r8发送数据包到我的电脑
使用以下代码:
#include <pcap/pcap.h>
#define SIZE_ETHERNET 14
#define ETHER_ADDR_LEN 6
struct sniff_ethernet {
u_char ether_dhost[ETHER_ADDR_LEN];
u_char ether_shost[ETHER_ADDR_LEN];
u_short ether_type;
};
void packet_call_back(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) {
struct sniff_ethernet *ethernet = (struct sniff_ethernet*)(bytes);
printf("test = %#x\n", ethernet->ether_type); // print is 0x0
}
int main(void) {
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *handle = pcap_create("any", errbuf);
pcap_set_timeout(handle, -1);
pcap_loop(handle, 0, packet_call_back, NULL);
pcap_close(handle);
}
我在这里收到的 ether_type 不正确 0x0000 而不是 0x0800
但如果不是:struct sniff_ethernet *ethernet = (struct sniff_ethernet*)(bytes);
我把struct sniff_ethernet *ethernet = (struct sniff_ethernet*)(bytes + 2);
在这里一切正常,我可以轻松分析我的数据包。
我用gcc test.c -l pcap 编译
我在一个 Ubuntu 虚拟机上工作
感谢阅读
【问题讨论】: