|
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> |