Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi DSL-Verbindungsmonitor! (https://www.delphipraxis.net/35419-dsl-verbindungsmonitor.html)

richard_boderich 6. Dez 2004 20:53


DSL-Verbindungsmonitor!
 
hallo leute,

ich moechte mir ein kleines tool programmieren, das den
zustand meiner dsl verbindung erkennt, meine aktuelle internet-ip anzeigt
und bei trennung wieder verbindet.

hatt jemand eine idee oder vorschlag wie ich beginnen kann?

indy oder api und sockets?

es gibt doch auch ein problem dem verbindungsstatus herauszufinden,
wenn ich im forum richtig gelesen hab.

danke schonmal vorweg

euer richard :)

PierreB 6. Dez 2004 20:57

Re: DSL-Verbindungsmonitor!
 
moin,


also das mit dem verbinden und trennen dürfte wohl etwas komplizierter werden. ;)

wie du deine ip herausbekommst findest du hier:
http://www.delphipraxis.net/internal...5&highlight=ip

//Edit

hier weitere links (müsste erstma alles ein was du suchst ;))
http://www.delphi-source.de/tipps/?id=160
http://www.delphi-source.de/tipps/?id=169
http://www.delphi-source.de/tipps/?id=595

richard_boderich 6. Dez 2004 21:02

Re: DSL-Verbindungsmonitor!
 
hi delpmen,

ich muss dazu sagen das ich nicht über nen router gehe sondern per
dfü verbindung einwaehle. da muesst es doch apis geben um den
connection status rauszufinden oder?

der code den du mir empfohlen hast will ich nicht nehmen,da ich da
auf externe internetdienste angewiesen bin. sind die mal nicht erreichbar
is kacke mit der funktion

PierreB 6. Dez 2004 21:04

Re: DSL-Verbindungsmonitor!
 
^^ siehe oben ;)

Zitat:

will ich nicht nehmen,da ich da
auf externe internetdienste angewiesen bin
was meinst du damit ?

richard_boderich 6. Dez 2004 21:09

Re: DSL-Verbindungsmonitor!
 
he danke delphmen,

die neuen links sind das was ich suchte.
many thx :)

Dakuba 6. Dez 2004 21:13

Re: DSL-Verbindungsmonitor!
 
Das ist aus der Delphi Source Library hoffe des hilft dir:


Folgender Code stellt eine komplette Unit eines Formulars dar, die beim Klicken auf den Button feststellt, ob eineVerbindung ins Internet besteht oder nicht.
Delphi-Quellcode:
unit CheckInternetConnection1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Registry, WinSock, WinInet;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
      { Private-Deklarationen }
    public
      { Public-Deklarationen }
    end;

const
  cERROR_BUFFER_TOO_SMALL = 603;
  cRAS_MaxEntryName = 256;
  cRAS_MaxDeviceName = 128;
  cRAS_MaxDeviceType = 16;

type
  TConnectionType = (ctNone, ctProxy, ctDialup);
  ERasError = class(Exception);
    HRASConn = DWord;
    PRASConn = ^TRASConn;
    TRASConn = record
      dwSize: DWORD;
      rasConn: HRASConn;
      szEntryName: array[0..cRAS_MaxEntryName] of Char;
      szDeviceType: array[0..cRAS_MaxDeviceType] of Char;
      szDeviceName: array [0..cRAS_MaxDeviceName] of char;
    end;
    TRasEnumConnections = function (RASConn: PrasConn; var BufSize: DWord;
     var Connections: DWord): LongInt; stdcall;

var
  Form1: TForm1;

function ConnectedToInternet: TConnectionType;
function RasConnectionCount: Integer;

implementation

{$R *.DFM}

function ConnectedToInternet: TConnectionType;
var Reg: TRegistry;
  bUseProxy: Boolean;
  UseProxy: LongWord;
