Prosty skaner portów
Krótki opis programu :
Program będzie w średniej prędkości skanował wskazane przez was porty (Wyznaczone np. pierwszy port to 30, a ostatni 60).
No to piszemy :Co będzie nam potrzebne, aby napisać ten skaner?
Środowisko programistyczne (kompilator) Delphi 7 Personal Edition.
oraz komponenty do niego : (ClientSocket & ServerSocket).
Instalacja komponentów (ClientSocket & ServerSocket) :
1. Wypakowywujemy dclsockets70.bpl do folderu Lib (Ścieżka domyślna : C:\Program Files\Borland\Delphi7\Lib\).
2. Po wypakowaniu dclsockets70.bpl należy otworzyć Delphi i z górnego menu wybrać "Components" i tam "Install Packages.." i klikamy na przycisk Add.. i idziemy do folderu Lib i tam klikamy 2 razy na dclsockets70.bpl i dajemy OK.
3. Jeżeli zrobiliście wszystko prawidłowo to powinna wam się pojawić zakładka w komponentach pt. "Internet".
No to do roboty :
1) Wrzucamy na formę komponent ClientSocket z zakładki Internet. (Zmieniamy nazwę na ps)
2) Wrzucamy na formę 4x Edit z zakładki Standard. (W Edit2 dajemy text: 1, a w Edit3 dajemy: 6553).
3) Wrzucamy na formę 3x Buttony z zakładki Standard. (Caption: Skanuj, Stop-Skan, Wyczyść).
4) Wrzucamy na formę 1x ListBox również z zakładki Standard.
5) Wrzucamy na formę 3x Label także z zakładki Standard. (Caption: Adres IP, Port startowy, Port końcowy).
Ustawiamy wszystko według własnego uznania, u mnie mniej więcej to tak wygląda :
http://img296.imageshack.us/img296/240/screen1337oo0.jpg
Czas na kod!!! :Pomiędzy kodem a formą możemy się przełączać naciskając przycisk F12.
---Klikamy 2x na przycisk Skanuj i wklepujemy kod :
procedure TForm1.Button1Click(Sender: TObject); begin Button1.Enabled := False; Edit1.Enabled := False; Edit2.Enabled := False; Edit3.Enabled := False; Edit4.Enabled := False; Button2.Enabled := True; PortNo := StrToInt(Edit2.Text); Ps.Address := Edit1.Text; Ps.Port := PortNo; Ps.Active := True; end;
---Klikamy 2x na przycisk Stop-Skan i wklepujemy :
procedure TForm1.Button2Click(Sender: TObject); begin Portno := StrToInt(Edit3.Text); Button1.Enabled := True; Edit1.Enabled := True; Edit2.Enabled := True; Edit3.Enabled := True; Edit4.Enabled := True; Button2.Enabled := False; end;
---Klikamy 2x na przycisk Wyczysc i wklepujemy kod :
procedure TForm1.Button3Click(Sender: TObject); begin Edit4.Text := ''; Listbox1.Items.Clear; end;
---W objects inspector w komponencie ps wchodzimy w zakładke Events i klikamy 2 razy w puste miejsce OnError i powinno przenieść nas do kodu źródłowego i tam wklepujemy :
procedure TForm1.psError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Errorcode := 0; Edit4.Text := 'Porty Zamknięte: ' + InTtoStr(PortNo); Ps.Active := False; Inc(PortNo); if PortNo <= StrToInt(Edit3.Text) then begin Ps.Address := Edit1.text; Ps.Port := PortMo; Ps.Active := True; end; end;
---Teraz w zakładce Events komponentu ps klikamy 2 razy na puste miejsce koło OnConnect i wklepujemy taki kod :
procedure TForm1.psConnect(Sender: TObject; Socket: TCustomWinSocket); begin ListBox1.Items.Add('Porty Otwarte: ' + IntToStr(PortNo)); Ps.active := False; Inc(PortNo); if PortNo <= StrToInt(Edit3.Text) then begin Ps.Address := Edit1.Text; Ps.Port := PortNo; Ps.Active := True; end; end;
---Teraz klikamy na Formę i w zakładce Events szukamy OnClose, klikamy 2 razy i wklepujemy kod :
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Ps.Active := False; end;
---Jeszcze dodajemy pod var taki kod :
var Form1: TForm1; PortNo : Integer;
Gdy już napisaliśmy wszystko jak należy tworzymy jakiś folder na pulpicie, nazywamy go przykładowo Skaner portów, zapisujemy tam wszystkie pliki i dajemy z górnego menu w Delphi Project > Compile i gotowe!
Program możecie ustrajać jak wam się podoba wystarczy tylko z zakładki Additional wziąć Image i tam w Object Inspectorze w zakładce Properties macie Picture i sobie wybieracie i wsadzacie jakiś obrazek.
Mam nadzieje że ulepszycie ten kod źródłowy.
Kod możecie modyfikować jak chcecie i dodawać nowe funkcje, ale żeby to zrobić potrzeba zdobyć wiedzę, dlatego podaje parę stronek :http://www.4programmers.net
http://www.binboy.sphere.pl/
http://www.ofkurs.kgb.pl/
http://www.haxite.org/
http://www.hackme.pl/news.html
No i to by było chyba na tyle :)
6 komentarzy
@muciu
konstrukcja "goto" nie jest nigdzie uzasadniona i do tego co napisałeś służy break; ;)
@muciu
A dla mnie jeszcze ładniej wygląda:
[code]
if portno <= strtoint(edit3.text) then
begin
ps.address := edit1.text;
ps.port := portno;
ps.active := true;
end;
[/code]
Ładnie i przejżyście :P :)
Nie wstawiaj spacji przed dwukropkiem. Może w Delphi to ułatwia, ale w Języku polskim jest to błąd. Poza tym da się w Delphi wpisać wszystkie znaki diakrytyczne. Na przykład wchodzisz do notatnika piszesz ten znak, kopiujesz go i wklejasz do Delphi, więc jeśli chodzi o wiedzę to się nie wysuwaj bo ortograficznej to ty na pewno nie masz.
A ten klucz do Delphi to tak można sobie publikować gdzie się chce?
zamiast konstrukcji typu:
if portno > strtoint(edit3.text) then goto son else
ps.address:=edit1.text;
ps.port:=portno;
ps.active:=true;
son:
Ładniej wygląda:
if portno <= strtoint(edit3.text) then begin
ps.address:=edit1.text;
ps.port:=portno;
ps.active:=true;
end;
Kod jest bardziej czytelny, pozatym używanie goto jest uzasadnione tylko przy wychodzeniu z zagnierzdzonych pętli.
Może popraw z.
portno:=strtoint(edit3.text);
button1.enabled:=true;
edit1.enabled:=true;
edit2.enabled:=true;
edit3.enabled:=true;
edit4.enabled:=true;
button2.enabled:=false;
na:
PortNo := StrToInt(Edit3.text);Button1.Enabled := True;
Edit1.Enabled := True;
Edit2.Enabled := True;
Edit3.Enabled := True;
Edit4.Enabled := True;
Button2.Enabled := False;