Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ICMP Problem (https://www.delphipraxis.net/21790-icmp-problem.html)

LoW_FloW 8. Mai 2004 08:16


ICMP Problem
 
Guten Morgen erst einmal :-D. Ich bin grade dabei ein Programm zu gestalten, dass bei nicht erreichen eines Hosts diesen Host in eine ListBox schreibt. Bei IP-Adressen geht das soweit (z.B. 192.168.0.99). Verwendet man nun aber Namen (kA wie die heißen, DNS glaub ich), gibt es Probleme, denn er meldet immer:
Socket-Fehler
Host nicht gefunden

Ich will diese Nachricht unterdrücken und stattdessen, die IP auf die ListBox der Unerreichbaren setzten.
Hier sind die Stellen, auf die es ankommen (denke ich :zwinker: ):
Delphi-Quellcode:
var
  frmMain: TfrmMain;
  ini: TIniFile;
  PC : Array of String ;
  Anzahl : integer = 0 ;
  current_PC : integer ;
  available_PC  : Array of String ;
  unavailable_PC : Array of String ;

implementation

{$R *.dfm}

procedure Newsort ;
var
i : integer ;
begin
frmMain.lstErreichbar.Items.Clear ;
frmMain.lstUnerreich.Items.Clear ;
frmMain.lstErreichbar.Items.Add(IntToStr(length(available_PC)));
frmMain.lstUnerreich.Items.Add(IntToStr(length(unavailable_PC)));
{
for i := 1 to high(available_PC) do
  frmMain.lstErreichbar.Items.Add(available_PC[i]) ;
for i := 1 to high(unavailable_PC) do
  frmMain.lstUnerreich.Items.Add(unavailable_PC[i]);
}
end;

procedure TfrmMain.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
  TempString: string ;
begin
  if ReplyStatus.BytesReceived = 0 then begin
    SetLength(unavailable_PC, Length(unavailable_PC)+1) ;
    unavailable_PC[High(unavailable_PC)] := PC[current_PC];
    end
  else begin
    TempString := ReplyStatus.FromIpAddress ;
    if TempString = '0.0.0.0' then begin
      SetLength(unavailable_PC, Length(unavailable_PC)+1) ; //Variable verlängern
      unavailable_PC[High(unavailable_PC)] := PC[current_PC]; //Neusten Wert auslesen
    end
    else begin
      SetLength(available_PC, Length(available_PC)+1) ;
      available_PC[High(available_PC)] := PC[current_PC];
    end;
  end;
  Newsort ;
end;

procedure TfrmMain.btnPingClick(Sender: TObject);
var
  i: integer;
begin
  SetLength(available_PC , 0) ;
  SetLength(unavailable_PC, 0) ;
  ICMP.OnReply := ICMPReply ;
  btnPing.Enabled := false ;
    try
      for i := 1 to Anzahl do begin
        current_PC := i ;
        ICMP.Host := PC[i] ;
        ICMP.Ping ;
      end;
    finally
      btnPing.Enabled := true ;
  end;
end;
Will sich jemand nicht durch den Code wuseln, kann er auch nur sagen, wie man die Socket-Fehler Nachricht unterdrückt oder die Nachricht "abfängt" um den PC in die Inaktive Liste zu schreben :mrgreen:

Sharky 8. Mai 2004 08:48

Re: ICMP Problem
 
Hai LoW_FloW,

den Fehler zu unterdrücken ist kein Problem. Einfach deinen Ping in einen try-except Block setzen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  IdIcmpClient1.Host := Edit1.Text;
  try
    IdIcmpClient1.Ping;
  except
    if (GetLastError = 11001) then
    begin
      //Unbekannter Host
    end;
  end;
end;
Das mit der IP wird dann schon schwer. Wie soll die IP eines Computers ermittelt werden der nicht vorhanden ist?
Dafür müsste es ja eine Liste geben wo alle Computernamen und deren IPs stehen. Mit etwas glück kannst Du das durch eine DNS-Abfrage machen. Aber auch das ist nicht 100%ig sicher.

LoW_FloW 8. Mai 2004 09:10

Re: ICMP Problem
 
Hm.. Ich habe das so gemeint, dass wenn die DNS nicht erreichbar ist, die DNS auf die "Liste der Unerreichbaren" geschrieben wird 8)

Edit: WoW es klappt :thuimb: Vielen Dank Sharky

LoW_FloW 8. Mai 2004 09:33

Re: ICMP Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab jetzt aber ein anderes Problem. Es wird zwar die Zahl der Erreichbaren und Unerreichbaren PCs in die Liste geschrieben, aber nicht angezeit, welcher PC :gruebel: .
Falls sich das jemand angucken will oder mir helfen will :roll: , die Projekt-Datei ist im Anhand dabei.

Sharky 8. Mai 2004 09:53

Re: ICMP Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hai LoW_FloW,

ich habe dein Programm mal etwas abgeändert ;-)
Die PCs die geprüft werden sollen stehen in der Datei pc.lst.

LoW_FloW 8. Mai 2004 13:03

Re: ICMP Problem
 
Vielen Dank :!: :!: :!:
Super !!! :thuimb:
Nebenbei hast du noch Werbung für die Homepage gemacht :wink:

Sharky 8. Mai 2004 15:39

Re: ICMP Problem
 
Zitat:

Zitat von LoW_FloW
Vielen Dank :!: :!: :!:
Super !!! :thuimb:
Nebenbei hast du noch Werbung für die Homepage gemacht :wink:

:?: Werbung?
Hast Du meinen Code nachvolziehen können?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz