سحب IP address WAN
#1
السلام عليكم
هل يمكن سحب 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
شكرا
الرد
#2

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

ان كنت متصل من جهازك فالكود السابق يظهر الIP صحيح اضافة الى IP كرت الشبكة LAN
ان كان الاتصال بمكان اخر غير جهازك فلا يوجد حل سوى استخدام طرف خارجي مثل موقع whatismyip
الرد
#3
السلام عليكم
نعم كما قال اخي عبد العزيز إن كنت متصل
سيظهر ايبي 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; 
الرد
#4
لم تعمل
كود :
http://i891.photobucket.com/albums/ac114/evilkidaz/LAWONLY.jpg
عندما اكتب
كود :
Result := inet_ntoa(pptr^[1]^);

يضهر لي access violation
الرد
#5

إقتباس :لم تعمل
لانك غير متصل بالانترنت مباشرة
إقتباس :access violation
طبيعي، تحاول اخذ قيمة شيئ غير موجود
الرد
#6
إدا كنت غير متصل مباشرة
اسجب ايبي من المواقع التي تقدم هده الخدمة
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; 
الرد
#7
yassine_hell كتب :السلام عليكم
هل يمكن سحب ip address wan عن طريق delphi بدون اللجوء الى موقع مثل whatismyip ؟؟


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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم