ARP – teoria i praktyka

Dziś pora na kolejne z podstawowych narządzi administratora sieci. Tym razem będzie to program do umożliwiający podejrzenie co dzieje się na styku warstwy drugiej i trzeciej modelu OSI, czyli ARP. Protokół ARP jest powszechny i w praktyce niezbędny do działania sieci opartych o adresację IP i MAC adresy, więc program o tej samej nazwie znajduje się praktycznie w każdym systemie. Działanie pokażę na przykładzie windowsowej implementacji. Zacznijmy jednak od podstaw

Co to jest i jak działa ARP

ARP to skrót od Address Resolution Protocol, czyli w (po)wolnym tłumaczeniu protokół rozwiązywania adresów, co w jeszcze wolniejszym tłumaczeniu oznacza zbiór zasad pozwalających na przetłumaczenie adresu sprzętowego (MAC) na adres wyższej warstwy czyli IP. Jeżeli jakiekolwiek urządzenia zamierza pogadać z innym w LAN-ie, a wcześniej tego nie robiło, rozsyła do wszystkich zapytanie „kto ma taki adres IP?” (jest to broadcast warstwy drugiej, czyli na adres FF:FF:FF:FF:FF:FF). Z reguły dostanie wtedy informacje zwrotną od odpytywanego urządzenia wraz z jego fizycznym adresem. Oba adresy wpisywane są do pamięci lokalnej pod postacią tablicy ARP, aby nie trzeba był za każdym razem dopytywać się o adresy, a tym samym zmniejszyć ruch w sieci. Teoretycznie możliwa jest rezygnacja z wykorzystywania protokołu ARP w sieci, aby całkowicie wyeliminować rozgłaszanie ramek, ale trzeba wtedy ręcznie utrzymywać tablicę ARP na każdym urządzeniu z osobna.
Wszystko jest proste gdy mamy do czynienia z jedną siecią i komunikujemy się w jej obrębie, sprawa się nieco komplikuje gdy komputery próbuja pogadać z innymi w innych sieciach, gdzie po drodze znajdują się routery. W przypadku gdy urządzenie inicjujące zapytanie wie, ze komputer z ktorym sie probuje kontaktowac nie znajduje sie w pobliżu (w tej samej domenie rozgłoszeniowej) zapytanie ARP wysyła do kogoś kto musi być zorientowany gdzie się docelowy komputer znajduje, czyli do domyślnej bramy. Brama potrafi routować , więc nawet jeżeli nie wie dokładnie gdzie jest szukane urządzenie to przynajmniej wie kogo można o to spytać (ot, ten cały routing). Komputer wysyłający zapytanie ARP nie będzie więc dodawał, żadnych wpisów do swojej tablicy ARP, zrobi to tylko urządzenie, które może z docelowym urządzeniem komunikować się bezpośrednio w warstwie drugiej.

Ze względu na to, że sieć to przeważnie żywy organizm, a adresy urządzeń mogą się często zmieniać, wpisy w tablicy ARP muszą być co jakiś czas odświeżane, jeżeli jest on jakiś czas nieużywany staje się „przeterminowany” i przy próbie kolejnego kontaktu zapytanie ARP musi zostać wysłane ponownie.

ARP w praktyce

W systemach Windows mamy dwa podstawowe narzędzia do sprawdzania i modyfikacji wpisów ARP. Prosty arp i nieco bardziej wszechstronny netsh.

Wyświetlanie wpisów tablicy ARP

Najczęściej przyjdzie nam sprawdzać co znajduje się w tablicy. Służą do tego polecenie

arp -a

netsh interface ipv4 show neighbors

Jeżeli chcecie zobaczyć więcej, włącznie z niekompletnymi i przestarzałymi danymi to przyda się

arp -av

netsh interface ipv4 show neighbors level=verbose

Zatrzymajmy się tu na chwilę i przeanalizujmy wyniki.

C:\>arp -av

Interface: 127.0.0.1 — 0x1
Internet Address Physical Address Type
224.0.0.2 static

Interface: 192.168.1.10 — 0x3
Internet Address Physical Address Type
192.168.1.1 00-00-00-00-00-00 invalid
192.168.1.2 00-00-00-00-00-00 invalid
192.168.1.3 00-00-00-00-00-00 invalid
192.168.1.19 00-00-00-00-00-00 invalid
192.168.1.254 01-21-fa-da-31-01 dynamic
192.168.1.255 ff-ff-ff-ff-ff-ff static
224.0.0.2 01-00-5e-00-00-02 static
255.255.255.255 ff-ff-ff-ff-ff-ff static

C:\>netsh interface ipv4 show neighbors

Interface 1: Loopback Pseudo-Interface 1

Internet Address Physical Address Type
——————————————– —————– ———–
224.0.0.2 Permanent

Interface 3: Ethernet

Internet Address Physical Address Type
——————————————– —————– ———–
192.168.1.1 00-00-00-00-00-00 Unreachable
192.168.1.2 00-00-00-00-00-00 Unreachable
192.168.1.3 00-00-00-00-00-00 Unreachable
192.168.1.19 Unreachable Incomplete
192.168.1.254 01-21-fa-da-31-01 Reachable
192.168.1.255 ff-ff-ff-ff-ff-ff Permanent
224.0.0.2 01-00-5e-00-00-02 Permanent
255.255.255.255 ff-ff-ff-ff-ff-ff Permanent

W zależności od tego jakiej komendy użyjemy dostaniemy nieco inne opisy. Pary adresów muszą być takie same w obu przypadkach, lecz różnie się nieco ich status. Mamy dwa podstawowe typy: dynamiczne, czyli wprowadzone do tablicy automatycznie przez działanie protokołu ARP oraz statyczne – wprowadzone ręcznie.
Statyczne oznaczone są jako „Static” lub „Permanent”, dynamiczne i aktywne to „Dynamic” lub „Reachable”. Wpisy starsze i niepotwierdzone będą po prostu widniały jako „Invalid”, „Unreachable” lub „Incomplete”. Zauważcie również, że tablica ARP tworzona jest dla każdego interfejsu z osobna.

Czyszczenie wpisów ARP

Tablica ARP, może czasem, w wyniku jakiegoś błędu, zawierać niepoprawne dane, aby sobie z tym poradzić najlepiej całkiem ją przeładować kasując wszystkie wpisy. Nie bez powodu jest to jeden z kroków, które Windows wykonuje gdy każecie mu naprawić łącze.

arp -d *

netsh interface ip delete arpcache

Dodawanie statycznych wpisów ARP

Czasem istnieje tez potrzeba ręcznego ustawienia wpisów, na przykład aby zabezpieczyć się przed atakami wykorzystującymi APR spoofing

arp -s <adres IP> <adres MAC>

netsh interface ip add neighbors <nazwa lub ID interfejsu> <adres IP> <adres MAC>

Do czego może się nam ARP przydać

Oprócz kluczowej funkcji ważnej dla komunikacji w sieci LAN, ARP może nam się przydać również w inny sposób. Możemy w nieinwazyjny sposób dowiedzieć się jakie inne urządzenia są obecne w sieci na poszczególnych interfejsach. Nie trzeba skanować, pingować i podążać za kabelkami. Urządzenia, które podłączają się do sieci rozgłaszają swoje dane podczas pierwszej komunikacji, a inne dodają je do swoich tablic. Poprzez analizę pakietów ARP krążących w sieci możemy bezbłędnie określić jakie urządzenie routujące znajdują się w tej samej sieci.

Dzięki ARP mamy również kolejną z metod na poznanie adresu MAC komputera zdalnego, bez potrzeby używania bardzie wyrafinowanych sposobów. MAC może nam się przydać np do skonfigurowania Wake on LAN.

Na koniec ciekawostka, ponieważ ARP odpowiada również za jeden z tych problemów, które nie są (może) ważne, ale irytują samą swoją obecnością. Zauważyliście, że gdy pingujecie po raz pierwszy urządzenie z innej podsieci, nie dostajecie odpowiedzi na pierwszy ping? Dzieje się tak gdy któryś z routerów po drodze nie ma w swojej tablicy ARP wpisów dotyczących pingowanego urządzenia. Nie chodzi tu nawet o to, że wydłuża się czas dostarczenia pakietu – ping request jest po prostu odrzucany. Z tego względu niektóre implementacje ping, na przykład opisywany PsPing traktują pierwsze pakiety jako „rozgrzewkę” i nie biorą ich pod uwagę w podliczaniu statystyk.

Jeśli znacie jeszcze jakieś inne zastosowania ARP dajcie znać w komentarzach.

Przeczytaj także...

5 komentarzy

  1. Anonim napisał(a):

    Fajnie. Dzięki 🙂

  2. A6RV2o napisał(a):

    Arp pięknie działa w programie netcut. Odcinasz zamulacza internetowego w lanie i po sprawie.

    • Dariusz Góra napisał(a):

      ta, ale trzeba pamiętać, że ARP spoofing to broń obosieczna. Wystarczy zacząć generować fałszywe ramki ARP z losowymi MAC adresami i NetCut leży 😛

  3. Klaudia M napisał(a):

    Obecnie jestem w technikum teleinformatycznym i takie jasne przedstawienie arp jest genialnym wstępem do dalszego zgłębiania info 😉 Bardzo klarownie wyłożone. Dzięki za wpis :).

  4. bartek napisał(a):

    W artyule jest blad.

    Nie z warstwy 2 na 3, tylko z 3 na 2 !!!

Dodaj komentarz