Prosty skaner portów

0wn3r25

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

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;

@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.