begin
  Result := ctNone;
  Reg := TRegistry.Create;
  with REG do
    try
      try
        RootKey := HKEY_CURRENT_USER;
        if OpenKey('Software\Microsoft\WindowsCurrentVersion\Internet settings',
        false) then begin
          if GetDataType('ProxyEnable') = rdBinary then
            ReadBinaryData('ProxyEnable', UseProxy, SizeOf(LongWord))
          else begin
            bUseProxy := ReadBool('ProxyEnable');
            if bUseProxy then UseProxy := 1
            else UseProxy := 0;
          end;
          if (UseProxy<>0) and (ReadString('ProxyServer')<>'' ) then Result := ctProxy;
        end;
      except
      end;
    finally
      Free;
    end;
    if Result = ctNone then begin
      if RasConnectionCount > 0 then Result := ctDialup;
    end;
end;

function RasConnectionCount: Integer;
var RasDLL: HInst;
  Conns: array[1..4] of TRasConn;
  RasEnums: TRasEnumConnections;
  BufSize: DWord;
  NumConns: DWord;
  RasResult: Longint;
begin
  Result := 0;
  RasDLL := LoadLibrary('rasapi32.dll');
  if RasDLL = 0 then exit;
  try
    RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
    if @RasEnums = nil then
      raise ERasError.Create('RasEnumConnectionsA not found in rasapi32.dll');
    Conns[1].dwSize := Sizeof (Conns[1]);
    BufSize := SizeOf(Conns);
    RasResult := RasEnums(@Conns, BufSize, NumConns);
    if (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns;
  finally
    FreeLibrary(RasDLL);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Status: TConnectionType;
  sMsg: string;
begin
  Status := ConnectedToInternet;
  if Status = ctDialup then sMsg := 'Im Internet!';
  if Status = ctNone then sMsg := 'Nicht im Internet!';
  if Status = ctProxy then sMsg := 'Proxyserver';
  ShowMessage(string(sMsg));
end;

end.

Luckie 6. Dez 2004 21:16

Re: DSL-Verbindungsmonitor!
 
Setzen 6:
Zitat:

---------------------------
Project1
---------------------------
Nicht im Internet!
---------------------------
OK
---------------------------
Ich bin aber definitiv online, da ich gerade diesen Beitrag schreibe. ;)

Matze 6. Dez 2004 21:22

Re: DSL-Verbindungsmonitor!
 
Der Code dürfte auch nur Überprüfen, ob man sich mittels DFÜ-Verbindung im Internet befindet, ist dies nicht der Fall, wird die Verbindung nicht erkannt.

PierreB 6. Dez 2004 21:22

Re: DSL-Verbindungsmonitor!
 
hmmm... :gruebel:

bei mir gehts auch net !

Zitat:

Nicht im Internet

richard_boderich 6. Dez 2004 21:45

Re: DSL-Verbindungsmonitor!
 
so jungens bin jetz am coden,

mir fehlt aber immer noch ne methode die ip des dfü adapters abzufragen.
hatt da denn keiner nen api call zur hand?

Spasskeks 7. Dez 2004 21:53

Re: DSL-Verbindungsmonitor!
 
Also wegen der IPs hab ich hier ne Function für Dich, die dir alle IPs, die der PC "besitzt" anzeigt... Die einzelnen IPs werden mit einem ";" getrennt. Bei "uses" noch "winsock" eifügen, denn sollte des laufen....

Delphi-Quellcode:
Function GetLocalIPs: String;
type PPInAddr= ^PInAddr;
var
wsaData: TWSAData;
HostInfo: PHostEnt;
HostName: Array[0..255] of Char;
Addr: PPInAddr;
begin
Result:='';
if WSAStartup($0102, wsaData)<>0 then exit;
try
if gethostname(HostName, SizeOf(HostName)) <> 0 then exit;
HostInfo:= gethostbyname(HostName);
if HostInfo=nil then Exit;
Addr:=Pointer(HostInfo^.h_addr_list);
if (Addr=nil) or (Addr^=nil) then exit;
Result:=StrPas(inet_ntoa(Addr^^));
inc(Addr);
while Addr^<>nil do begin
Result:=Result+';'+StrPas(inet_ntoa(Addr^^));
inc(Addr);
end;
finally
WSACleanup;
end;
end;

