当我使用pcap_loop捕获数据包时,为什么数据包的有效负载出错

时间:2016-08-24 08:57:47

标签: linux

我编写了一个在服务器端运行的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)
{


}

0 个答案:

没有答案