AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

portscanner

Ein Thema von bonanza · begonnen am 12. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#1

portscanner

  Alt 12. Feb 2006, 16:31
das soll ein portscanner werden ^^
doch macht er einen dummen fehler beim compilieren in der Project1.DPR...

Komplettes Projekt siehe anhang...
wäre super nett, wenn jemand sagen könnte, wo der fehler liegt, und wie ich ihn behebn könnte..

Hier der Code:
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ScktComp;

type
  TForm1 = class(TForm)
    Ed_Ip1: TEdit;
    Ed_Ip2: TEdit;
    Ed_Port: TEdit;
    Bt_Start: TButton;
    Me_Output: TMemo;
    Bt_Stop: TButton;
    ClientSocket: TClientSocket;
    gauge1: TProgressBar;
    procedure ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure Bt_StartClick(Sender: TObject);
    procedure Bt_StopClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  over,over2:Boolean;
  z,i1,i2,i3,scanips:Integer; // IP-Nr. 127.i1.i2.i3
  var Ipnr1, Ipnr2: array of integer; // Array of Start and Stop IP
implementation

{$R *.dfm}

procedure Scan(ClientSocket: TClientSocket; Me_Output: TMemo;
Bt_Start,Bt_Stop: TButton; Gauge1: TProgressBar);
var strtemp1,iptemp: String;
var perc_real,progr_real:Real;
var progr_int,error:Integer;
begin

  if (ipnr1[0] >= ipnr2[0]) and (i1 >= ipnr2[1]) and
     ((i2 >= ipnr2[2])or over = true) and ((i3 > ipnr2[3]) or over = true) then
  begin
    Me_Output.Lines.Add('Scanning finish!');
    Bt_Start.Enabled := true;
    Bt_Stop.Enabled := false;
  end
  else
  begin
  // Progress
  inc(z);
  perc_real := 100 / scanips;
  progr_real := z * perc_real;
  Str(progr_real:3:0,strtemp1);
  Val(strtemp1,progr_int,error);
  gauge1.Position := progr_int;
  // Build IP
  Str(Ipnr1[0],strtemp1);
  iptemp := strtemp1 + '.';
  Str(i1,strtemp1);
  iptemp := iptemp + strtemp1 + '.';
  Str(i2,strtemp1);
  iptemp := iptemp + strtemp1 + '.';
  Str(i3,strtemp1);
  iptemp := iptemp + strtemp1;
  ClientSocket.Host := iptemp;

  inc(i3);    // Inc IP
  if i3 > 255 then begin i3 := 0; inc(i2); over := true end;
  if i2 > 255 then begin i2 := 0; inc(i1); over2 := true end;
  if i1 > 255 then begin i1 := 0; end;

  ClientSocket.Open;
  end; // End Scan

end;



procedure TForm1.ClientSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
ErrorCode := 0;
Scan(ClientSocket, Me_Output, Bt_Start, Bt_Stop, Gauge1); // Call Procedure Scan
end;

procedure TForm1.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Me_Output.Lines.Add('Port open: ' + ClientSocket.Host);
  ClientSocket.Close;
  Scan(ClientSocket, Me_Output, Bt_Start, Bt_Stop, Gauge1); // Call Procedure Scan
end;

procedure TForm1.Bt_StartClick(Sender: TObject);

