PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die eigene Internet Ip anzeigen lassen


SAV
20.05.2002, 11:27
Hallo, ich möchte gerne ein Programm coden das wenn ich auf ein Button klicke er mir in einem EditFeld die eigene Internet IP anzeigt, also nicht die Locale Netzwerk Ip sondern die Internet IP. Weiß jemand von euch wie das geht, wenn ja währe es super wenn er mir sagen könnte wie.


Felix Kaiser
20.05.2002, 11:42
Für DFÜ Verbindungen weiß ich es, da gehts ganz einfach über die RASAPI, aber afaik werden ADSL nicht dort eingetragen (kanns leider selber nicht testen). Daher würde dir der RASAPI Code hierfür nichts nützen... :(

Jan Krüger
21.05.2002, 16:13
verbindungen über z.B. T-Online DSL gehen auch übers DFÜ. Dafür funktionierts dann auch.

Felix Kaiser
21.05.2002, 18:14
const
RAS_MaxEntryName = 256;
RAS_MaxDeviceType = 16;
RAS_MaxDeviceName = 128;
RAS_MaxIpAddress = 15;
RASP_PPPIP = $8021;

type
TRasConn = record
dwSize,hrasconn: integer;
szEntryName: array[0..RAS_MaxEntryName] of char;
szDeviceType: array[0..RAS_MaxDeviceType] of char;
szDeviceName: array[0..RAS_MaxDeviceName] of char;
end;
TRasConns = array[0..15] of TRasConn;
PRasConns = ^TRasConns;
PInteger = ^Integer;
TRasStats = record
dwSize,dwBytesXmited,dwBytesRcved,dwFramesXmited,dwFramesRcved,dwCrcErr,dwTimeoutErr,
dwAlignmentErr,dwHardwareOverrunErr,dwFramingErr,dwBufferOverrunErr,
dwCompressionRatioIn,dwCompressionRatioOut,dwBps,dwConnectDuration: integer;
end;
PRasStats = ^TRasStats;
TRasPppIp = record
dwSize,dwError: integer;
szIpAddress,szServerIpAddress: array[0..RAS_MaxIpAddress] of char;
end;
PRasPppIp = ^TRasPppIp;

procedure RasEnumConnections(lprasconn: PRasConns; lpcb,lpcConnections: PInteger); stdcall; external ´RASAPI32.DLL´ name ´RasEnumConnectionsA´;
function RasGetConnectionStatistics(hRasConn: integer; ras_stats: PRasStats): integer; stdcall; external ´RASAPI32.DLL´ name ´RasGetConnectionStatistics´;
procedure RasGetProjectionInfo(hRasConn,rasprojection: integer; lpprojection: pointer; lpcb: PInteger); stdcall; external ´RASAPI32.DLL´ name ´RasGetProjectionInfoA´;

procedure DetectOtherRASConnections;
var
rasconns: PRasConns;
bufsize,numconn,infsize: PInteger;
rasstats: PRasStats;
raspppip: PRasPppIp;
i: integer;
begin
New(rasconns);
New(bufsize);
New(numconn);
bufsize^:= sizeof(rasconns^);
rasconns^[0].dwSize:= sizeof(TRasConn);
RasEnumConnections(rasconns,bufsize,numconn);
for i:= 1 to numconn^ do with rasconns^[i-1] do begin
New(rasstats);
rasstats^.dwSize:= sizeof(rasstats^);
RasGetConnectionStatistics(hRasConn,rasstats);
New(raspppip);
raspppip^.dwSize:= sizeof(raspppip^);
New(infsize);
infsize^:= sizeof(raspppip^);
RasGetProjectionInfo(hRasConn,RASP_PPPIP,raspppip,infsize);
{ raspppip^.szIpAddress = PChar, lokale IP (Client) }
{ raspppip^.szServerIpAddress = PChar, Server IP }
{ rasstats^.dwBps = Bandbreite in bps }
Dispose(infsize);
Dispose(raspppip);
Dispose(rasstats);
end;
Dispose(numconn);
Dispose(rasconns);
Dispose(bufsize);
end;


Hier mein Code, den ich dank fehlender Units aus popeligen MS Headerfiles entnehmen und fertigbauen musste. Ich garantiere trotzdem NICHT dafür dass auch jede DSL Verbindung erkannt wird. Aber mit Modem und ISDN Verbindungen funzt das einwandfrei :)

Hinweis: RasGetProjectionInfo gibts erst ab WinNT5.0+. Bei Win9x o. WinME gibts die nicht.

mod7t9z730
02.06.2002, 23:23
ich bin noch ziemlich neu (hier und in delphi ;) ) das da oben sieht
schon ganz schön kompliziert aus hehe
ich habs einfach mit php erledigt. das prob is eben nur,
dass man einen php datei wo haben muss, die das erledigt.

hier ist mein kleines prog:
http://www.modseven.de/index.php?src=code

dann "ip get" laden. es startet sich, holt die ip und beendet sich dann wieder.
sozusagen ein spiegelverfahren ;) und wenn man einen router hat geht es eben auch.
du brauchst die vollversion hehe für die fastnet komponenenten bei meiner variante (sehr noobhaft):


unit ipget;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Clipbrd, Psock, NMHttp;
type
TForm1 = class(TForm)
Netz: TNMHTTP;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Ini: TextFile;
Url,Pat: String;
implementation
{$R *.dfm}
//so hier ist der eigentlich teil
procedure TForm1.Button1Click(Sender: TObject);
begin
Pat := 'ipget.ini';
AssignFile(Ini,Pat);
Reset(Ini);
Readln(Ini,Url);
CloseFile(Ini);
try
Netz.Get(Url);
Netz.Disconnect;
Clipboard.AsText := Netz.Body;
Application.Terminate;
except
MessageDlg('Entweder ist der Server down' + #13 + #10 + 'oder du bist nicht im Netz.', mtInformation, [mbOK], 0);
Application.Terminate;
end;
end;
end.


eben noch eine kleine konfigurationsdatei in der man die url verändern kann.
bei mir ist es http://www.modseven.de/ip.php.

sy