Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internetseite anpingen (https://www.delphipraxis.net/43835-internetseite-anpingen.html)

glkgereon 9. Apr 2005 13:05


Internetseite anpingen
 
hi

ich versuche eine internetseite anzupingen, und zwar mithilfe der indys, genauer IdIcmpClient

das versuche ich so:

Delphi-Quellcode:
procedure TForm1.Btn_GetClick(Sender: TObject);
//Ping einleiten
var i:Integer;
begin
  Btn_Get.Enabled := False;
  try
    Ping.Host := Edt_URL.Text;
    for i := 1 to 4 do
    begin
      Ping.Ping;
      Application.ProcessMessages;
    end;
  finally
    Btn_Get.Enabled := True;
  end;
end;
Delphi-Quellcode:
procedure TForm1.PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
//Bei PingReply
var sTime: string;
begin
  if (Ping.ReplyStatus.MsRoundTripTime = 0) then
    sTime := '<1'
  else
    sTime := '=';
    ListBox1.Items.Add(Format('%d Byte von %s: icmp_seq=%d ttl=%d Zeit%s%d ms',
    [Ping.ReplyStatus.BytesReceived,
Ping.ReplyStatus.FromIpAddress,
    Ping.ReplyStatus.SequenceId,
Ping.ReplyStatus.TimeToLive,
    sTime, Ping.ReplyStatus.MsRoundTripTime]));
end;
dies ist bisher nur von hier abgeschrieben, aber es funzt trotzdem nicht.

was mache ich falsch?

moritz 9. Apr 2005 13:19

Re: Internetseite anpingen
 
Was übergibst du denn als Host, also Edt_URL.Text?

glkgereon 9. Apr 2005 13:22

Re: Internetseite anpingen
 
also

http://www.delphipraxis.net funzt
www.delphipraxis.net funzt
www.krueger.de funzt
aber http://www.krueger.de funzt net :(

BenjaminH 9. Apr 2005 13:24

Re: Internetseite anpingen
 
Der grund ist, dass bei Pings nur eine IP und nicht ein Protokoll angepingt wird,
http beschreibt bei den webseiten jeweils das Protokoll

moritz 9. Apr 2005 15:12

Re: Internetseite anpingen
 
Nicht ganz korrekt. Pings können natürlich nur auf IP's gehen, da im Ping-Protokoll kein Host-Feld vorgegeben ist. Der Server wird dazu benötigt, um die IP aus seinem DNS-Eintrag auszulesen.
Der Ablauf würde wie folgt auschauen:
1) Connecte zu Nameserver
2) Löse delphipraxis.net auf (http:// muss / sollte man nicht schreiben, da DNS "nur auf HTTP geht", und www. sollte man auch weglassen, da es sich dabei nur um einen Host handelt)
3) Bekomme IP zurück
4) Pinge IP

Versuch das ganze mal mit krueger.de

glkgereon 9. Apr 2005 15:16

Re: Internetseite anpingen
 
funzt jetzt alles.

kann es theoretisch wirklich schief gehen wenn da 'www.' vorsteht?

moritz 9. Apr 2005 15:28

Re: Internetseite anpingen
 
Kann es. Der Domain ist nur als z.B. delphipraxis.net gespeichert. Wenn du zur DeNIC gehst und nach www.delphipraxis.de fragst, wirst du keine Auskunft bekommen. www. ist nur ein Host wie login. oder mail. oder forum. oder download. oder oder oder.
Die neuen DNS-Server scheinen das http:// bzw. www. am Anfang anscheinden selbst wegzukürzen. Sicherheitshalber immer nur den Domain übergeben.

Sharky 9. Apr 2005 16:02

Re: Internetseite anpingen
 
Wobei es eines zu beachten gibt. Die IP-Adresse von www.delphi-praxis.net kann eine ganz andere sein als ftp.delphi-praxis.net

durch das www bzw. ftp wird im DNS nämlich wieder auf einen Server abgefragt (können auch mehrere sein).

SirThornberry 9. Apr 2005 16:13

Re: Internetseite anpingen
 
