123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- --- rarpd-1.1.orig/rarpd.c 1999-11-17 01:51:22.000000000 +0100
- +++ rarpd-1.1/rarpd.c 2009-12-11 14:28:32.000000000 +0100
- @@ -65,18 +65,12 @@
- #define ETHERSTRLEN sizeof("00:00:00:00:00:00")
- #define IPSTRLEN sizeof(".xxx.xxx.xxx.xxx")
-
- -#ifdef NEW_LIBNET_INTERFACE
- -#define open_link_interface libnet_open_link_interface
- -#define link_int libnet_link_int
- -#define build_arp libnet_build_arp
- -#define get_ipaddr libnet_get_ipaddr
- -#define get_hwaddr libnet_get_hwaddr
- -#define build_ethernet libnet_build_ethernet
- -#define write_link_layer libnet_write_link_layer
- -
- -/* Temporary workaround */
- -#define ARP_H LIBNET_ARP_H
- -#endif
- +struct _ipv4_arp_data_ {
- + u_char ar_sha[6]; /* sender hardware address */
- + u_char ar_spa[4]; /* sender protocol address */
- + u_char ar_tha[6]; /* target hardware address */
- + u_char ar_tpa[4]; /* target protocol address */
- +};
-
- extern char pcap_version[];
- extern int optind;
- @@ -88,7 +82,7 @@ static int vflag; /
- static char *program_name;
-
- static pcap_t *pd;
- -static struct link_int *ln;
- +static libnet_t *ld;
- static char *device, *ethers;
- struct in_addr my_ipaddr;
- static u_char my_hwaddr[ETHERADDRLEN];
- @@ -285,23 +279,34 @@ void set_arp(struct in_addr *herip, unsi
- void send_rarpreply(unsigned char *dest_hwaddr,
- unsigned char *her_hwaddr, struct in_addr *her_ipaddr)
- {
- - char ebuf[PCAP_ERRBUF_SIZE];
- - u_char buf[ARP_H+ETH_H];
- -
- - memset(buf, 0, ARP_H + ETH_H);
- -
- - /* Ethernet header */
- - build_ethernet(dest_hwaddr, my_hwaddr, ETHERTYPE_REVARP, NULL, 0, buf);
- + int c;
- + libnet_ptag_t t;
-
- /* ARP header */
- - build_arp(ARPHRD_ETHER, ETHERTYPE_IP,
- + t = libnet_build_arp(ARPHRD_ETHER, ETHERTYPE_IP,
- ETHERADDRLEN, IPADDRLEN,
- ARPOP_REVREPLY,
- my_hwaddr, (u_char *)&(my_ipaddr.s_addr),
- her_hwaddr, (u_char *)&(her_ipaddr->s_addr),
- - NULL, 0, buf + ETH_H);
- + NULL, 0, ld, 0);
- + if (t == -1) {
- + syslog(LOG_ERR, "%s: Can't build ARP header: %s", program_name, libnet_geterror(ld));
- + exit(1);
- + }
-
- - write_link_layer(ln, (const u_char *)device, buf, ARP_H + ETH_H);
- + /* Ethernet header */
- + t = libnet_build_ethernet(dest_hwaddr, my_hwaddr, ETHERTYPE_REVARP, NULL, 0, ld, 0);
- + if (t == -1) {
- + syslog(LOG_ERR, "%s: Can't build ethernet header: %s", program_name,
- + libnet_geterror(ld));
- + exit(1);
- + }
- +
- + c = libnet_write(ld);
- + if (c == -1) {
- + syslog(LOG_ERR, "%s: Write error: %s", program_name, libnet_geterror(ld));
- + exit(1);
- + }
- }
-
-
- @@ -314,11 +319,13 @@ void process_arp(u_char *user, const str
- unsigned short pro, hrd, op;
- struct in_addr her_ipaddr;
- struct libnet_arp_hdr *ap;
- + struct _ipv4_arp_data_ *ad;
- struct hostent *hp;
- char *ipp;
-
- bp += sizeof(struct libnet_ethernet_hdr);
- ap = (struct libnet_arp_hdr *)bp;
- + ad = (struct _ipv4_arp_data_ *)(bp + sizeof(*ap));
-
- pro = EXTRACT_16BITS (&ap->ar_pro);
- hrd = EXTRACT_16BITS (&ap->ar_hrd);
- @@ -331,10 +338,10 @@ void process_arp(u_char *user, const str
- /* We only answer RARP requests */
- if (op != ARPOP_REVREQUEST) return;
-
- - sha = ap->ar_sha;
- - spa = ap->ar_spa;
- - tha = ap->ar_tha;
- - tpa = ap->ar_tpa;
- + sha = ad->ar_sha;
- + spa = ad->ar_spa;
- + tha = ad->ar_tha;
- + tpa = ad->ar_tpa;
-
- if (my_ether_ntohost(toret, tha)) {
- if (vflag) {
- @@ -399,6 +406,7 @@ int main(int argc, char **argv)
- int nofork, op, pid, syslogflags;
- bpf_u_int32 localnet, netmask;
- char ebuf[PCAP_ERRBUF_SIZE];
- + char errbuf[LIBNET_ERRBUF_SIZE];
- char *cmdbuf;
- struct bpf_program fcode;
-
- @@ -446,9 +454,9 @@ int main(int argc, char **argv)
- }
- }
-
- - ln = open_link_interface(device, ebuf);
- - if (ln == NULL) {
- - syslog(LOG_ERR, "%s: %s", program_name, ebuf);
- + ld = libnet_init(LIBNET_LINK, device, errbuf);
- + if (ld == NULL) {
- + syslog(LOG_ERR, "%s: %s", program_name, errbuf);
- exit(1);
- }
-
- @@ -465,8 +473,8 @@ int main(int argc, char **argv)
- }
-
- memset(&my_ipaddr, 0, sizeof(my_ipaddr));
- - my_ipaddr.s_addr = htonl(get_ipaddr(ln, device, ebuf));
- - memcpy(my_hwaddr, (char *)get_hwaddr(ln, device, ebuf), ETHERADDRLEN);
- + my_ipaddr.s_addr = libnet_get_ipaddr4(ld);
- + memcpy(my_hwaddr, (char *) libnet_get_hwaddr(ld), ETHERADDRLEN);
-
- setuid(getuid());
-
|