var iptemp,ipnrtemp,strtemp1:String;
var i,ipnrint,error,inttemp1:Integer;
var realerror:Boolean;
begin
  SetLength(Ipnr1, 4);
  SetLength(Ipnr2, 4);
  z := 0;
  over := false;
  over2 := false;
  Gauge1.Position := 0;
  realerror := false;
  Me_Output.Clear;
  Bt_Start.Enabled := false;
  Bt_Stop.Enabled := true;
  {Begin Check IP}


   iptemp := Ed_Ip1.Text;
   for i := 0 to 3 do
   begin
     If i <> 3 then ipnrtemp := Copy(iptemp,1,Pos('.',iptemp)-1)
     else ipnrtemp := iptemp;
     val(ipnrtemp,ipnrint,error);
     If error = 0 then
     begin
       IPnr1[i] := ipnrint;
       Delete(iptemp,1,Pos('.',iptemp));
     end // End If
     else realerror := true;
   end; // End For


   iptemp := Ed_Ip2.Text;
   for i := 0 to 3 do
   begin
     If i <> 3 then ipnrtemp := Copy(iptemp,1,Pos('.',iptemp)-1)
     else ipnrtemp := iptemp;
     val(ipnrtemp,ipnrint,error);
     If error = 0 then
     begin
       IPnr2[i] := ipnrint;
       Delete(iptemp,1,Pos('.',iptemp));
     end // End If
     else realerror := true;
   end; // End For

   If (Ipnr1[0] > 255)or(Ipnr1[1] > 255)or(Ipnr1[2] > 255)or(Ipnr1[3] > 255)or
      (Ipnr2[0] > 255)or(Ipnr2[1] > 255)or(Ipnr2[2] > 255)or(Ipnr2[3] > 255)or
      (IPnr1[1] > Ipnr2[1])or(IPnr1[2] > Ipnr2[2])or(IPnr1[3] > Ipnr2[3])
   then realerror := true;

   If realerror = true then Me_Output.Lines.Add('Start or End IP is wrong!')
   else
   begin
   {Begin Ip right / Start Scan}
     If Ipnr1[0] < Ipnr2[0] then Me_Output.Lines.Add('Start Ip must be smaller then End IP!') else
     begin
       If Ipnr1[0] <> Ipnr2[0] then Me_Output.Lines.Add('The differnt between Start and End Ip is to big!') else
       begin

       scanips := Ipnr2[3] - Ipnr1[3] + 1;
       scanips := scanips + ((Ipnr2[2] - Ipnr1[2]) * 256);
       scanips := scanips + ((Ipnr2[1] - Ipnr1[1]) * 256 * 256);
       // Count the to scanning IPs
       Str(scanips,strtemp1);
       Me_Output.Lines.Add('Scanning: ' + strtemp1 + ' IPs');
       VAL(Ed_Port.Text,inttemp1,error);
       If error = 0 then
       begin
         ClientSocket.Port := inttemp1;

         i1 := Ipnr1[1];
         i2 := Ipnr1[2];
         i3 := Ipnr1[3];

         Scan(ClientSocket, Me_Output, Bt_Start, Bt_Stop, Gauge1); // Call Procedure Scan

       end {End CheckPort}
       else Me_Output.Lines.Add('Port Error');
       end; {End Ip1 <> Ip2}
     end; {End Ip1 < Ip2}
   {End Ip right / Start Scan}
   end; {End no error!}
  {End Check IP}

end;

procedure TForm1.Bt_StopClick(Sender: TObject);
begin
  Bt_Start.Enabled := true;
  Bt_Stop.Enabled := false;
  i1 := Ipnr2[1];
  i2 := Ipnr2[2];
  i3 := Ipnr2[3];
  Me_Output.Lines.Add('Stop!');
end;

