![]() |
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:
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:
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; |
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:
Das mit der IP wird dann schon schwer. Wie soll die IP eines Computers ermittelt werden der nicht vorhanden ist?
procedure TForm1.Button1Click(Sender: TObject);
begin IdIcmpClient1.Host := Edit1.Text; try IdIcmpClient1.Ping; except if (GetLastError = 11001) then begin //Unbekannter Host end; end; end; 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. |
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 |
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. |
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. |
Re: ICMP Problem
Vielen Dank :!: :!: :!:
Super !!! :thuimb: Nebenbei hast du noch Werbung für die Homepage gemacht :wink: |
Re: ICMP Problem
Zitat:
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