Időzítés és teljesítmény

Az Nmap fejlesztésének legfontosabb szempontja a teljesítmény. Egy alapértelmezett letapogatás (nmap <gépnév>) egy helyi hálózaton lévő gépen nagyjából 0.2 másodpercig tart. Ez épp egy pislogásnyi idő, amely azonban egyre nő, ahogy növekszik a célpontként meghatározott gépek száma. Továbbá bizonyos letapogatási formák, mint például az UDP letapogatás, vagy a változat érzékelés számottevően megnövelik a letapogatás időtartamát. Ugyanilyen hatása van bizonyos tűzfal beállításoknak, különösen ha korlátozták az egységnyi idő alatt kibocsátható válaszok számát. Bár az Nmap ezeknek a letapogatásoknak a felgyorsítására sok párhuzamosítást és fejlett eljárásokat használ, a felhasználó alapjaiban befolyásolhatja az Nmap működését. Szakértő felhasználók gondosan összeállított Nmap parancsokkal rövid idő alatt megszerezhetik a számukra fontos információkat.

A letapogatási idő csökkenthetők a nem kritikus tesztek elhagyásával és az Nmap legfrissebb változatának telepítésével (gyakran történnek teljesítményt növelő változtatások). Számottevő javulás érhető el az időzítési paraméterek helyes megválasztásával is. Ezek a paraméterek az alábbiakban találhatóak.

Néhány paraméternél használható a time kiegészítés is. Alaphelyzetben ez milliszekundumban értendő, de az érték után írt 's’, ‘m’ vagy ‘h’ karakterekkel megadhat másodperces, perces vagy órás időtartamot is. Például a --host-timeout paraméternek átadott 900000, 900s és 15m értékek mind ugyanazt jelentik.

--min-hostgroup <méret>; --max-hostgroup <érték> (A párhuzamosan letapogatható állomások száma)

Az Nmap képes kapuletapogatást és változat érzékelést végezni egyszerre több állomáson is. Az Nmap ezt úgy csinálja, hogy az IP tartományt csoportokra osztja és egyszerre tapogat le egy csoportot. Általában a nagyobb csoportok hatékonyabbak. A hátránya, hogy az egyes állomásokhoz tartozó eredmények csak akkor érhetők el, ha végetért a teljes csoport letapogatása. Tehát ha az Nmap 50-es csoportmérettel lett elindítva, a felhasználó addig nem kap semmilyen eredményt (kivéve a bőbeszédű üzemmód frissítési információit), amíg az első 50 állomás letapogatása el nem készült.

Ennek a konfliktusnak a feloldására az Nmap egy kompromisszumos megoldást használ. Kezdésként csak egy 5 elemből álló csoportot hoz létre, így az első eredmények gyorsan megérkeznek. Ezután a csoportméretet folyamatosan növeli, akár 1024-ig. A kezdeti csoportméret pontos értéke a megadott paraméterektől függ. A hatékonyabb működés érdekében az Nmap nagyobb csoportokat hoz létre az UDP letapogatásoknál, illetve a csak néhány TCP kaput érintő letapogatásoknál.

Ha a --max-hostgroup paraméterben megadta a maximális csoportméretet, az Nmap ezt nem fogja túllépni. Ha megadja a --min-hostgroup paramétert, az Nmap megpróbálja a csoportméretet efölött tartani. Az Nmap kialakíthat kisebb csoportot is a megadottnál, ha nem áll rendelkezésre elegendő állomás a megadott minimális csoportméret létrehozásához. Megadható mindkét határérték is, hogy a csoportméret egy meghatározott sávban maradjon, de erre ritkán van szükség.

Ezeknek a paramétereknek nincs hatásuk a letapogatásnak abban a részében, mikor még csak az állomások felderítése történik. Ebbe beletartozik az egyszerű visszhang letapogatás is(-sP). Az állomások felderítése mindig nagy csoportokban történik a sebesség és a pontosság növelésének érdekében.

Ezeknek a paramétereknek az elsődleges haszna egy megfelelő méretű minimális csoprt létrehozása, így a teljes letapogatás gyorsabban lefut. Egy megszokott választás a 256-os csoport, így egy hálózat C osztályú blokkokban tapogatható le. Sok kaput tartalmazó letapogatásnál ezt a számot nem célszerű túllépni. Ha a letapogatás csak néhány kapura korlátozódik, a csoportméret akár 2048-ig (vagy tovább) is növelhető.

--min-parallelism <szám>; --max-parallelism <szám> (Párhuzamos próbák beállítása)

Ezekkel a paraméterekkel meghatározható, hogy az állomások egy csoportja felé párhuzamosan hány próba küldhető. Ez a kapuk letapogatására és az állomások felderítésér egyaránt vonatkozik. Alapesetben az Nmap a hálózat teljesítménye alapján kiszámítja az ideális - de folyton változó - párhuzamosság mértékét. Ha az átvitel során csomagvesztés alakul ki, az Nmap lassít és kevesebb próbát küld ki. Az ideális próbaszám a hálózat minőségének javulása alapján lassan emelkedik. Ezekkel a paraméterekkel egy minimum és egy maximum határt szabhat ezeknek az értékeknek. Ha a hálózat megbízhatatlannak bizonyul, a párhuzamosság értéke akár 1-re is csökkenhet, míg tökéletes feltételek esetén a párszázas értéket is elérheti.

A legáltalánosabb felhasználás, mikor a --min-parallelism értékét egynél magasabbra állítják, hogy felgyorsítsák a gyengébb teljesítményű állomások vagy hálózatok letapogatását. Ezzel a paraméterrel eléggé kockázatos játszani, mert egy túl magas érték ronthatja a pontosságot. Ennek a paraméternek az állításával korlátozzuk az Nmap azon képességét, hogy a hálózat paraméterei alapján dinamikusan szabályozza a párhuzamos működést. A 10-es érték elég jó lehet, de érdemesebb ezt a paramétert csak a legvégső esetben beállítani.

A --max-parallelism paraméter szintén beállítható 1-re, ezzel megakadályozható, hogy az Nmap egyszerre egynél több próbát küldjön a célpont felé. Ez jól használható a --scan-delay paraméterrel együtt (lásd később), bár ez utóbbi önmagában is jól használható.

--min-rtt-timeout <idő>, --max-rtt-timeout <idő>, --initial-rtt-timeout <idő> (Próbák érvényességi ideje)

Az Nmap kezel egy futó időzítőt annak meghatározására, hogy mennyi ideig várjon egy próba esetén a válaszra, mielőtt feladná vagy újra megpróbálná. Ennek a kiszámítása azok alapján történik, hogy az előző próbákra mennyi idő alatt érkezett válasz. Ha a hálózati késleltetés jelentős és folyton változik, ez az érték akár néhány másodpercre is nőhet. Az érték indulhat egy magasabb szintről is és egy nem válaszoló állomás esetén ezen a szinten is marad.

Az alapértelmezettnél alacsonyabb --max-rtt-timeout és --initial-rtt-timeout érték jelentősen lerövidíti a letapogatás idejét. Ez különösen igaz a visszhang nélküli (-PN) letapogatásoknál és az erős tűzfallal védett hálózatoknál. Azonban nem szabad túl agresszíven gondolkodni. Túl alacsony értéknél a letapogatási idő meg is nőhet, mivel a próbák ideje lejár és ismétlésre kerülnek, mialatt az előző próbákra adott válaszok még úton vannak visszafelé.

Ha az összes állomás egy helyi hálózaton található, 100 milliszekundum --max-rtt-timeout érték eléggé agresszív. Ha menet közben útválasztó is található, érdemesebb először az ICMP ping eszközzel, vagy más csomagösszeállító programmal (például hping2) letesztelni a hálózat minőségét. Válassza ki 10 csomagból a leghosszabb válaszidejűt. Az --initial-rtt-timeout értéke lehet ennek a duplája, a --max-rtt-timeout pedig a három- vagy négyszerese. A maximum RTT értékét általában nem érdemes 100 milliszekundumnál kisebbre és 1 másodpercnél nagyobbra választani.

A --min-rtt-timeout egy ritkán használt paraméter, de hasznos lehet, ha a hálózat annyira megbízhatatlan, hogy az Nmap alapértékei is túl agresszívnek bizonyulnak.

--max-retries <próbák> (Hányszor küldje újra egy kapura a letapogatási próbát)

Ha az Nmap nem kap választ aegy letapogatási próbára, ez jelentheti azt, hogy a kaput tűzfallal szűrik, vagy a válasz elveszett a hálózatban. De jelentheti azt is, hogy a kapu forgalma limitált és átmenetileg nem tud válaszolni. Így az Nmap ismét elküldi a próbát. Ha az Nmap gyenge hálózati teljesítményt érzékel, ezt többször is megismételheti mielőtt feladná a próbálkozást. Bár ez javítja a pontosságot, de egyben elnyújtja a letapogatás idejét is. Ha a teljesítmény fontos szempont, a letapogatás felgyorsítható az újrapróbálkozások számának korlátozásával. Megadhat akár --max-retries 0 értéket is, hogy megakadályozza az újrapróbálkozást, azonban ez ritkán ajánlott.

Az alapérték (ha nem használ -T sablont) 10 ismétlés. Ha a hálózat megbízható és a célállomás forgalmát nem szabályozták, az Nmap általában csak egyszer ismétli meg a próbát. Így a legtöbb célpont letapogatására nincs hatással, ha a --max-retries értékét például 3-ra csökkenti. Ilyen alacsony értékek csak a lassú (korlátozott) célállomások letapogatását gyorsítják fel. Mivel adatokat veszíthet azzal, ha az Nmap korábban feladja egy kapu letapogatását, ezért hasznosabb a --host-timeout paraméter időzítésének lejártát megvárni és elveszteni a célponttal kapcsolatos valamennyi adatot, mint hiányos adatokkal dolgozni.

--host-timeout <idő> (Lassú célpontoknál ennyi idő után feladja a próbálkozást)

Néhány állomás letapogatása hosszú idő vesz igénybe. Ezt okozhatja gyenge vagy megbízhatatlan hálózati eszköz vagy program, a forgalom szabályozása, vagy egy szigorú szabályokkal rendelkező tűzfal. A letapogatott állomások leglassabb néhány százaléka emésztheti fel a letapogatási idő nagyrészét. Néha jobb csökkenteni az időveszteséget és átugrani az ilyen célpontokat már az elején. Adja meg a --host-timeout paraméterben azt a maximális időt, amennyit hajlandó egy-egy állomás válaszára várni. Hasznos lehet a 30m beállítás, így az Nmap nem tölt fél óránál többet egy állomás vizsgálatával. Mivel ezalatt az Nmap más állomásokat is vizsgálni tud, ezért ez a fél óra nem tekinthető teljes veszteségnek. Ha egy állomásnak lejárt az időzítése, az Nmap kihagyja a listából. Nen készül kapulista, nincs operációs rendszer felderítés és változat érzékelés sem.

--scan-delay <idő>; --max-scan-delay <idő> (A próbák közti késleltetés)

Ezzel a paraméterrel utasíthatja az Nmap programot, hogy a célpont felé küldendő próbák között a megadott időtartamot várjon. Ez különösen hasznos olyan célpontok esetében, amelyeknek forgalma szabályozott. A Solaris állomások (sok mással egyetemben) például az UDP letapogatási próbákra másodpercenként csak egy ICMP választ küldenek. Minden további elküldött próba csak veszteség. A --scan-delay értékének 1s-os beállításával az Nmap lelassítható erre a sebességre. Az Nmap megpróbálja érzékelni a forgalomszabályzást és pontosan beállítani a próbák közti késleltetést, azonban nem okoz gondot az érték kézzel történő megadása sem.

Amikor az Nmap növeli a próbák közti késleltetést, hogy megbirkózzon a forgalomszabályzással, a letapogatás drámaian lelassul. A --max-scan-delay paraméterrel megadhatja a két próba közti legnagyobb megengedett késleltetést. Ha ezt az értéket túl alacsonyra választja, az feleslegesen újraküldött csomagokat generál, ami egy szigorú forgalomkorlátozással működő állomásnál kihagyott kapukhoz vezethet.

A --scan-delay paraméter másik felhasználása a küszöbérték figyelés alapján működő behatolás érzékelő és megelőző rendszerek (IDS/IPS) megtévesztése.

--defeat-rst-ratelimit

Sok állomás hosszú késleltetésű forgalomszabályzást használ a kiküldhető ICMP hibaüzenetek (például kapu nem elérhető) mennyiségének korlátozására. Néhány rendszer ugyanilyen korlátozásokat használ az RST (reset) csomagok esetébenis. Ez drámaian lelassítja az Nmap működését, mivel megpróbál alkalmazkodni ehhez a korlátozáshoz. A --defeat-rst-ratelimit paraméterrel utasíthatja az Nmap programot, hogy hagyja figyelmen kívül az ilyen korlátozásokat (például a SYN letapogatásnál, mely a nem válaszoló kapukat nem nyitott állapotúként kezeli).

Ennek a paraméternek a használata csökkenti a pontosságot, hiszen néhány kapu elérhetetlennek bizonyul, mivel az Nmap nem vár eléggé sokáig a korlátozott RST válaszra. Egy SYN letapogatásnál a válasz nélküli kapuk jelölése szűrt lesz ahelyett, hogy az RST csomag megvárásával zárt jelölést kapna. Ez a paraméter hasznos lehet akkor, ha csak a nyitott kapuk érdekesek és nem kell különbséget tenni a zárt és a szűrt kapuk között.

-T <paranoid|sneaky|polite|normal|aggressive|insane> (Időzítési sablon)

Bár az előzőekben tárgyalt időzítési paraméterek eléggé hatékonyak és eredményesek, de néhány felhasználó túl bonyolultnak találhatja őket. Ráadásul a megfelelő értékek kiválasztása gyakran hosszabb idő igényel, mint az optimalizálni kívánt letapogatási művelet maga. Az Nmap felkínál egy egyszerűbb megközelítést is hat időzítési sablon segítségével. Ezeket megadhatja a -T paraméterrel és a számukkal (0–5) vagy a nevükkel. A sablonok nevei: paranoid (0), trükkös [sneaky]) (1), udvarias [polite] (2), normál [normal] (3), agresszív [aggressive] (4) és rült [insane] (5). Az első kettő a behatolásérzékelők megtévesztésére szolgál. Az udvarias mód lassú letapogatást végez kevesebb sávszélességet, valamint a célállomáson kevesebb erőforrást használva. A normál mód az alapértelmezett, így a -T3 paraméter megadása semmilyen változást nem idéz elő. Az agresszív mód felgyorsítja a letapogatást azt feltételezve, hogy gyors és megbízható hálózatot használ. Végül az őrült mód azt feltételezi, hogy egy különösen gyors hálózatot használ és a sebesség érdekében hajlandó feláldozni valamennyit a pontosságból.

Ezekkel a sablonokkal megadható, hogy a letapogatás mennyire legyen agresszív, de meghagyja a lehetőséget az Nmap programnak, hogy az időzítéseket maga álltsa be. A sablonok ezen kívül elvégeznek néhány olyan sebesség beállítást, melyek önálló paraméterként jelenleg nem adhatók meg. Például a -T4 paraméter megakadályozza, hogy a dinamikusan változó letapogatásikésleltetés a TCP kapukon meghaladja a 10 milliszekundumot, míg a -T5 paraméter ugyanezt az értéket 5 milliszekundumra korlátozza. A sablonok mellett továbbra is használhatóak az egyedi időzítési paraméterek és ezek minden esetben felülbírálják a sablonokban beállított alapértékeket. Modern és megbízható hálózatok letapogatása esetén ajánlott a -T4 paraméter használata. Tartsa meg ezt a paramétert még akkor is, ha egyedi időzítési paramétereket használ, így kihasználhatja a sablonban lévő kisebb extra optimalizációt is.

Ha tisztességes szélessávú vagy ethernet kapcsolatot használ, javasolt a -T4 paraméter állandó használata. Néhányan szeretik használni a -T5 paramétert, ám ez sok esetben túl agresszív lehet. Vannak akik a -T2 paramétert szeretik használni, mert azt gondolják, hogy így kisebb valószínűséggel döntik romba a célpontot, vagy mert magukat általában udvarias embernek gondolják. Ők azonban gyakran nem veszik észre, hogy a -Tpolite valójában milyen lassú. Ez a letapogatás tízszer hosszabb is lehet, mint egy alapértelemeztt. Az alapértelmezett időzítésnél (-T3) ritkán fordulnak elő összeomlások vagy sávszélesség problémák, ezért vatoss letapogatásnál célszerű ezt használni. Ezeknek a problémáknak a csökkentésére sokkal alkalmasabb a változat érzékelés elhagyása, mint az időzítési paraméterek állítgatása.

Bár a -T0 és -T1 paraméterek hasznosak a behatolásérzékelők megtévesztésére, de sok célgép vagy kapu esetén a letapogatási idő különösen elnyújtják. Ilyen hosszú letapogatások esetén hasznosabb az időzítési paraméterek kézzel történő beállítása, mint a -T0 és -T1 paraméterekhez tartozó konzerv értékek használata.

A T0 fő működési elve a letapogatások sorbaállítása, így egyszerre csak egy kaput tapogat le és a minden próba után vár 5 percet. A T1 és T2 beállításai hasonlóak, de a próbák között csak 15 másodpercet, illetve 0.4 másodpercet várnak. A T3 az Nmap alapértelmezett beállítása, mely már használja a párhuzamos működést is. A T4 paraméter megfelel a --max-rtt-timeout 1250 --initial-rtt-timeout 500 --max-retries 6 beállításoknak és a TCP letapogatási késleltetést 0.01 másodpercre állítja. A T5 megfelel a --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --max-retries 2 --host-timeout 15m beállításoknak és a TCP letapogatási késleltetést 5 milliszekundumra állítja.