Linux E X P R E S

Facebook

Síťové nástroje v Linuxu, 5. část

Bohdan Milar vítá všechny pravidelné i nahodilé čtenáře u pátého dílu seriálu o GNU nástrojích určených pro konfiguraci, testování, monitorování, ale hlavně používání počítačových sítí. Dnes uzavřeme oblast ARP a pingů. Článek z čísla 3/2005.


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.

Diskuze (0) Nahoru