© 2013 All rights reserved.
4

Java Port Scanner

Při scanování portů zjišťujeme, které služby jsou na síťové kartě, připojené na určité adrese, aktivní. Pro samotné scanování existuje několik způsobů. V tomto článku si vytvoříme jednoduchý scanner založený na metodě Connect.

Porty si můžeme představit jako služby na síťové kartě, které slouží pro indentifikaci na dané IP adrese, kdy je číslem portu jednoznačně určeno, k jaké službě jsou data přiřazena (například všem známý port 25, který značí SMTP).

V tomto článku si vytvoříme jednoduchý program, který bude zjišťovat, které porty jsou na dané IP adrese aktivní (které služby jsou povoleny).

Scanner bude velmi jednoduchý a bude používat metodu Connect, kdy se bude snažit připojit na danné IP adrese postupně k jednotlivým portům v rámci TCP vždy vytvořením nového Socketu.

Čím začneme je grafické rozhraní, čímž by jsem chtěl navázat na již získané znalosti z předchozích článků (Java a základy GUI,
Java a základy GUI 2,
Java a základy GUI 3,
Java a základy GUI 4).

GUI

K našemu programu si vytvoříme velice jednoduché grafické rozhraní, které bude sloužit pro ovládání programu.

V GUI budeme potřebovat vytvořit formulář pro vkládání dat, tlačítko pro odeslání a nakonec seznam s výpisem.

Do scanneru budeme zadávat IP adresu, kterou si rozdělíme na 4 části a rozsah portů (od-do), pro výstup můžeme použít například seznam List z AWT. Začneme tedy definicí proměnných:

Nastavení okna nechám na vás a přejdu rovnou k umístění komponent do okna. Pro tuto potřebu si vytvořím Jpanel z knihovny javax.swing, ve kterém nastavím FlowLayout. Všechny prvky následně do tohoto panelu přidám:

Takto jsme jednoduše vytvořili grafické okno, které obsahuje formulář pro zadání dat, List pro jejich výpis a tlačítko pro odeslání.

Po odeslání tlačítka chceme aby se port scaner spustil. Musíme si tedy k tlačítku přiřadit událost:

Všimněte si že po kliknutí na tlačítko se spustí metoda check_form();, která má za úkol překontrolovat údaje ve formuláři.

Všechno co potřebujeme kontrolovat je IP adresa, jejíž jednotlivé části musí být v rozsahu 0-255 a rozsah portů, který je opět omezen a to velikostí 0-65535. Nakonec ještě zkontrolujeme, zda konečný port není větší než počáteční port:

Pokud nastane ve formuláři chyba, dáme o tom uživateli vědět vytvořením JoptionPane ve formě Error_Message a nic se nestane.

V případě, že všechno proběhne správně, vytvoříme IP adresu tím, že spojíme její jednotlivé části a zavoláme metodu pro scanování.

Metoda pro scanování bude obsahovat jeden cyklus for, ve kterém projde od prvního portu do posledního zadaného a pokusí se na zadané IP adrese k portu připojit.

Pro operaci připojení k portu si vytvoříme samostatnou třídu, do které předáme IP adresu, Port a ukazatel na seznam List, do kterého v případě úspěchu přidá otevřený port.

Metoda scan():

Navíc metoda scan() volá metodu delete_items() pro případ, že by jste scanování opakovali a potřebovali vymazat seznam List.

Class PortScanner

Třída PortScanner není nijak složitá. Pro každý port se bude snažit vytvořit nový Socket na dané IP adrese a portu. V případě že se to podaří přidá tento port do předaného Listu.

Třída tedy přijme tři proměnné, v konsturktoru je nastaví a spustí nové vlákno programu.

V tomto vlákně se program pokusí připojit na daný port a v případě že se to povede přidá hodnotu portu do předaného Listu.

Třída je navíc doplněna metodou return_port, který vrací dle daného portu jeho slovní vyjádření.

Tato metoda je opět velice jednoduchá. Obsahuje pouze pole portů a vstupní parametr představuje index pole. Vrací hodnotu tohoto indexu.

Seznam portů můžete čerpat například z wikipedie.

Celý výsledek může vypadat takto:

port scanner

Comments are closed for this page

Ahoj, máš to pěkný, jen tak dál. Jako začátečníka mě to hodně naučilo:)

Man, you turn on any news station and there’s a balanced panel on the post-debate. You turn to FOX, and you would think Romney’s President

Another great aspect of the screw compressor is that they can use oil in the process, or be completely oil free.

Trackbacks for this post

  1. Finding Cheap Hotels Potential of online sites - Page 1032
About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836