السلام عليكم و رحمة الله و بركاته
إذا دحلت على الموقع التالى myip فإنه يعطيك IP الذى تشغله في سبكة الإنترنت (و ليس في الشيكة المحلية)
سؤالي هو هل يمكن أن نقوم بهذا العمل بواسطة برنامج Delphi ؟
و الجواب بسط جدا :
كلنا يعرف الموقع http://www.whatismyip.org/ فإنه يعطيك رقم IP الخاص بالإنترنت .
و في المرفقات مثال لاسترجاع رقم IP من هذا الموقع .
:monster1:
[COLOR="black"]عمل جميل، بارك الله فيك.
هذه الطريقة تقوم بقراءة عنوان IP المكتوب في صفحة الموقع.
فلا يمكن الوثوق في هذه الطريقة بشكل كامل، فقد يتغير محتوى الموقع أو عنوانه في أي لحظة.
يمكن بنفس الطريقة الحصول على IP ومعلومات حول نوع خط الاتصال واسم الموزع واسم البلد من خلال قراءة محتوى الموقع:
function GetBetween(Str, FirstDemarc, SecondDemarc: String): String; begin Result := Trim(Copy(Str, Pos(FirstDemarc,Str)+length(FirstDemarc), Pos(SecondDemarc, Str)-Pos(FirstDemarc,Str)-length(FirstDemarc))); end;
procedure TForm1.Button1Click(Sender: TObject); Function Ip_Internet : String; Var Acces_Web : TIdHttp; Begin
Acces_Web := TIdHttp.Create(Nil); Try try //or 'http://www.whatismyip.org' to get just IP net. Result := Acces_Web.Get('http://www.ip-adress.com/'); except MessageBox(Handle, 'Connection faild!','Error',MB_OK+MB_ICONERROR); end; Finally Acces_Web.Free; End; End; begin Label1.Caption := GetBetween(Ip_Internet, 'ss: ', '</h2>'); Label3.Caption := GetBetween(Ip_Internet, 'g">', '<br>'); Label2.Caption := GetBetween(Ip_Internet, 'IP: ', '"content2'); Label2.Caption := Copy(Label2.Caption,0,length(Label2.Caption)-51); end;
كما يمكن استخراج صورة علم البلد والخريطة وغير ذلك، أو استخدام مواقع أخرى تقدم معلومات أكثر مثل:
جميل جدا Kachwahad بارك الله فيك .
السؤال المطروح : هل من معلومات أكثر إفادة في تحديد الموقع الدقيق لصاحب الإيبي
أقصد أن مثلا العلم لا يهم في شيء مادام اسم البلد متوفر .
function GetIPAddress: string; var phoste:PHostEnt; Buffer:array[0..100] of char; WSAData:TWSADATA; begin result:=''; if WSASTartup($0101, WSAData) <> 0 then exit; GetHostName(Buffer,Sizeof(Buffer)); phoste:=GetHostByName(buffer); if phoste = nil then begin result:='127.0.0.1'; end else result:=StrPas(inet_ntoa(PInAddr(phoste^.h_addr_list^)^)); WSACleanup; end;
و الذي قمت به ايضا يعمل و بارك الله فيك على المعلومة
function GetLocalIP : string;
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 := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then
begin
Exit;
end;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;