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

📄 arp.c

📁 一个网络工具包,可以嗅探email和http等数据包中的密码等信息.注意要先把libnet-1.0.2a.tar.gz和 libnids-1.16.tar.gz装上,不然会因为缺少库函数而无法编译和安
💻 C
字号:
/*  arp.c  ARP cache routines.    Copyright (c) 1999 Dug Song <dugsong@monkey.org>  $Id: arp.c,v 1.7 2000/06/14 06:43:31 dugsong Exp $*/#include "config.h"#include <sys/types.h>#include <sys/param.h>#include <sys/socket.h>#ifdef BSD#include <sys/sysctl.h>#include <net/if_dl.h>#include <net/route.h>#ifdef __FreeBSD__	/* XXX */#define ether_addr_octet octet#endif#else /* !BSD */#include <sys/ioctl.h>#ifndef __linux__#include <sys/sockio.h>#endif#endif /* !BSD */#include <net/if.h>#include <netinet/in_systm.h>#include <netinet/in.h>#include <netinet/if_ether.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#ifdef BSDintarp_cache_lookup(in_addr_t ip, struct ether_addr *ether){	int mib[6];	size_t len;	char *buf, *next, *end;	struct rt_msghdr *rtm;	struct sockaddr_inarp *sin;	struct sockaddr_dl *sdl;		mib[0] = CTL_NET;	mib[1] = AF_ROUTE;	mib[2] = 0;	mib[3] = AF_INET;	mib[4] = NET_RT_FLAGS;	mib[5] = RTF_LLINFO;		if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)		return (-1);		if ((buf = (char *)malloc(len)) == NULL)		return (-1);		if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {		free(buf);		return (-1);	}	end = buf + len;		for (next = buf ; next < end ; next += rtm->rtm_msglen) {		rtm = (struct rt_msghdr *)next;		sin = (struct sockaddr_inarp *)(rtm + 1);		sdl = (struct sockaddr_dl *)(sin + 1);				if (sin->sin_addr.s_addr == ip && sdl->sdl_alen) {			memcpy(ether->ether_addr_octet, LLADDR(sdl),			       ETHER_ADDR_LEN);			free(buf);			return (0);		}	}	free(buf);		return (-1);}#else /* !BSD */#ifndef ETHER_ADDR_LEN	/* XXX - Solaris */#define ETHER_ADDR_LEN	6#endifintarp_cache_lookup(in_addr_t ip, struct ether_addr *ether){	int sock;	struct arpreq ar;	struct sockaddr_in *sin;		memset((char *)&ar, 0, sizeof(ar));#ifdef __linux__	strncpy(ar.arp_dev, "eth0", sizeof(ar.arp_dev));   /* XXX - *sigh* */#endif	sin = (struct sockaddr_in *)&ar.arp_pa;	sin->sin_family = AF_INET;	sin->sin_addr.s_addr = ip;		if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {		return (-1);	}	if (ioctl(sock, SIOCGARP, (caddr_t)&ar) == -1) {		close(sock);		return (-1);	}	close(sock);	memcpy(ether->ether_addr_octet, ar.arp_ha.sa_data, ETHER_ADDR_LEN);		return (0);}#endif /* !BSD *//* 5000 */

⌨️ 快捷键说明

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