end.
Angehängte Dateien
Dateityp: rar portscanner_122.rar (10,1 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#2

Re: portscanner

  Alt 12. Feb 2006, 16:40
Nun, wenn du uns sagen könntest welchen "dummen Fehler" er meldet, dann wäre das schonmal hilfreich.
Nicht jeder wird dein Programm runterladen wollen um dir zu helfen.

MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
bonanza

Registriert seit: 13. Sep 2005
134 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: portscanner

  Alt 12. Feb 2006, 17:22
es kommt der Fehler:

Zitat:
[Error] Project1.dpr(11): Undeclared identifier: 'Form1'
bezogen auf die Zeile:

  Application.CreateForm(TForm1, Form1);
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#4

Re: portscanner

  Alt 12. Feb 2006, 17:26
Bei den globalen Variablen fehlt bei dir noch:

Form1: TForm1;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Sebastian R.

Registriert seit: 12. Feb 2006
94 Beiträge
 
#5

Re: portscanner

  Alt 13. Feb 2006, 12:22
Dein Portscanner ist ein bisschen umständlich. Probier doch einfach mal folgenden Code:

Delphi-Quellcode:
var host: pHostEnt;
    dwIP: DWORD;
    sock: TSocket;
    saddr: SOCKADDR_IN;
    from_port, to_port, i, ret: integer;
begin
host := GetHostByName(pchar('localhost'));
dwIP := htonl(integer(pointer(host^.h_addr^)^));
ZeroMemory(@saddr,sizeof(SOCKADDR_IN));
saddr.sin_family := AF_INET;
saddr.sin_addr.S_addr := htons(dwIP);
sock := socket(AF_INET, SOCK_STREAM, 0);
for i := from_port to to_port do begin
saddr.sin_port := ntohl(i);
ret := connect(sock, saddr, sizeof(saddr));
if ret = SOCKET_ERROR do begin
// Closed
end
else begin
// Open
end;
end;
end;
Natürlich keine Garantie für die Richtigkeit, habs grad aus dem Stand getippt!

MfG, Sebastian!
Sebastian R.
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#6

Re: portscanner

  Alt 13. Feb 2006, 15:07
Zitat von Sebastian R.:
Dein Portscanner ist ein bisschen umständlich. Probier doch einfach mal folgenden Code:

Delphi-Quellcode:
var host: pHostEnt;
    dwIP: DWORD;
    sock: TSocket;
    saddr: SOCKADDR_IN;
    from_port, to_port, i, ret: integer;
begin
host := GetHostByName(pchar('localhost'));
dwIP := htonl(integer(pointer(host^.h_addr^)^));
ZeroMemory(@saddr,sizeof(SOCKADDR_IN));
saddr.sin_family := AF_INET;
saddr.sin_addr.S_addr := htons(dwIP);
sock := socket(AF_INET, SOCK_STREAM, 0);
for i := from_port to to_port do begin
saddr.sin_port := ntohl(i);
ret := connect(sock, saddr, sizeof(saddr));
if ret = SOCKET_ERROR do begin
// Closed
end
else begin
// Open
end;
end;
end;
Natürlich keine Garantie für die Richtigkeit, habs grad aus dem Stand getippt!

MfG, Sebastian!
Ein Portscanner interessiert mich auch, habs deswegen getestet.

Klappt alles nur bei der zeile

dwIP := htonl(integer(pointer(host^.h_addr^)^)); kommt ein fehler:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0044D9FD in Modul 'Project1.exe'. Lesen von Adresse 0000000C'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#7

Re: portscanner

  Alt 13. Feb 2006, 15:14
Schau doch mal was htonl() an Parameter verlangt und was dort übergeben wird, und dann korrigier mal die Dereferenzierung des Pointers
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#8

Re: portscanner

  Alt 13. Feb 2006, 15:15
Zitat von Phoenix:
Schau doch mal was htonl() an Parameter verlangt und was dort übergeben wird, und dann korrigier mal die Dereferenzierung des Pointers

Ehrlichgesagt beschäftige ich mich mit sowas ned sehr arg; wollte das nur mal testen
  Mit Zitat antworten Zitat
Sebastian R.

Registriert seit: 12. Feb 2006
94 Beiträge
 
#9

Re: portscanner

  Alt 13. Feb 2006, 18:29
Probiert mal htons anstatt htonl. Dann müssts klappen!
Sebastian R.
Keep on programming!


CyCode.net - Meine Programme, Tutorials und Quelltexte
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#10

Re: portscanner

  Alt 14. Feb 2006, 11:39
Zitat von Sebastian R.:
Probiert mal htons anstatt htonl. Dann müssts klappen!
Leider nicht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz