Wireshark Capture

210301_icmp.pcapng

Code Implementation

struct icmp *p;
char buffer[sizeof(struct icmp)];
memset(buffer, 0x00, sizeof(struct icmp));
struct iphdr ipv4_h;
ipv4_h = prepare_empty_ipv4();
ipv4_h = ipv4_set_protocol(ipv4_h, IPPROTO_ICMP);
ipv4_h = ipv4_set_saddr(ipv4_h, inet_addr(icmp_src_ip));

//modify icmp_src_ip, increment 1.
//next_ip_addr(icmp_src_ip, 1);

ipv4_h = ipv4_set_daddr(ipv4_h, inet_addr(icmp_dest_ip));
p = (struct icmp*) buffer;
p->icmp_type = ICMP_ECHO;
p->icmp_code = 0;
p->icmp_cksum = 0;
p->icmp_seq = htons(icmp_produced);
p->icmp_id = getpid();
p->icmp_cksum = in_cksum((u_short*) p, sizeof(struct icmp));
ipv4_h = ipv4_add_size(ipv4_h, sizeof(struct icmp));
char *packet = packet_assemble(ipv4_h, p, sizeof(struct icmp));

send_packet(sock, ipv4_h, packet, g_icmp_now_port);

How it works