8644
Goto Top

Indy-Kompos und Ping

Ein Mass-Ping-Programm mit Indy, das die Host-Namen anzeigt ...

Hallo,

dann will ich mal den Anfang machen. face-smile

Wie oben schon erwähnt, möchte ich ein Proggi schreiben, das mir einen bestimmten IP-Bereich ping und die entsprechenden Host-Namen hinter den Adressen liefert. Habe Delphi 6 Enterprise und nutze die Indy-Komponenten. Anpingen und alles ist ja kein Problem. Nur bei den Host-Namen hört es auf. Googlen war auch sehr unbefriedigend.

Vielleicht habe ich ja hier Glück !

Psycho

P.S. ich hoffe, das sich der Entwicklerbereich vielleicht doch noch mausert face-wink

Content-Key: 8415

Url: https://administrator.de/contentid/8415

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: Ati
Ati 13.04.2005 um 16:16:52 Uhr
Goto Top
Hallöle,
ich hoffe die Antwort liest Du noch, da Dein Beitrag ja etwas älter ist. Für Delphi-Probleme kann ich Dir mal folgendes Forum wärmstens ans Herz legen: http://www.delphipraxis.net
Die Jungs haben mir auch schon oft geholfen. Ein Besuch lohnt sich

Ati
Mitglied: 8644
8644 19.04.2005 um 07:36:39 Uhr
Goto Top
Hi,

danke für Deine Antwort, ich kenne auch noch etliche gute Foren, aber für dieses spezielle Problem scheint es keine Lösung zu geben. Naja, irgendwas ist ja immer.

Psycho
Mitglied: Ati
Ati 19.04.2005 um 08:37:07 Uhr
Goto Top
Also ich habe mal folgendes gefunden (ungetestet):
Folgendes um den Computernamen zu ermitteln.

function GetComputerNane(IPAddr: string): string;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
HostEnt:= GetHostByAddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt <> nil then
Result := StrPas(Hostent^.h_name)
else
Result := '';
end;
end;

Und hier mal ein Beispiel um ein Massen-Ping auszuführen:

procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
begin
for i:= 1 to 200 do begin
Ping.Host := '192.168.2.' + IntToStr(i);
Ping.Ping();
end;
end;

Mußt dafür die IdIcmpClient-Komponeente verwenden.
Ich hoffe das reicht um weiterzukommen

Gruß Ati
Mitglied: 8644
8644 30.06.2005 um 08:30:09 Uhr
Goto Top
Hi Ati,

habe deine Antwort jetzt erst gelesen (schon aufgegeben face-wink )
Klingt so, als könnte es funktionieren, werde es demnächst mal testen.

Danke Psycho
Mitglied: Ati
Ati 30.06.2005 um 09:11:47 Uhr
Goto Top
Mach das und gib mir mal bescheid ob es funktioniert hat

Ati
Mitglied: 8644
8644 30.06.2005 um 10:04:23 Uhr
Goto Top
Hi Ati,

so funktionierts:

procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
begin
for i:= 1 to 200 do begin
IdIcmpClient1.Host := '192.168.1.' + IntToStr(i);
IdIcmpClient1.Ping();
If IdIcmpClient1.ReplyStatus.BytesReceived > 0 Then
ListBox1.Items.Add(GetComputerName(IdIcmpClient1.Host));
Form1.Refresh;
end;


Die Funktion GetComputerName klappt auch ohne Indy, ist aber sau langsam.
Indy alleine kann das wesentlich schneller, gibt aber leider keinen Hostnamen zurück.
So ist es aber ein Kompromiss, mit dem ich leben kann.

Gruß Psycho
Mitglied: Ati
Ati 30.06.2005 um 10:15:23 Uhr
Goto Top
Freud mich das es geklappt hat.
Mitglied: 8644
8644 30.06.2005 um 10:26:37 Uhr
Goto Top
jep, Danke noch mal!