Пример #1
0
/* args:	yiaddr - what IP to ping (eg. on the NETtel cb189701)
 * retn: 	1 addr free
 *		0 addr used
 *		-1 error 
 */  
int arpping(u_int32_t yiaddr, u_int32_t ip, char *arp, char *interface) {
	struct ifinfo ifbuf;

	strcpy(ifbuf.ifname, interface);
	ifbuf.addr = ip;
	ifbuf.mask = 0x0;
	ifbuf.bcast = 0x0;
	
	memcpy(ifbuf.haddr, arp, 6);
	ifbuf.flags = 0;
	
	return arpCheck(yiaddr, &ifbuf, 2);
}
Пример #2
0
int arpping(SrvInfo *psrvInfo) {
	struct ifinfo ifbuf;

	strcpy(ifbuf.ifname, psrvInfo->iface);
	ifbuf.addr = psrvInfo->ipSrv.s_addr;
	ifbuf.mask = 0x0;
	ifbuf.bcast = 0x0;

	memcpy(ifbuf.haddr, psrvInfo->macSrv, 6);
	ifbuf.flags = 0;
	
	return arpCheck(psrvInfo->id, psrvInfo->arp_ip, &ifbuf, 2, psrvInfo->arp_cip);
}
Пример #3
0
/* args:	yiaddr - what IP to ping (eg. on the NETtel cb189701)
 * retn: 	1 addr free
 *		0 addr used
 *		-1 error 
 */  
int arpping(u_int32_t yiaddr, u_int32_t ip, char *interface) {
	struct ifinfo ifbuf;
	int fd, ret;
	struct ifreq ifr;
	unsigned char sMac[6];

	ret = 1; // default action is to assign the address

	if((fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) {
		LOG(LOG_ERR, "socket failed!");
		return ret;
	}

	ifr.ifr_addr.sa_family = AF_INET;
	strcpy(ifr.ifr_name, interface);

	/* Retrieve MAC of the interface */
	if (ioctl(fd, SIOCGIFHWADDR, &ifr) == 0) {
		memcpy(sMac, ifr.ifr_hwaddr.sa_data, 6);
		close(fd);
	}
	else
	{
		close(fd);
		return ret;
	}

	strcpy(ifbuf.ifname, interface);
	ifbuf.addr = ip;
	ifbuf.mask = 0x0;
	ifbuf.bcast = 0x0;
	
	memcpy(ifbuf.haddr, sMac, 6);
	ifbuf.flags = 0;
	
	return arpCheck(yiaddr, &ifbuf, 2);
}