?? arpsender.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 + -