delphi4arab منتديات دلفي للعرب

نسخة كاملة : سحب IP address WAN
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
هل يمكن سحب IP Address WAN عن طريق delphi بدون اللجوء الى موقع مثل whatismyip ؟؟
جربت هذا الكود لكن دائما يضهر لي IP LAN

كود :
function TForm1.ReadIPs: TStrings; type TaPInAddr = array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var Buffer: array[0..63] of AnsiChar; iI: Integer; PPtr: PaPInAddr; pHE: PHostEnt; 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); iI := 0; while pPtr^[iI] <> nil do begin Result.Add(Inet_NToA(PPtr^[iI]^)); Inc(iI); end; WSACleanup; end;



اضن لانني خلف Router
شكرا

وعليكم السلام ورحمة الله

ان كنت متصل من جهازك فالكود السابق يظهر الIP صحيح اضافة الى IP كرت الشبكة LAN
ان كان الاتصال بمكان اخر غير جهازك فلا يوجد حل سوى استخدام طرف خارجي مثل موقع whatismyip
السلام عليكم
نعم كما قال اخي عبد العزيز إن كنت متصل
سيظهر ايبي lan + wan
أما إن كنت غير متصل فيظهر lan فقط
===================
Lan
PHP كود :
function GetIPLan: string;
type
  TaPInAddr 
= array[0..10] of PInAddr;
  
PaPInAddr = ^TaPInAddr;
var
  
phe: PHostEnt;
  
pptr: PaPInAddr;
  
Buffer: array[0..63] of Char;
  
GInitData: TWSAData;
begin
  WSAStartup
($101, GInitData);
  
GetHostName(Buffer, SizeOf(Buffer));
  
phe := GetHostByName(buffer);
  if 
phe = nil then Exit;
  
pPtr := PaPInAddr(phe^.h_addr_list);
  
begin
    Result 
:= inet_ntoa(pptr^[0]^);
  
end;
  
WSACleanup;
end; 
Wan
PHP كود :
function GetIPWan: string;
type
  TaPInAddr 
= array[0..10] of PInAddr;
  
PaPInAddr = ^TaPInAddr;
var
  
phe: PHostEnt;
  
pptr: PaPInAddr;
  
Buffer: array[0..63] of Char;
  
GInitData: TWSAData;
begin
  WSAStartup
($101, GInitData);
  
GetHostName(Buffer, SizeOf(Buffer));
  
phe := GetHostByName(buffer);
  if 
phe = nil then Exit;
  
pPtr := PaPInAddr(phe^.h_addr_list);
  
begin
    Result 
:= inet_ntoa(pptr^[1]^);
  
end;
  
WSACleanup;
end; 
Lan +Wan
PHP كود :
function GetIPs: Tstrings;
type
  TaPInAddr 
= array[0..10] of PInAddr;
  
PaPInAddr = ^TaPInAddr;
var
  
phe: PHostEnt;
  
pptr: PaPInAddr;
  
Buffer: array[0..63] of 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; 
لم تعمل
كود :
http://i891.photobucket.com/albums/ac114/evilkidaz/LAWONLY.jpg
عندما اكتب
كود :
Result := inet_ntoa(pptr^[1]^);

يضهر لي access violation

إقتباس :لم تعمل
لانك غير متصل بالانترنت مباشرة
إقتباس :access violation
طبيعي، تحاول اخذ قيمة شيئ غير موجود
إدا كنت غير متصل مباشرة
اسجب ايبي من المواقع التي تقدم هده الخدمة
PHP كود :
function GetIP(): string;
var
 
i: Integer;
 
X, S: AnsiString;
 
HTTP: TIdHTTP;
begin
 HTTP 
:= TIdHTTP.Create(nil);
 try
 
X := HTTP.Get('http://checkip.dyndns.com');
 
i := AnsiPos('Address:',X);
 
i := i+9;
 while 
x[i] <> '<' do begin
 S 
:= S+x[i];
 
inc(i);
 
end;
 
Result := S;
 finally
 
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1
.Text := GetIP;
end; 
yassine_hell كتب :السلام عليكم
هل يمكن سحب ip address wan عن طريق delphi بدون اللجوء الى موقع مثل whatismyip ؟؟


طريقة الموقع سهلة ...