Contact me sending an e-mail (antispam defense activated) |
Title: ARP e MAC address Author: Sandro Tosi Last modified: 2007-09-01 Descrizione del protocollo ARP ------------------------------ Le interfacce ethernet sono ormai presenti ovunque in case, uffici, datacenter, etc. Ogni scheda ethernet e` identificata univocamente dal MAC address. ARP (Address Resolution Protocol) si occupa di costruire una corrispondenza tra indirizzi IP (utilizzabili al livello 3 dello stack OSI) e MAC address (utilizzabili al livello 2, data-link). Ogni qual volta si voglia inviare un pacchetto IP verso un host che appartiene alla nostra stessa sottorete, viene consultata la cache ARP (mantenuta per efficienza): se una corrispondenza esiste (abbiamo gia` un MAC address per quell'IP) allora possiamo inviare direttamente il pacchetto, altrimenti, dobbiamo scoprire il MAC address: ecco come fa ARP. Viene inviato un pacchetto, detto ARP-Request, in broadcast su tutta la rete, specificando i propri indirizz IP e MAC e l'IP dell'host di cui cerchiamo il MAC address. Questo, dal momento che dispone del MAC dell'host che ha iniziato il protocollo (e` dentro l'ARP-Request), risponde con un ARP-Response, in cui indica il proprio MAC. A questo punto, i due host possono iniziare a colloquiare tra loro. Ovviamente, se l'host non si trova nella propria sottorete (e questo e` dato da IP+SubNetMask) il pacchetto viene inviato al default gateway, di cui dobbiamo conoscere il MAC address etc etc... ARP su Linux ------------ Per conoscere il proprio MAC address, si puo` usare il comando ifconfig: # ifconfig eth0 | grep HWaddr eth0 Link encap:Ethernet HWaddr 00:E0:4C:90:5E:46 (il MAC address e` anche detto hardware address) Per interrogare la ARP cache si deve usare il comando arp: # arp -a ? (192.168.167.158) at 00:0D:60:10:DF:B5 [ether] on eth1 Per ottenere il MAC address di un host ancora sconosciuto, si puo` fare: - arping <ip host> un ping appositamente studiato per ARP - ping <ip host> e` il classico ping: per poter inviare un pacchetto ICMP verso un host e` necessario prima saperne il MAC address... - ping <broadcast lan ip> consente di ottenere tutti i MAC address degli host nella propria sottorete. arpwatch e` un programmino utile per evitare attacchi di sicurezza come arp-spoofing e man-in-the-middle. Cambiare il MAC address ----------------------- Ma se invece un po' pirati lo siete e volete mettere in pratica degli attacchi basati su ARP, allora potrebbe essere "comodo" cambiare il MAC address della propria scheda di rete; per fare cio`, e se il NIC lo consente, ifconfig e` in grado di svolgere questo compito. Altrimenti, ecco qui un programmillo in C che fa proprio al caso vostro: <code> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #include <unistd.h> struct ifreq scheda; main() { int s,i; u_char indirizzo[6] = "\0\0\x0c\x07\xac\0"; u_char *a; a = indirizzo; s = socket (AF_INET, SOCK_DGRAM,0); sprintf(scheda.ifr_name,"eth0"); ioctl(s,SIOCGIFHWADDR, &scheda); for (i=0 ; i<6; i++) { i[scheda.ifr_hwaddr.sa_data] = i[a]; } ioctl(s,SIOCSIFHWADDR, &scheda); } </code> |