TCP IP标头格式错误的数据包

时间:2019-10-31 04:08:58

标签: c networking tcp ip

我正在尝试使用IP标头发送消息。这是我的IP标头

struct iphdr constructIpHeader(struct in_addr dst, char if_name[], int sockfd, int bufSzie){
    printf("constructing IP header...\n");
    struct iphdr ip_hdr;
    ip_hdr.ihl = 5;
    ip_hdr.version = 4;
    ip_hdr.tos = 0;
    ip_hdr.tot_len = htons(IPHDRSIZ + bufSzie);
    ip_hdr.id = htons(0x0400);
    ip_hdr.frag_off = htons(0x000);
    ip_hdr.ttl = 0x40;
    ip_hdr.protocol = 6;
    ip_hdr.check = 0;

    ip_hdr.saddr = get_ip_saddr(if_name, sockfd); // source ip
    ip_hdr.daddr = dst.s_addr;
    ip_hdr.check = ip_checksum(&ip_hdr, IPHDRSIZ); // checksum good
    printf("IP header complete\n");
    return ip_hdr; 
}

这就是我构造和发送数据的方式

    memset(&sk_addr,0,sk_addr_size);
    struct iphdr ip_hdr;
    ip_hdr = constructIpHeader(dst_ip, interfaceName, sockfd, strlen(buf));

    char ip_payload[IPHDRSIZ+strlen(buf)+1];
    char *ip = (char *)&ip_hdr;
    memcpy(ip_payload, ip, IPHDRSIZ);
    memcpy(&ip_payload[IPHDRSIZ], buf, strlen(buf));

    send_message(interfaceName, sk_addr, dst_mac, ip_payload, sockfd, 1, if_hwadd

这是我的Wireshark的样子 enter image description here

enter image description here

这对我来说真的很新,因此任何建议都将有所帮助。我一直在论坛上四处寻找,我认为我正确地构造了标题,这就是为什么我对为什么数据包格式错误感到困惑的原因。我以为在发送消息之前可能与memcpys有关,但是我不确定有其他方法可以解决此问题。

0 个答案:

没有答案