我编写了一个在服务器端运行的libpcap程序,用于测试服务器和客户端之间的TCP数据包负载。服务器和客户端之间交换的数据包是:客户端连接到服务器,然后发送5个字节的" hello"。最后,服务器发送12个字节的" hello client"回到客户端。以下是我的程序来检查数据包内容,主要是pcap_loop
。但我不知道为什么捕获的数据包的长度总是74(14 + 20 + 20 + 20)并且有效载荷内容是错误的。我使用x/100xb
检查数据包的内存, IP加法器和端口是正确的。有效载荷的记忆是:
有效载荷(20字节)
0x7ffff75d70bc:0x02 0x04 0x05 0x64 0x04 0x02 0x08 0x0a
0x7ffff75d70c4:0x00 0x32 0xfe 0x5e 0x00 0x00 0x00 0x00
0x7ffff75d70cc:0x01 0x03 0x03 0x07
#include <stdio.h>
#include <pcap.h>
#include <unistd.h>
#include <stdlib.h>
void processPacket(u_char *args, const struct pcap_pkthdr *header,
const u_char *packet);
int main(void)
{
char dev[] = "eth1";
char errBuf[PCAP_ERRBUF_SIZE];
char str[] = "port 40002";
int cnt = 5; // count of packtes
int promisc = 1;
int to_ms = 1000 * 1000;
int ret;
pcap_t *handle;
pcap_handler callback = processPacket;
struct bpf_program fp;
handle = pcap_open_live(dev, 1536, promisc, to_ms, errBuf);
if (!handle) {
exit(-1);
}
// set filter
ret = pcap_compile(handle, &fp, str, 0, 0);
if (ret < 0) {
exit(-1);
}
ret = pcap_setfilter(handle, &fp);
if (ret < 0) {
exit(-1);
}
printf("start capture\n");
// capture in loop
pcap_loop(handle, 5, callback, NULL);
return 0;
}
// callback in pcap_loop
void processPacket(u_char *args, const struct pcap_pkthdr *header,
const u_char *packet)
{
}