echospoof.c
Home
Projects
 0xC0D3
arpgen.c
arpgenclient.c
arpgenserver.c
echospoof.c
headers.c
asmwrite.s
asmhello.s

#include <libnet.h>
#include <stdio.h>
#include <unistd.h>

void help();
int main (int argc, char **argv)
{
	u_long src_ip, dst_ip;
	u_char *packet;
	int socket, pktsize, confirm;
	char err_buff[LIBNET_ERRBUF_SIZE], c;

	if (argc == 1) {
		help();
		exit(-1);
	}

	while ((c = getopt(argc, argv, "d:s:")) != EOF) {
		switch (c) {
			case 'd':
				if (!(dst_ip = libnet_name_resolve(optarg, LIBNET_RESOLVE))) {
					libnet_error(LIBNET_ERR_FATAL, "Bad destination IP Address: %s\n", optarg);
				}
				break;
			case 's':
				if (!(src_ip = libnet_name_resolve(optarg, LIBNET_RESOLVE))) {
					libnet_error(LIBNET_ERR_FATAL, "Bad source IP Address: %s\n", optarg);
				}
				break;
		}
	}

	if (!src_ip || !dst_ip) {
		help();
		exit(-1);
	}
		
	pktsize = LIBNET_IP_H + LIBNET_ICMP_ECHO_H;

	libnet_init_packet(pktsize, &packet);

	if (packet == NULL) {
		libnet_error(LIBNET_ERR_FATAL, "Cannot allocate memory for packet.\n");
		exit(-1);
	}

	socket = libnet_open_raw_sock(IPPROTO_RAW);
	if (socket == -1) {
		libnet_error(LIBNET_ERR_FATAL, "Cannot open network.\n");
		exit(-1);
	}

	libnet_build_ip(ICMP_ECHO_H, IPTOS_LOWDELAY | IPTOS_THROUGHPUT, 242, 0, 48, IPPROTO_ICMP, src_ip, dst_ip, NULL, 0, packet);

	libnet_build_icmp_echo(ICMP_ECHO, 0, 242, 5, NULL, 0, packet + LIBNET_IP_H);

	if (libnet_do_checksum(packet, IPPROTO_ICMP, LIBNET_ICMP_ECHO_H) == -1) {
		libnet_error(LIBNET_ERR_FATAL, "Cannot compute checksum.\n");
		exit(-1);
	}

	confirm = libnet_write_ip(socket, packet, pktsize);

	if (confirm < pktsize) {
		libnet_error(LIBNET_ERR_FATAL, "libnet_write_ip wrote 0x%x bytes out of 0x%x expected.\n", confirm, pktsize);
	} else {
		printf("Sent ICMP_ECHO, wrote 0x%x bytes.\n", pktsize);
	}

	libnet_destroy_packet(&packet);
	return 0;
}

void help(void) {
	printf("ICMP_ECHO Spoofer, written by Javaman.\n");
	printf("Requires libnet.\n");
	printf("Options:\n");
	printf("\t-d\tDestination IP\n");
	printf("\t-s\tSource IP\n");
}