Entwickler-Ecke

Internet / Netzwerk - Ping? generell und für Delphi


Hopsekey - Mi 11.06.03 10:59
Titel: Ping? generell und für Delphi
kennt von euch jemand den befehl um alle rechner im netz anzupingen (nicht einzeln, sondern mit einem befehl sprich rundping). sich also alle adressen zeigen lassen?
kann man über delphi per source den ping-befehl ausführen?

riesen DANKE und bitte den quelltext mal so als Bsp. mit bei


specialwork - Do 12.06.03 00:31
Titel: Ping
Hallo Hopsekey

So wirds gemacht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
unit UPing;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdIcmpClient, Spin, StdCtrls, ScktComp, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    Label3: TLabel;
    Timer1: TTimer;
    SpinEdit3: TSpinEdit;
    Label4: TLabel;
    SpeedButton1: TSpeedButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpinEdit3Change(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mPing: TIdIcmpClient;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  try
    mPing.ReceiveTimeout := SpinEdit2.Value;
    mPing.Host := Edit1.Text;
    mPing.Port:= SpinEdit1.Value;
    mPing.Ping;
    Memo1.Lines.Add('Received from Host: '+mPing.ReplyStatus.FromIpAddress+' Bytes: '+inttostr(mPing.ReplyStatus.BytesReceived));
  except
    on E: Exception do begin
      Memo1.Lines.Add('Host not received');
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  mPing:=TIdIcmpClient.Create(self);
end;

procedure TForm1.SpinEdit3Change(Sender: TObject);
begin
  Timer1.Interval:=SpinEdit3.Value;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Timer1.Enabled:=not Timer1.Enabled;
  SpeedButton1.Down:=Timer1.Enabled;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Timer1.Enabled:=false;
  SpeedButton1.Down:=false;
end;

end.

Gruß, Tom


Bela Urlaub - Do 12.06.03 02:09

Hi, hab das mal ausprobiert....
Bei mir kommt n Fehler: "IdIcmpClient"

Quelltext
1:
[Fataler Fehler] ...: Datei nicht gefunden: 'IdIcmpClient.dcu'                    

Also... was ist da für eine Datei???
Wohl nicht bei Windows 98 dabei oda??


specialwork - Do 12.06.03 09:56
Titel: IdIcmpClient.dcu
Hallo Bela Urlaub,

Ich glaube nicht, das es etws mit dem Betriebssystem zu tun hat. Es hat wohl eher etwas mit Deiner Delphi Version zu tun. Ich verwende zur zeit Delphi 6 Professional. Solltest Du ebenfalls D6 verwenden, dann schau doch mal nach, ob Du die Indy Komponenten installiert hast.

Gruß, Tom


patrick - Do 12.06.03 12:26

schaut mal n paar zeilen weiter unten.
um das thema ping geht es auch hier:
http://www.delphi-forum.de/viewtopic.php?t=8291


BungeeBug - Do 12.06.03 12:30

Hi, es gibt bessere Möglichkeiten als einmal das ganze Netz anzupingen und zu gucken wer antwortet ... das is erstens "belastend" für deinen Rechner und das gesammt Netz (Wenn BNC Netz) besser ist es ein UDP - Bordcast zusenden und dann alle Rechner die sich anwesend melden an zupingen ... geht sogar schneller :P

MfG BungeeBug


Bela Urlaub - Do 12.06.03 13:54
Titel: Re: IdIcmpClient.dcu
specialwork hat folgendes geschrieben:
Hallo Bela Urlaub,

Ich verwende zur zeit Delphi 6 Professional. Solltest Du ebenfalls D6 verwenden, dann schau doch mal nach, ob Du die Indy Komponenten installiert hast.

Gruß, Tom

Indy- Komponenten???? was das? Ich verwende D6 Personal


specialwork - Do 12.06.03 14:31

Hallo Bela Urlaub,

Die Indy Komponenten sind wenigstens in der Delphi Professional Version integriert.

In Deinem Falle würde ich mich nun an die Idee von BungeeBug halten. Jedoch hast Du dann das Problem, dass Du nur Rechner im LAN und nicht in LAN und WAN anpingen kannst.

Gruß Tom


DarkLord - Do 12.06.03 15:26

Du kannst dir die aktuelle Indy Version kostenlos runterladen auf: http://www.indyproject.org !


Hopsekey - Do 12.06.03 17:33

ich bedanke mich für eure antworten, aber @ BungeeBug wie geht das denn nun schon wieder?


Hopsekey - Do 12.06.03 18:26

ich habs gerade mal ausprobiert, bei mir komm die fehlermeldung:
ungültiges zeichen in der eingabedatei undzwar bei StdCtrls.
Dann will er die Variants.dcu.
dann kommt die vorhergehende fehlermeldung mit ungültiges zeichen bei IdIcmpClient.
Dann giebt er ruhe. Ich habe delphi 5.0 Enterprise, entwerder ist die helfte nicht installiert, oder ich weiß nicht.

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ExtCtrls, Spin, StdCtrls, Variants, IdIcmpClient, ScktComp;


BungeeBug - Do 12.06.03 19:07

Hi,
du kannst (wenn du die Indy installiert hast) nen UDP - Server (den brauch man dazu glaub ich ... wenn nich dann wars der Client) auf die Form setzen und dann die IP 192.168.0.255 (nur wenn die auf dein Netzwerk zutrifft ... sonst musste se so ändern das die ersten 3 Abschnitte zu deinem Netz passen, der letzte muss immer 255 heissen) mit nem BroardCast anpeilen ... als Ergebniss sollte sich dann jeder Rechner in deinem Netz melden. So und das dann nur noch in ne Stringlist oder nen Array laden und nach und nach jeden anpingen. So hasst du vermieden das dein Rechner auf ne Antwort wartet wo keine kommt ...

MfG BungeeBug