123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- --- dsniff-2.4.orig/arpspoof.c 2001-03-15 09:32:58.000000000 +0100
- +++ dsniff-2.4/arpspoof.c 2009-12-11 13:14:45.000000000 +0100
- @@ -14,6 +14,7 @@
- #include <sys/types.h>
- #include <sys/param.h>
- #include <netinet/in.h>
- +#include <netinet/if_ether.h>
-
- #include <stdio.h>
- #include <string.h>
- @@ -25,9 +26,9 @@
- #include "arp.h"
- #include "version.h"
-
- -extern char *ether_ntoa(struct ether_addr *);
- +//extern char *ether_ntoa(struct ether_addr *);
-
- -static struct libnet_link_int *llif;
- +static libnet_t *l;
- static struct ether_addr spoof_mac, target_mac;
- static in_addr_t spoof_ip, target_ip;
- static char *intf;
- @@ -41,47 +42,49 @@ usage(void)
- }
-
- static int
- -arp_send(struct libnet_link_int *llif, char *dev,
- - int op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa)
- +arp_send(libnet_t *l, int op, u_int8_t *sha,
- + in_addr_t spa, u_int8_t *tha, in_addr_t tpa)
- {
- - char ebuf[128];
- - u_char pkt[60];
- -
- + int retval;
- +
- if (sha == NULL &&
- - (sha = (u_char *)libnet_get_hwaddr(llif, dev, ebuf)) == NULL) {
- + (sha = (u_int8_t *)libnet_get_hwaddr(l)) == NULL) {
- return (-1);
- }
- if (spa == 0) {
- - if ((spa = libnet_get_ipaddr(llif, dev, ebuf)) == 0)
- + if ((spa = libnet_get_ipaddr4(l)) == -1)
- 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_autobuild_arp(op, sha, (u_int8_t *)&spa,
- + tha, (u_int8_t *)&tpa, l);
- + libnet_build_ethernet(tha, sha, ETHERTYPE_ARP, NULL, 0, l, 0);
-
- - 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));
- + libnet_addr2name4(tpa, LIBNET_DONT_RESOLVE),
- + libnet_addr2name4(spa, LIBNET_DONT_RESOLVE));
- }
- else {
- fprintf(stderr, "%s 0806 42: arp reply %s is-at ",
- ether_ntoa((struct ether_addr *)tha),
- - libnet_host_lookup(spa, 0));
- + libnet_addr2name4(spa, LIBNET_DONT_RESOLVE));
- fprintf(stderr, "%s\n",
- ether_ntoa((struct ether_addr *)sha));
- }
- - return (libnet_write_link_layer(llif, dev, pkt, sizeof(pkt)) == sizeof(pkt));
- + retval = libnet_write(l);
- + if (retval)
- + fprintf(stderr, "%s", libnet_geterror(l));
- +
- + libnet_clear_packet(l);
- +
- + return retval;
- }
-
- #ifdef __linux__
- @@ -113,13 +116,13 @@ arp_find(in_addr_t ip, struct ether_addr
- int i = 0;
-
- do {
- - if (arp_cache_lookup(ip, mac) == 0)
- + if (arp_cache_lookup(ip, mac, intf) == 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);
- + arp_send(l, ARPOP_REQUEST, NULL, 0, NULL, ip);
- #endif
- sleep(1);
- }
- @@ -136,9 +139,9 @@ cleanup(int sig)
- 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),
- + arp_send(l, ARPOP_REPLY,
- + (u_int8_t *)&spoof_mac, spoof_ip,
- + (target_ip ? (u_int8_t *)&target_mac : NULL),
- target_ip);
- sleep(1);
- }
- @@ -151,7 +154,8 @@ main(int argc, char *argv[])
- {
- extern char *optarg;
- extern int optind;
- - char ebuf[PCAP_ERRBUF_SIZE];
- + char pcap_ebuf[PCAP_ERRBUF_SIZE];
- + char libnet_ebuf[LIBNET_ERRBUF_SIZE];
- int c;
-
- intf = NULL;
- @@ -163,7 +167,7 @@ main(int argc, char *argv[])
- intf = optarg;
- break;
- case 't':
- - if ((target_ip = libnet_name_resolve(optarg, 1)) == -1)
- + if ((target_ip = libnet_name2addr4(l, optarg, LIBNET_RESOLVE)) == -1)
- usage();
- break;
- default:
- @@ -176,26 +180,26 @@ main(int argc, char *argv[])
- if (argc != 1)
- usage();
-
- - if ((spoof_ip = libnet_name_resolve(argv[0], 1)) == -1)
- + if ((spoof_ip = libnet_name2addr4(l, argv[0], LIBNET_RESOLVE)) == -1)
- usage();
-
- - if (intf == NULL && (intf = pcap_lookupdev(ebuf)) == NULL)
- - errx(1, "%s", ebuf);
- + if (intf == NULL && (intf = pcap_lookupdev(pcap_ebuf)) == NULL)
- + errx(1, "%s", pcap_ebuf);
-
- - if ((llif = libnet_open_link_interface(intf, ebuf)) == 0)
- - errx(1, "%s", ebuf);
- + if ((l = libnet_init(LIBNET_LINK, intf, libnet_ebuf)) == NULL)
- + errx(1, "%s", libnet_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));
- + libnet_addr2name4(target_ip, LIBNET_DONT_RESOLVE));
-
- 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),
- + arp_send(l, ARPOP_REPLY, NULL, spoof_ip,
- + (target_ip ? (u_int8_t *)&target_mac : NULL),
- target_ip);
- sleep(2);
- }
|