ورود

View Full Version : بدست آوردن مشخصات یک IP



Modernidea
جمعه 23 مهر 1389, 12:27 عصر
سلام

تابع API ای که مشخصات IP رو برگردونه وجود داره؟

(دلفی7 - ویندوز 7)

mofrad
جمعه 23 مهر 1389, 12:55 عصر
سلام
اين تابع win32 api:

GetAdaptersInfo()
و تابعهاي زير

gethostname() and gethostbyname()
از كامپوننت indy (TIdHTTP ) استفاده كنيد

Modernidea
جمعه 23 مهر 1389, 13:17 عصر
اين تابع win32 api:
کد:
GetAdaptersInfo()

من از دلفی7 استفاده میکنم. این تابع موجود نیست. مگه جزو API ویندوز نیست؟ من Windows رو در Uses اضافه کردم.


و تابعهاي زير
کد:
gethostname() and gethostbyname()
از كامپوننت indy (TIdHTTP ) استفاده كنيد

هم از تب سرور و هم از تب کلایت که این کامپوننت رو گذاشتم رو فرم هیچکدوم این توابع رو نداشت؟!

mofrad
جمعه 23 مهر 1389, 16:09 عصر
اگر اون جواب نمیده از کامپوننت زیر استفاده کنید. رایگانه و همه چیز درباره Ip رو داره.
مثال هم داره.
Internet Protocol Helper (http://www.magsys.co.uk/download/software/magiphlp24.zip)
موفق باشید.

Modernidea
جمعه 23 مهر 1389, 17:52 عصر
ممنون اما

باید از API یا از کامپوننت های خود دلفی استفاده کنم.

لطفا اساتید عزیز راهی رو نشونم بدن.

mofrad
شنبه 24 مهر 1389, 00:00 صبح
سلام. دوباره برگشتم!
تابع های فوق از توابع کتابخانه winsock هستند.
دو تا لینک زیر هم مربوط به نحوه بدست آوردن آی پی سیستم هستند:
http://delphi.about.com/od/networking/l/aa103100a.htm

http://exampledelphi.com/delphi.php/tips-and-tricks/get-local-ip-address/ (http://exampledelphi.com/delphi.php/tips-and-tricks/get-local-ip-address/)

من تا مشکلتون رو حل نکنم دست بردار نیستم!:لبخند:

Modernidea
شنبه 24 مهر 1389, 00:44 صبح
واقعا خوشحال شدم از این حرفتون!

من سرچ زیاد کرد بعد اومدم این تاپیک رو زدم.

کدهایی که شما زحمت کشیدید رو قبلن تست کردم، جواب هم میده اما نه اونی که من میخوام.
مثلا میخوام بدونم آی پی مورد نظر قابل ریموت هست یا نه؟

این کامپوننتی که معرفی کردین یکی از فیلدهایی که مشخصات رو میده شامل Remote هست!
آیا این همون Remote Desktop هست یا نه؟

mofrad
شنبه 24 مهر 1389, 01:18 صبح
خواهش میشه.
بله اگه اشتباه نکنم همون remote desktop هست.
البته من خیلی با این موضوع کار نکردم ولی خوشحال میشم بتونم کمک کنم.

Modernidea
شنبه 24 مهر 1389, 10:39 صبح
خوب یکی بیاد کمک کنه دیگه :لبخند:

الان من چطوری با Indy یا API بفهمم که IP مورد نظر ریموت میشه یا نه؟

mofrad
شنبه 24 مهر 1389, 23:50 عصر
فکر کنم این لینک بتونه کمک کنه:
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_20674793.html

Modernidea
یک شنبه 25 مهر 1389, 00:46 صبح
این فقط سوال رو نشون میده!
عضویتش هم پولیه!
من کارت ویزا... ندارم برای عضویت!
راه دیگه ای داره؟

mofrad
یک شنبه 25 مهر 1389, 08:42 صبح
جالبه من که جوابش رو میبینم!


These code can resolve the HOST NAME through IP ADDRESS:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock;

type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
WSAData:TWSAData;
p:PHostEnt;
sIP:string;
InetAddr:dword;
begin
WSAStartup(2,WSAData);
sIP:=Edit1.Text;
InetAddr:=inet_addr(PChar(sIP));

try
try
p:=GetHostByAddr(@InetAddr,Length(sIP),PF_Inet);

memo1.Lines.Add('IP Address:'+sIP);
memo1.Lines.Add('Host:'+p^.h_name);
memo1.Lines.Add('============================');
finally
WSACleanup;
end;
except
Memo1.Lines.Add('Can''t resolve!');
end;
end;

end.

Modernidea
یک شنبه 25 مهر 1389, 11:01 صبح
واقعا ممنونم که وقت میزارید و جواب سوال منو میدید
اما این کد شبیه کدهایی قبلی است.
این کد تو همه سایت ها است.
IP میگیره و نام هاست رو میده.
البته کسی هم که در اونجا سوال کرده هم فقط همین رو میخواست که نام هاست های مربوط به IP های شبکه اش رو بدونه و نه چیز دیگه ای.

نمیدونم شاید همین که نام هاست رو میده یعنی قابل ریموت است؟!
شما اطلاعی ندارید از این موضوع؟
کسی هست که شبکه واقعی داشته باشه و این کد رو تست کنه؟

من ایشلا تا امشب vmware نصب میکنم و امتحانش میکنم و نتیجه رو میگم.

khazaie01
جمعه 28 آبان 1389, 20:49 عصر
سلام دوست عزیز
می خواهید تشخیص دهید که آیا Remote Desktop بر روی آیپی مورد نظر فعال است ؟
Remote Desktop یا همان RDP بعد از فعال شدن ، پورت TCP شماره 3389 را باز می کند و به آن گوش می دهد ، پس فقط کافیست شما بررسی کنید که آیا پورت TCP شماره 3389 بر روی سیستم مورد نظر باز است یا نه ! با چند خط کد نویسی به راحتی میتوانید این کار را انجام دهید.

Modernidea
شنبه 29 آبان 1389, 13:43 عصر
ممنون اما نوش دارو بعد از مرگ سهراب بود...

این یک راهش است که از کامپوننت Indy استفاده کردم.
این سورس با دادن IP مورد نظر از صفر شروع میکنه و تا رنج مورد نظر تک تک IP ها رو تست میکنه و به محض اینکه به IP ای برسه که پورتش باز باشه پیغام میده.

function TForm1.RemoteIP(const APort: Integer; const IPAddress: string):Boolean;
begin
try
try
IdTCPClient1.Host := IpAddress;
IdTCPClient1.Port := APort;
IdTCPClient1.Connect(300);
IdTCPClient1.Connected;
result := true;
except
result := false;
end;
finally
IdTCPClient1.Disconnect;
end;
end;
procedure TForm1.stbtnClick(Sender: TObject);
var
ip: String;
i, p, range : Integer;
begin
p := 0;
ip := ipedt.Text;
i := 1;
while i < 4 do
begin
p := Pos('.',ip) + p;
ipedt.SelStart := p+1;
ipedt.SelLength := ipedt.GetTextLen;
ip := ipedt.SelText;
i := i+1;
end;
ipedt.SelStart := p+1;
ipedt.SelLength := ipedt.GetTextLen;
range := StrToInt(ipedt.SelText);

ipedt.SelStart := 0;
ipedt.SelLength := p+1;
ip := ipedt.SelText;

ipedt.Enabled := False;
stbtn.Enabled := False;
for i := 0 to range do
begin
Caption := ip+IntToStr(i);
if RemoteIP(StrToInt(portedt.Text), ip+IntToStr(i)) then
begin
ShowMessage(ip+IntToStr(i)+' : ãæÑÏ äÙÑ IP');
Break;
end
else
begin
if (i = range) then
begin
ShowMessage('íÇÝÊ äÔÏ');
Break;
end
else
//
end;
end;
Caption := 'ÊÓÊ ÑíãæÊ ÏÓ˜Êǁ';
ipedt.Enabled := True;
stbtn.Enabled := True;
end;


فایل سورس و اجرایی رو هم ضمیمه کردم.

khazaie01
شنبه 29 آبان 1389, 14:22 عصر
ممنوووون دوست عزیز
این برنامه که نوشتید ، دقیقا همون چیزیست که گفتم ... البته برای بهینه شدن برنامه ، سورس یک پورت اسکنر را بگیرید و بررسی کنید ، فکر کنم یک نمونه پورت اسکنر را در همین سایت دیدم.
دوست عزیز بهتر بود همان موقع که به نتیجه رسیدید ، سورس ( یا روش موجود ) را قرار می دادید تا بقیه دوستان هم استفاده می کردند ، بازم ممنووووووون.