Wireshark Capture

210301_udp.pcapng

Code Implementation

//make ip header
struct iphdr ipv4_h;
ipv4_h = prepare_empty_ipv4();
ipv4_h = ipv4_set_protocol(ipv4_h, IPPROTO_UDP);
ipv4_h = ipv4_set_saddr(ipv4_h, inet_addr(g_udp_now_src_ip));
ipv4_h = ipv4_set_daddr(ipv4_h, inet_addr(g_udp_now_dest_ip));
ipv4_h = ipv4_add_size(ipv4_h, sizeof(struct udphdr));

// make udp header 
struct udphdr *udp_h_ptr;
char buf[sizeof(struct udphdr)];
memset(buf, 0x00, sizeof(struct udphdr));
udp_h_ptr = (struct udphdr *)buf;
udp_h_ptr->checksum = 0;
udp_h_ptr->src_port = htons(0);
udp_h_ptr->dest_port = htons(g_udp_now_dest_port);
strcpy(udp_h_ptr -> data, DATA);
udp_h_ptr->len = htons(strlen(DATA));

//assembe ip part with udp.
char *packet = packet_assemble(ipv4_h, udp_h_ptr, sizeof(struct udphdr));
send_packet(sock, ipv4_h, packet, g_udp_now_dest_port);
free(packet);

How it works