AGB  ·  Datenschutz  ·  Impressum  







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

ICMP Problem

Ein Thema von LoW_FloW · begonnen am 8. Mai 2004 · letzter Beitrag vom 8. Mai 2004
Antwort Antwort
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#1

ICMP Problem

  Alt 8. Mai 2004, 08:16
Guten Morgen erst einmal . 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 ):
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.0then 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
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ICMP Problem

  Alt 8. Mai 2004, 08:48
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#3

Re: ICMP Problem

  Alt 8. Mai 2004, 09:10
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 Vielen Dank Sharky
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#4

Re: ICMP Problem

  Alt 8. Mai 2004, 09:33
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 .
Falls sich das jemand angucken will oder mir helfen will , die Projekt-Datei ist im Anhand dabei.
Angehängte Dateien
Dateityp: rar internet_frei.rar (184,4 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ICMP Problem

  Alt 8. Mai 2004, 09:53
Hai LoW_FloW,

ich habe dein Programm mal etwas abgeändert
Die PCs die geprüft werden sollen stehen in der Datei pc.lst.
Angehängte Dateien
Dateityp: zip internetfrei.zip (6,7 KB, 14x aufgerufen)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#6

Re: ICMP Problem

  Alt 8. Mai 2004, 13:03
Vielen Dank
Super !!!
Nebenbei hast du noch Werbung für die Homepage gemacht
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: ICMP Problem

  Alt 8. Mai 2004, 15:39
Zitat von LoW_FloW:
Vielen Dank
Super !!!
Nebenbei hast du noch Werbung für die Homepage gemacht
Werbung?
Hast Du meinen Code nachvolziehen können?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


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 07: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