Entwickler-Ecke

Internet / Netzwerk - Eigene IP?


Rool - Sa 23.11.02 17:46
Titel: Eigene IP?
Wie bekomme ich meine eigene IP? Also nicht die lokale sondern die, wenn man im Netz ist!


Henry - Sa 23.11.02 18:38

Hallo,

Diese Unit habe ich mal irgendwo in den Weiten des Internets oder einem Delphiforum gefunden (Ich möchte mich ja nicht mit fremden Federn schmücken). Leider weiß ich nicht mehr von wem die Unit ist :( Ich kann also nichts näheres dazu sagen. Funktioniert bei mir aber ganz gut, mit dem anzeigen der IP.

Du mußt dann folgendes aufrufen

Delphi-Quelltext
1:
Label1.Caption := GetRASIP(1);                    

damit erhältst die IP die Dein Provider dir beim einwählen gegeben hat.

Natürlich nicht vergessen Unit einzubinden :)
Unit siehe unten.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
unit InternetIP;

interface

uses Windows;

type
  PRasConn = ^TRasConn;
  TRasConn = record
  dwSize: DWORD;
  hRasConn: THandle; 
  szEntryName: array[0..256of char;
  szDeviceType: array[0..16of char;
  szDeviceName: array[0..128of char;
end;

TRasPPPIP = record
  dwsize: DWORD;
  dwerror: DWORD; 
  szlpAddress: array[0..15of char;
end;

function RASGetProjectionInfo(hRasConn: THandle;
  RasProjection: DWORD;
  var lpRasPPPIP: TRasPPPIP;
  var lpcb: DWORD): DWORD;
  stdcall;

function RASEnumConnections(lpRasConn: Pointer;
  var lpcb: DWORD;
  var lpcConnections: DWORD): DWORD; 
  stdcall

function GetRASIP(Nr: Integer): String;

implementation 

function RASEnumConnections; 
external 'RASAPI32.DLL' name 'RasEnumConnectionsA'
function RASGetProjectionInfo;
external 'RASAPI32.DLL' name 'RasGetProjectionInfoA'

function GetRASIP(Nr: Integer): String
var 
  RasCon:Array[1..25of TRasConn;
  RASSize, RASFilledInBuffer, RASIPSize: DWord; 
  RASPPIp:TRasPPPIP; 
  IPPas:Array[1..16of Char; 
begin 
  Result:='';
  Rascon[1].dwSize := SizeOf(TRasConn); 
  RASSize := SizeOf(TRasConn); 
  if RasEnumConnections(@RasCon,RASSize,RASFilledInBuffer)=0 then begin 
    RASPPIp.dwsize:=SizeOf(TRASPPPIp);
    RASIPSize:=SizeOf(TRASPPPIp); 
    RASGetProjectionInfo(RasCon[Nr].hRasConn,$8021,RASPPIp,RASIPSize); 
    Result:=RASPPIp.szlpAddress;
  end
end;

end.


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt


Savage - So 24.11.02 11:55

Hi,

mit der Unit muss man jedoch vorsichtig sein, weil diese Funktion nur für Dial-Up Connections funktioniert. Funktionieren dürfte sie nicht bei Standleitungen oder Internetzugängen via Proxy.

MfG
Savage


Henry - So 24.11.02 14:44

Wie gesagt, ich habe sie nicht entwickelt.
Wenn mann sich aber über DFU einwählt funktioniert es.
Soviel kann ich dazu sagen.

Aber Danke für den Hinweis


bis11 - So 24.11.02 17:08

Schaut euch mal diese beiden Links an :

http://www.swissdelphicenter.ch/de/showcode.php?id=67

http://www.swissdelphicenter.ch/de/showcode.php?id=965


patmann2001 - Mo 25.11.02 00:26

Hallo

Warum in die Ferne schweifen, wenn das gute liegt so nah? :roll:
Siehe mal den Thread [url=http://www.entwickler-ecke.de/viewtopic.php?t=120]
Wie realisiere ich ein Internet-/Netzwerkchat? [/url] in unsem FAQ dort steht folgende Procedure drin.
Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function getIPs: Tstrings; 
type 
 TaPInAddr = array[0..10of PInAddr; 
 PaPInAddr = ^TaPInAddr; 
var 
 phe: PHostEnt; 
 pptr: PaPInAddr; 
 Buffer: array[0..63of Char; 
 I: Integer; 
 GInitData: TWSAData; 
begin 
 WSAStartup($101, GInitData); 
 Result := TstringList.Create; 
 Result.Clear; 
 GetHostName(Buffer, SizeOf(Buffer)); 
 phe := GetHostByName(buffer); 
 if phe = nil then Exit; 
 pPtr := PaPInAddr(phe^.h_addr_list); 
 I  := 0
 while pPtr^[I] <> nil do 
 begin 
  Result.Add(inet_ntoa(pptr^[I]^)); 
  Inc(I); 
 end
 WSACleanup; 
end;

Die benutze ich auch, sie gibt in der Line[0] die LAN IP zurück und in Line[1] die WAN IP. Ausserdem könnt ihr wie unter Wie lese ich die Internet-IP aus? [http://www.entwickler-ecke.de/viewtopic.php?t=294] im FAQ folgende Internetaddresse finden.
Zitat:
http://checkip.dyndns.org
Damit könnt Ihr überprüfen ob euch die Procedure die richtige IP wiedergegeben hat.

cu Patmannd

Moderiert von user profile iconTino: "auq.de" durch "entwickler-ecke.de" ersetzt
Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt