[TUTORIAL][DELPHI] Piszemy prosty skaner portów

p3o

Użytkownik
Dołączył
Maj 1, 2007
Posty
62
Witam w moim pierwszym tutorialu.
Traktował będzie on o pisaniu skanera portów
smile.gif

Skaner będzie oparty o standartowe komponenty dostępne w delphi. Do jego napisania nie użyłem socketów,
ale jeśli ktoś koniecznie chce, zmiana kodu jest bardzo łatwa.

Zasada działania jest prosta:
Po aktywacji timera TCPClient łączy się z portem - jeśli połączony dostajemy komunikat,
następnie TCPClient rozłącza się, zwiększa aktualny port o 1 i powtarza całą procedurę.

Więc do rzeczy:

1.Potrzebne:
-Delphi 7
-Wyobraźnia i mózg
smile.gif


2.Zaczynamy pisać:

Na formę wstawiamy:
3xEdit
2xButton
1xLabel
1xTimer /zakładka SYSTEM/
1xTCPClient /zakładka INTERNET/ /Niedostępny w Delphi 7 personal, dostępne tu: http://p3o.yoyo.pl/dclnet70.bpl /
1xMemo

U mnie wygląda to mniejwięcej tak:

a900be21b014ace5.jpg


Pod VAR /deklaracja zmiennych/ wklejamy:

Kod:
  portmin:integer;
  portmax:integer;
  IP:string;
  port:integer;

Są to zmienne odpowiedzialne za adres IP, oraz porty /aktualny, początkowy, docelowy/

Klikamy 2x na Button1 i wklejamy kod:

Kod:
   Memo1.Clear;
   IP:=Edit1.Text;
   portmin:=StrToInt(Edit2.Text);
   portmax:=StrToInt(Edit3.Text); 
   port:=portmin;
   TcpClient1.RemoteHost:=IP;
   Timer1.Enabled:=true;
   Memo1.Lines.Add('Skanowanie rozpoczęte');
   Button1.Enabled:=false;
   Button2.Enabled:=true;

Kod odpowiada za podanie IP do klienta, aktywowanie timera oraz włączenie/wyłączenie przycisków.
Funkcja StrToInt zamienia typ String na Integer.

Następnie klikamy 2x Button2 i wklepujemy:

Kod:
   Timer1.Enabled:=false;
   Memo1.Lines.add('Skanowanie przerwane');
   Button1.Enabled:=true;
   Button2.Enabled:=false;

Tutaj deaktywujemy Timer oraz dajemy na Memo komunikat.

Po tym, w zdarzeniu OnTimer wklejmy kod:

Kod:
   Label1.Caption:=IntToStr(port);
   TcpClient1.RemotePort:=IntToStr(port);
   if TcpClient1.Connect=True then

     Memo1.Lines.Add(IntToStr(port)+' : open');
     inc(port);

   if port > portmax then
     begin
        Timer1.Enabled:=false;
        Memo1.Lines.Add('Skanowanie zakończone');
        Button1.Enabled:=true;
        Button2.Enabled:=false;
        port:=0;
end;

Jest to najważniejsza część skanera, odpowiada właśnie za sprawdzanie portów.
Timer co określoną ilość czasu /Interval/ wykonuje instrukcje zawarte w zdarzeniu onTimer /proponuję ustawić na 200/.
Pierwsza instrukcja warunkowa IF sprawdza czy jest połączenie z danym portem. Jeśli jest - daje na Memo komunikat oraz zwiękasza port o jeden /inc(port)/.
Druga zaś sprawdza czy nie port docelowy nie został osiągnięty. Jeśli tak, program deaktywuje timer i ustawia port aktualny na 0.


W FormCreate formy dajemy kod czyszczący Memo:

Kod:
Memo1.Clear;

Po skompilowaniu, jak widać skaner działa:

1559379f5ba242fb.png


Jeśli ktoś znalazł jakieś błędy, proszę pisać.

Pozdrawiam
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Ja znalazłem..Nie napisałeś, że na edycji Presonal w/w komponentów nie ma
<
 
Do góry Bottom