Programowanie w języku Delphi » Gotowce

Prosty skaner portów

  • 2012-02-24 22:47
  • 6 komentarzy
  • 2297 odsłon
  • Oceń ten tekst jako pierwszy
Podobny artykuł do tego możecie znaleźć na stronie : www.hackme.pl.


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

TomRiddle 2010-09-01 18:56

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;

SebaZ 2010-08-09 22:08

@muciu

konstrukcja "goto" nie jest nigdzie uzasadniona i do tego co napisałeś służy break; ;)

Defozo 2009-01-25 17:11

@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 :)

Demonical Monk 2008-01-19 22:58

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.

KORraN 2008-01-18 18:30

A ten klucz do Delphi to tak można sobie publikować gdzie się chce?

muciu 2008-01-18 10:59

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.