richard_boderich 7. Dez 2004 22:19

Re: DSL-Verbindungsmonitor!
 
Liste der Anhänge anzeigen (Anzahl: 1)
so leutz,

version 0.1 von meinem dsl-verbindungsmonitor ist fertig (prog ist im anhang, nur exe)
habe prog bei mir erfolgreich getestet, uebernehme jedoch keinerleih haftung für eventuell auftretende schaeden -> nutung auf eigene gefahr!

//Edit Prog soll internetverbindung staendig online halten! wenn ihr trennen wollt, prog einfach beenden, und dann verbindung trennen
//edit bei druck auf trennen, baut prog sofort wieder internetverbindung auf (sorry ist halt noch alpha)

Einschraenkungen:

1.einwahl funzt nur über die standard dfü-verbindung, kein routersupport (vielleicht spaeter)
2.einwahl nutz den ie-dailer ->ie eigenschaften ->verbindungen
3.ip anzeige fehlerhaft (wird gerade gefixt) :)
4.nutzername+passwort muessen in dfü-verbindung gespeichert sein ->wichtig für einwahl ohne benuterabfrage

Verbesserungsvorschlaege, to do list

1.einwahl direkt über Ras-dfü , und nich über ie-dailer
2.anzeige der ip, des eigenen dns hostnamen's, Ntp zeitanzeige
3.dfü verbindung auswaehlbar (bei mehreren vorhandenen)
4.anwahltimer

ich versichere, das das prog nur das tut was es soll, naehlich eine internetverbindung aufbauen, sonst nichts
es enthaelt weder schadensroutinen noch trojaner oder andere malware! (nur zu meiner rechtlichen absicherung)

wuerde mich ueber anregungen,hinweise und bugreports von euch sehr freuen!

bis denne

Richard

richard_boderich 8. Dez 2004 18:05

Re: DSL-Verbindungsmonitor!
 
wirklich so wenig interesse ? :(

*PUSH*

richard_boderich 9. Dez 2004 11:09

Re: DSL-Verbindungsmonitor!
 
ok leutz hab probleme

hab jetz die sntp zeitanzeige integriert.
funtz auch supi, aber wenn die internetverbindung stark belastet
wird (z.b. durch sharingprogs) lastet die indy anzeige den rechner zu
100 prozent aus, will sagen anwendung reagiert nich solange bis die
abfrage beendet ist. hatt da jemand nen vorschlag?

jim_raynor 9. Dez 2004 11:23

Re: DSL-Verbindungsmonitor!
 
Zitat:

Zitat von richard_boderich
wirklich so wenig interesse ? :(

*PUSH*

Vielleicht benutzen so viele Leute einen Router und müssen sich nicht einwählen ... so wie ich z.B. :???:

Orbmu2k 9. Dez 2004 11:32

Re: DSL-Verbindungsmonitor!
 
Selbst wenn nicht sind diese Funktionen alle schon in meinem Windows (Ich hab XP) drin.

Flax 26. Jan 2005 12:13

Re: DSL-Verbindungsmonitor!
 
Welche Indy-Komponente benutzt du denn?

Flax 26. Jan 2005 12:14

Re: DSL-Verbindungsmonitor!
 
Soweit ich weiss gibts da kein vernümpftiges Tool in WinXP um den Traffic sinnvoll anzeigen zu lassen.

Oder? :?: :?: :?: :?: :?:

ReDoX 26. Jan 2005 12:29

Re: DSL-Verbindungsmonitor!
 
Wenn das tool auch Router unterstützen würde dann wäre es Perfekt :thumb:.
Aber ich glaube das ,dass mit Delphi nicht möglich ist ,oder?
Mfg MrScholz

endeffects 31. Jan 2005 18:56

Re: DSL-Verbindungsmonitor!
 
also grundsätzlich kann man jedes windows so
einrichten das bei einer getrennten dfü verbindung
umgehend neu verbunden wird, vielleicht wäre es
hier sinnvoller die windows eigenen einstellung
umzuarbeiten bzw zu kontrollieren


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