Autor |
Beitrag |
Pipecheck
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 22.06.02 23:06
Kann mir bitte jemand auf EINFACHE weise erklären wie ich checke ob eine Internetverbindung besteht?
Es soll einfach nur ausgegeben werden ob im Netz, oder nicht...
ich hoffe, das ist ein nicht ganz so alter hut.
greets Pipecheck
_________________ auf grund mehrer beschwerden ist hier vor erst nix zu sehen
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: So 23.06.02 01:49
Hallo,
doch das ist ein alter Hut und die Antwort ist immer wieder enttäuschend.
Es geht nicht. Zumindest nicht, wenn man ausschließen will, das der Test nicht selber eine Verbindung aufbaut, wenn der Rechner so konfiguriert ist, dass er bei anforderung eine Verbindung aufbauht.
Ein weiteres Problem ist, das der Netzwerkzugriff unter der Windows 9x reihe anders realisiert ist als unter der NT Reihe.
Also wie gesagt. Die universelle Lösung git es meines wissens nicht und wenn doch dann wird sie sicherlich nicht einfach sein (allein wegen der unterscheidung der Windowse).
Aber ich lasse mich gerne verbessern  .
Gruß
Klabautermann
|
|
Torsten
      
Beiträge: 160
|
Verfasst: So 23.06.02 02:12
Moinsen!
Also ich verwende dazu die Funktion InternetGetConnectedState aus der Unit WinInet.
Kleines Beispiel:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| uses ... WinInet, ... ;
...
if InternetGetConnectedState(nil, 0) then ShowMessage('Ja, logen doch') else ShowMessage('Nööö, doch nicht'); ... |
Hat bis dato auch immer funktioniert.
Jedoch konnte ich nicht testen, ob dabei eine Verbindung aufgebaut wird. Habe es immer nur hinter einem Router testen können.
Doch ich lasse mich auch gerne belehren.
Grüße
Torsten
|
|
Pipecheck 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 23.06.02 14:02
hehe, Torsten ist mein Gott 
_________________ auf grund mehrer beschwerden ist hier vor erst nix zu sehen
|
|
Stefan
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 27.06.02 17:59
Servus,
also dieses InternetGetConnectedState hat bei mir den Haken, dass es nur wenn ich über eine DFÜ-Verbindung online gehe funktioniert. Gehe ich z.B. mit einer älteren T-online Software oder durch ICS Software wie KEN ins Netz wird immer online angezeigt, auch wenn ich offline bin.
Ich habs auch schon mit der Abfrage der Regestry versucht, die ja auch erkennt, ob man online bzw offline ist. Hat aber auch nix gebracht.
Vielleicht weiss ja hier einer was...
|
|
Torsten
      
Beiträge: 160
|
Verfasst: Do 27.06.02 18:54
Moinsen!
Wo fragst Du das denn in der Registry ab?
Wenn die Registry das kennt (so wie Du schreibst), dann sollte man es doch auch abfragen können.
Grüße
Torsten
|
|
Stefan
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 27.06.02 20:30
Hier ist der Code. Hab ich mal irgendwo gelesen, und da das mit dem InternetGetConnectedState bei mir nicht eindeutig funzt einfach ausprobiert. Leider kenn ich mich mit der Regestry nicht so gut aus, dass ich sagen kann, ob sich an der Stelle wies im Code steht überhaupt der online/offline Eintrag befindet.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function IsConnected : Boolean; var reg: TRegistry; buff: dword; begin reg := tregistry.Create ; Reg.RootKey := HKey_local_machine; if reg.OpenKey('\System\CurrentControlSet\Services\RemoteAccess',false) then begin reg.ReadBinaryData('Remote Connection',buff,sizeof(buff)); result := buff = 1; reg.CloseKey ; reg.Free ; end; end; |
und so frag ichs ab:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm2.Button2Click(Sender: TObject); begin
If IsConnected = true then begin StaticText1.Font.Color := clgreen; StaticText1.Caption := ' online '; end else begin StaticText1.Font.Color := clred; StaticText1.Caption:=' offline '; end; end; |
Also, Torsten, was meinst du dazu?
|
|
Torsten
      