@sharky: hättest du nicht noch paar stunden warten können, wollte das selbe eben auch posten.

das weglassen von "www." könnte sich ähnlich auswirken wie das weglassen von "www.delphipraxis."!!
Denn jeder punkt steht für eine subdomain welche zwar auf den gleichen server zeigen kann aber nicht muss. Es ist zwar in den meisten fällen so das www.irgendwas.de das gleiche anzeigt wie irgendwas.de aber genauso kann jemand seinen nameserver so konfigurieren das bei irgendwas.de eine andere seite angezeigt wird als bei www.irgendwas.de und ebenso verhält es sich mit den ip's.

Also auf KEINEN FALL das "www." weg lassen.

Ein grund warum das Ping schief gehen kann ist das der Ping-Port gesperrt ist. Wenn es darum geht zu prüfen ob ein http-server vorhanden ist, also "http://irgendwas" am besten auf port 80 "pingen". Da auf port 80 natürlich nicht das normale ping-commando gesendet werden kann besteht das "pingen" dann eigentlich nur aus einem Connect-Versuch

glkgereon 9. Apr 2005 17:57

Re: Internetseite anpingen
 
ich denke es funzt jetzt

ich poste einfach mal meine lösung

zur erklärung:
das programm soll die in Edt_URL.Text angegebene Seite runterladen und den Quelltext in SynMemo anzeigen.
ich habe einen Log eingebaut, wo alle aktionen reinkommen, sowie eine history, die "alte" adressen speichert.
Log is ne procedure, History is ne TStringList und Edt_URL ne ComboBox (jaja, name wird bald geändert ;) )


eine procedure zum eigentlichen pingen
Delphi-Quellcode:
procedure TForm1.DoPing(Host:String);
//Pingen
begin
  try //Pingen
    Log('PING '+Host);
    Ping.Host:=Host;
    Ping.Ping;
  except //bei Fehler
    Log('PING '+Host+' failed');
    ShowMessage('Host wurde nicht gefunden');
    SynMemo.Text:='     Seite wurde nicht gefunden'+#13+
                  '  Bitte überprüfen sie die Adresse'+#13+#13+
                  'Sie dürfen folgende Adressmuster eingeben:'+#13+
                  ' - www.abc.xyz'+#13+
                  ' - abc.xyz';
  end;
end;
eine (ButtonClick) um die URL entsprechend der eingabe zu kürzen oder zu ergänzen
Delphi-Quellcode:
procedure TForm1.Btn_GetClick(Sender: TObject);
//URL Ergänzen und Ping einleiten
begin
  //URL ergänzen bzw kürzen
  if copy(Edt_URL.Text,1,7)='http://' then
    DoPing(copy(Edt_URL.Text,8,Length(Edt_URL.Text)-7))
  else
    if copy(Edt_URL.Text,1,4)='www.' then
      DoPing(Edt_URL.Text)
    else
      DoPing('www.'+Edt_URL.Text);
  History.Add(Ping.Host); //History
  Edt_URL.Clear;
  Edt_URL.Items.AddStrings(History);
  Edt_URL.Text:=Ping.Host;
end;
und eine die beim Pong die seite runterlädt
Delphi-Quellcode:
procedure TForm1.PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
//Bei PingReply Seite Laden
var Temp:Integer;
begin
  Log('PONG from '+Ping.Host);                       //Log
  if SynMemo.Text<>'' then                           //event Speichern
    Temp:=Application.MessageBox('Möchten sie Die Aktuelle Seite speichern?',Titel,MB_YESNOCANCEL);
  if Temp<>IDCANCEL then                             //nicht Abbruch
    begin
    if Temp = IDYES then Speichernunter1Click(Form1); //Speichern
    try
      Log('Starting Download '+Ping.Host);
      SynMemo.Clear;                      
      SynMemo.Text:=IdHTTP.Get('http://'+Ping.Host); //Runterladen
      Form1.Caption:=Titel + ' - ' + Ping.Host;      //Titel
      Log('Download from '+Ping.Host+' ready');
    except                                           //Fehler
      ShowMessage('Fehler beim Download');           //Fehler
      Log('Download Error');
    end;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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