Witam w moim pierwszym tutorialu.
Traktował będzie on o pisaniu skanera portów
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
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:
Pod VAR /deklaracja zmiennych/ wklejamy:
Są to zmienne odpowiedzialne za adres IP, oraz porty /aktualny, początkowy, docelowy/
Klikamy 2x na Button1 i wklejamy kod:
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:
Tutaj deaktywujemy Timer oraz dajemy na Memo komunikat.
Po tym, w zdarzeniu OnTimer wklejmy kod:
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:
Po skompilowaniu, jak widać skaner działa:
Jeśli ktoś znalazł jakieś błędy, proszę pisać.
Pozdrawiam
Traktował będzie on o pisaniu skanera portów
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
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:
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:
Jeśli ktoś znalazł jakieś błędy, proszę pisać.
Pozdrawiam