Beiträge: 160
|
Verfasst: Do 27.06.02 20:47
Moinsen!
Hmm, das ist meiner Meinung nach nicht das Richtige.
Zum einen schreckt ja schon der Name RemoteAccess ab. Es geht dabei wohl eher darum, ob remote access zugelassen (eingeschaltet) wird.
In meiner Registry gibt es noch nicht mal diesen Wert. Ich wäre also offline beim Schreiben dieses Textes
Tja, dennoch werde ich mich mal weiter erkundigen.
Nur schade, dass meine Funktion nicht arbeitet. Jedenfalls nicht immer. Gut zu wissen.
Grüße
Torsten
|
|
Torsten
      
Beiträge: 160
|
Verfasst: Do 27.06.02 20:59
Moinsen!
Mir fällt da gerade noch ein anderer Weg ein.
Ist bestimmt nicht ganz sauber, sollte aber klappen.
Wenn also obiges Beispiel nicht klappt, dann besteht noch immer die Möglichkeit, einen Verbindungsaufbau zu einer bekannten IP im Netz zu versuchen.
Also beispielsweise über TClientSocket zu einer bekannten IP (da bietet sich eine Webseite über Port 80) an.
Das Problem ist nur, dass auch diese IP mal nicht erreichbar sein kann, obwohl man selber online ist. (auch Server stürzen mal ab  )
Grüße
Torsten
|
|
Stefan
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 27.06.02 21:06
Also bei mir ist dieser Eintrag REMOTEACCESS gibts bei mir schon. Aber wie gesagt: Ich habe keine Ahnung von der Windows Regestry (hat micht immer irgendwie angeschreckt) und leider kein Buch etc. darüber zur Hand.
Haha  ! Grade wollte ich posten, da bist du mir zuvor gekommen!
Das hab ich mir auch schon überlegt. Doch ich meine ich hätte mal gehört, dass sich manche Internet Server auf einen Ping nicht zurückmelden. Dennoch haben gerade 100% der Adressen, die ich versucht habe anzupingen reagiert. Man sollte halt populäre nehmen, wie www.gmx.de oder www.google.de. Die sind ja (fast) immer online.
Ich probiers gleich mal richtig aus. Bis denn.
|
|
Arakis
      
Beiträge: 344
|
Verfasst: Do 27.06.02 22:03
Titel: 2 Möglichkeiten
Mir fallen da zwei Möglichkeiten ein: 1. Abchecken, ob man eine Internet-IP hat, wenn man einen leeren String zurück bekommt, dann ist man halt nicht online. Wie man die Internet-IP abfragt, habe ich gerade in das Internet-FAQ gepostet.
2. Möglichkeit wäre über diese Komonente:
dateien.desk-work.de...enten/tmswebconn.zip
Bis dann

_________________ Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
|
|
FriFra
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Fr 28.06.02 00:15
Das ganze vorhaben ist Unmöglich! Wie soll man auch zwischen Intra und Internet unterscheiden ohne auf externe Resourcen zuzugreifen??? Dieser Zugriff führt allerdings bei den meisten Verbindungsarten zu einer Einwahl, was das ganze sinnlos macht.
Die Einzige Lösung wäre, man würde einen Port reservieren welcher bei allen Verbindungsarten nicht zum Verbindungsaufbau führt. Dann bräuchte man nur noch über diesen Port einen Connect auf einen externen Server zu versuchen. Aber leider wird das nicht gehen, da sich dann alle an diesen Standart halten müssten....
|
|
Arakis
      
Beiträge: 344
|
Verfasst: Fr 28.06.02 00:18
Titel: Sag niemals Nie!
Sag niemals Nie!
Ich probiere dass morgen mal bei mir in der Firma aus.
Bis dann

_________________ Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
|
|
Torsten
      
