Неправильный пакет заголовка TCP IP - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь отправить сообщение, используя заголовок 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, прежде чем я отправлю сообщение, но я не уверен в другом способе подойти к этому.

...