Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

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>