Beiträge: 160
|
Verfasst: Fr 28.06.02 09:22
Moinsen!
OK, das wäre die eine Möglichkeit.
Doch ich habe da noch was im Kopf. Meines Erachtens nach können die Winshoes Komponenten auch Abhilfe schaffen. Die konnten, so jedenfalls meine Erinnerung, genau feststellen, ob online oder offline. Ein Blick in den Code wäre mal eine Möglichkeit.
Zu finden bei Torry.
Grüße
Torsten
|
|
FriFra
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Fr 28.06.02 10:11
Das können diese Kompos auch nicht, glaub mir! Ich habe selbst ein Lan mit Verbindung nach aussen. Woher wollen denn die Compos wissen, wann der Router online ist? Ohne connect nach aussen geht es nicht, und der bewirkt nun mal meistens einen Verbindungsaufbau...
|
|
Sephiroth
      
Beiträge: 102
|
Verfasst: Fr 28.06.02 11:56
Hmm mal zu dem Lösungsansatz mit dem TClientsocket und TServerSocket. Ich würde das Problem dann folgendermaßen lösen.
Ich versuche über das Internet auf meinen eigenen Server (also 127.0.0.1) zu connecten. Wenn man nämlich bei der Clientsocket nur den "Host" angibt versucht er soweit ich weiss alles übers Internet zu senden. Erst wenn man bei "Address" eine IP eingibt sendet ers Lokal.
Somit könnte man doch feststellen ob man online ist eigentlich...
Werd ich mal am Wochenende ausprobieren...
Was haltet ihr davon?
|
|
FriFra
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Fr 28.06.02 12:35
Nicht ganz richtig...
Wenn ein Hostname angegeben wird, wird eine DNS Auflösung gemacht, diese führt i.d.R. zum Verbindungsaufbau. Gibt man eine IP an gibt es auf jeden Fall keine DNS Auflösung.
Nun müsste man aber versuchen zu einem externen Host zu connecten um wirklich sicher zu sein, das man offline ist. Und bei genau diesem Versuch scheitert der Ansatz, da dies meist zum Verbindungsaufbau führt!
Zitat: | Ich versuche über das Internet auf meinen eigenen Server (also 127.0.0.1) zu connecten. |
Das funktioniert nicht, da 127.0 bzw 192.168 private IP's sind, welche Du übers Internet nie erreichen wirst! Das geht nur mit der IP die Du vom ISP bekommst.
|
|
Torsten
      
Beiträge: 160
|
Verfasst: Fr 28.06.02 13:42
Hmm, wenn also ein Verbindungsaufbau gemacht wird, dann ist das freilich auch keine Lösung. Schade eigentlich. War nur eine Idee.
Und die Winshoes können das also auch nicht. Wie dumm.
Aber wir finden bestimmt eine Lösung, gemeinsam.
Grüße
Torsten
|
|
FriFra
      
Beiträge: 557
Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
|
Verfasst: Fr 28.06.02 17:25
Das kann nur funktionieren, wenn man für seine Verbindung (Router. Modem etc.) jeweils eine Rolle definieren könnte, wo über einen bestimmten Port nur bei bestehender Verbindung Pakete durchgelassen werden. Nur der Router "weis" ob er online ist...
Nochwas zu Routern. Ich habe ein Tool geschrieben, welches mit sehr vielen gängigen Routern zusammenarbeitet und deren Status ausliest ohne einen Verbindungsaufbau auszulösen. Die Verbindungsdaten werden dann auch in die Registry geschrieben.
|
|
ArnF
Hält's aus hier
Beiträge: 8
|
Verfasst: Fr 13.09.02 21:51
Ich hab mal eine Komponente gefunden, mit der der Status einfach überprüft wurde. Mit einem Timer wird ständig die eigene IP-Adresse abgefragt. Hat man eine Adresse, so ist man online.
Hab es nicht ausprobiert und hab von Netzwerken nicht allzuviel Ahnung, aber könnte doch funktionieren.
_________________ Das Leben ist ein Sch...-Spiel, aber die Grafik ist cool.
|
|
|