Autor Beitrag
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Do 27.06.02 21:56 
Häufig benötigt man für Internetanwendungen die eigene Internet-IP. Diese Unit liest die aktuelle IP einer Wählverbindung per RASAPI32.DLL aus:
ausblenden volle Höhe 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 DynamicIP; 
 
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.

Mit GetRASIP(1) bekommt man die aktuelle IP dann zurück.

Bis dann
Arakis


Hinweis: Da dieser Ansatz auf einer Wählverbindung basiert, wird der Code bei z.B. einer DSL-Anbindung und einem NAT-Router nicht funktionieren. Hier ist eine Lösung, die auch mit einem NAT-Router funktioniert.

Moderiert von user profile iconNarses: Beitrag überarbeitet.

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!