Tabulka ARP
Předpokládám, že většina z vás se již setkala s termínem vyrovnávací paměť, neboli cache. Proto jen krátce připomenu, že jde o nástroj, kterým se počítače snaží zvýšit rychlost při práci s tzv. pomalými zařízeními. Za takové pomalé zařízení lze chápat disk nebo i síťovou kartu, neboť práce s operační pamětí RAM je až o několik řádů rychlejší (např. milisekundy versus nanosekundy).
Princip je jednoduchý – určitá část objemu poslední komunikace s pomalým zařízením (např. několik desítek síťových paketů nebo pár megabytů dat čtených či ukládaných na disk) zůstává v paměti. Pokud budou opět potřeba (opakování komunikace, znovuzobrazení souboru), nejsou již načítána z pomalého zařízení, ale čtena z rychlé paměti RAM.
Tento princip se zalíbil i vývojářům jádra, kteří psali oblast práce s ARP. Řekli si, že je neefektivní zjišťovat MAC adresu náležející příslušné IP adrese před posíláním každého paketu. A proto zařídili, aby si systém poslední zjištěné adresy nějakou dobu pamatoval. Ukládá si tedy MAC adresy zařízení, s nimiž naposled komunikoval, do tabulky, v níž má ke každému také IP adresu a síťové rozhraní.
Systémovou ARP tabulku najdeme v souborovém pseudosystému /proc. Konkrétně je to soubor /proc/net/arp. Nedoporučuji jej otevírat v grafickém editoru, ale na příkazové řádce můžete klidně zadat cat /proc/net/arp.
Ukázka souboru /proc/net/arp:
IP address HW type Flags HW address Mask Device 192.168.0.28 0x1 0x2 00:30:4F:27:4B:97 * eth0 192.168.0.27 0x1 0x2 00:50:FC:06:35:A7 * eth0 192.168.0.25 0x1 0x2 00:0A:E4:55:35:6F * eth0
Výpis programu /sbin/arp:
Address HWtype HWaddress Flags Mask Iface server ether 00:30:4F:27:4B:97 C eth0 192.168.0.27 ether 00:50:FC:06:35:A7 C eth0 192.168.0.25 ether 00:0A:E4:55:35:6F C eth0
Rozsah a obsah tabulky je závislý na množství počítačů připojených do vaší sítě a intenzitě jejich vzájemné komunikace. V tabulce se udržují pouze používané hodnoty, takže se nelekněte, když na síti s 50 počítači budete mít třeba jen dva záznamy (např. server a bránu do Internetu). Podobně to bylo i u mne, kde v tabulce byla pouze brána – 192.168.0.28. Ostatní dva zapnuté počítače jsem proto (znalý jejich IP adres) pozdravil příkazem ping a hned byly do tabulky automaticky přidány.
První sloupeček tabulky obsahuje IP adresy. Ve druhém vidíme typ sítě (šestnáctkový kód 0x1 zřejmě označuje ethernet) a ve třetím pak jejich parametry. Důležitý je ovšem sloupec čtyři s MAC adresami a sloupec šest s určením, přes které rozhraní náš systém s danou adresou naposled hovořil (u mne to bylo eth0, tedy první ethernetová karta).
Příkaz ARP
Ke zjištění a úpravám obsahu ARP tabulky je možné použít program arp. V distribucích RedHat, Fedora Core, Aurox apod. jej najdeme v RPM balíku net-tools, který obsahuje také ifconfig a route, takže jej máte pravděpodobně již nainstalovaný. Jelikož jej standardně umístěn v adresáři /sbin, nemusí jej shell spuštěný pod běžným uživatelem najít v systémových cestách. Proto jej zde budu uvádět s plnou cestou.
Základní použití arp je jednoduché – stačí zadat /sbin/arp. Dostane se nám podobné tabulky (viz rámeček) jakou jsme našli v /proc/net/arp. Mírně se liší nadpisy sloupečků a třetí a čtvrtý sloupec jsou prohozeny. Co se obsahu týče, je zde snaha o polidštěnou interpretaci obsahu – místo IP adresy doménové jméno (je-li k dispozici), místo tajemného kódu 0x1 vidíme zkratku ether apod.
Jak je u textových nástrojů zvykem, lze jejich práci ovlivňovat různými přepínači. Zde vybírám ty, které se u arp týkají zobrazování tabulky:
- /sbin/arp -a – vypíše informace ve větách (BSD styl) místo tabulky;
- /sbin/arp -a 192.168.0.28 – vypíše ve větách (BSD styl) informace o zařízení s IP adresou 192.168.0.28;
- /sbin/arp -n – nebude zobrazovat doménová jména počítačů, ale jejich (číselné) IP adresy;
- /sbin/arp -v – na konec výpisu bude přidána informace o počtu položek apod.;
Dále je u arp možné vybrat, který typ sítí má být zobrazen. Slouží k tomu přepínač -H a vybrat si můžeme hned z několika typů: ARCnet (arcnet), PROnet (pronet), AX.25 (ax25) a NET/ROM (netrom). Výchozí hodnotou je ether, změnu bychom provedli např. takto: /sbin/arp -H arcnet. Pokud však zařízením tohoto typu nedisponujete, bude vám (podobně jako mně) odpovědí arp: žádná z položek (3) nevyhovuje. Možná by stálo za zmínku, že WiFi karty jsou zde považovány za typ ether.
Jak jsem již předeslal, arp umí tabulku ARP nejen zobrazovat, ale i upravovat. K tomu slouží přepínače -d a -s a použít je může pouze superuživatel (root). Např. přidání záznamu o počítači s IP adresou 192.168.0.29 a MAC adresou 00:30:4F:27:4B:98 přidáme příkazem arp -s 192.168.0.29 00:30:4F:27:4B:98. Jeho odebrání pak příkazem arp -d 192.168.0.29.
Příkaz hping2
Tento užitečný nástroj dosud není v některých distribucích zařazen. Stáhnout si jej ale můžete z jeho domovské stránky (viz Odkazy). Je tam ovšem pouze betaverze, kterou se mi nepodařilo přeložit (zkompilovat). Použil jsem proto zdrojový kód starší verze z Debianu (viz Odkazy).
Kompilace programu hping2 spočívala v příkazech ./configure a make. Potom jsem získal práva superuživatele (su) a provedl make install.
K používání hping2 potřebujeme práva superuživatele, takže se jako root příhlásíme nebo změníme identitu pomocí su - (a na výzvu zadáme heslo). Základní použití je prakticky totožné se starším bratrem – příkazem ping. Zkusil jsem tedy zadat hping2 192.168.0.28. Výsledek je ve výpisu.
HPING 192.168.0.28 (eth0 192.168.0.28): NO FLAGS are set, 40 headers + 0 data bytes len=46 ip=192.168.0.28 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.2 ms len=46 ip=192.168.0.28 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.2 ms --- 192.168.0.28 hping statistic --- 5 packets tramitted, 5 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms
Vedle mnoha shod s výstupem pingu vidíme i rozdíly. V záhlaví je např. informace o použitém síťovém zařízení (eth0), v řádcích vidíme mnohé nové údaje, na konci ovšem chybí údaj o střední odchylce (mdev). Hping 2 je ovšem mocný nástroj, na jehož popis zde nemáme dost místa. Proto jen krátce výběr z jeho přepínačů:
- hping2 -c 5 192.168.0.28 – provede právě 5 pingnutí na adresu 192.168.0.28 a ukončí činnost;
- hping2 -i 3 192.168.0.28 – pingá na adresu 192.168.0.28 v intervalu 3 sekund (normálně se ping opakuje po sekundě);
- hping2 -v 192.168.0.28 – pingá na zadanou IP a o každém kroku dává více informací (3 řádky);
- hping2 -D 192.168.0.28 – pingá na 192.168.0.28 v režimu ladění, kdy vypisuje i obsah paketů;
Hlavní síla hpingu ale spočívá v možnosti výběru protokolu, kterým budeme na vzdálený počítač pokřikovat. Zde je přehled dostupných protokolů zadávaných jako přepínač do syntaxe příkazu před cílovou adresu:
- -0 nebo --rawip – k pingání bude použito čisté (RAW) IP, doporučuji v kombinaci s -D;
- -1 nebo --icmp – k pingání bude používáno ICMP, tedy stejná metoda jako u programu ping;
- -2 nebo --udp – k pingání poslouží UDP pakety;
Závěr
Tak jsme probrali další dva zajímavé příkazy a příště se vrhneme na oblast DNS, se kterou jsme se již teoreticky seznámili v minulých dílech. Těšte se na příkazu host a nslookup.