# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه >  بدست آوردن مشخصات یک IP

## Modernidea

سلام

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

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

----------


## mofrad

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

----------


## Modernidea

> اين تابع win32 api:
>  	کد:
>  	GetAdaptersInfo()


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




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


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

----------


## mofrad

اگر اون جواب نمیده از کامپوننت زیر استفاده کنید. رایگانه و همه چیز درباره Ip رو داره.
مثال هم داره.
Internet Protocol Helper
موفق باشید.

----------


## Modernidea

ممنون اما

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

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

----------


## mofrad

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

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

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

----------


## Modernidea

واقعا خوشحال شدم از این حرفتون!

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

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

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

----------


## mofrad

خواهش میشه.
بله اگه اشتباه نکنم همون remote desktop هست.
البته من خیلی با این موضوع کار نکردم ولی خوشحال میشم بتونم کمک کنم.

----------


## Modernidea

خوب یکی بیاد کمک کنه دیگه  :لبخند گشاده!: 

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

----------


## mofrad

فکر کنم این لینک بتونه کمک کنه:
http://www.experts-exchange.com/Prog..._20674793.html

----------


## Modernidea

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

----------


## mofrad

جالبه من که جوابش رو میبینم!

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

واقعا ممنونم که وقت میزارید و جواب سوال منو میدید
اما این کد شبیه کدهایی قبلی است.
این کد تو همه سایت ها است.
IP میگیره و نام هاست رو میده.
البته کسی هم که در اونجا سوال کرده هم فقط همین رو میخواست که نام هاست های  مربوط به IP های شبکه اش رو بدونه و نه چیز دیگه ای.

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

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

----------


## khazaie01

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

----------


## Modernidea

ممنون اما نوش دارو بعد از مرگ سهراب بود...

این یک راهش است که از کامپوننت 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

ممنوووون دوست عزیز
این برنامه که نوشتید ، دقیقا همون چیزیست که گفتم ... البته برای بهینه شدن برنامه ، سورس یک پورت اسکنر را بگیرید و بررسی کنید ، فکر کنم یک نمونه پورت اسکنر را در همین سایت دیدم.
دوست عزیز بهتر بود همان موقع که به نتیجه رسیدید ، سورس ( یا روش موجود ) را قرار می دادید تا بقیه دوستان هم استفاده می کردند ، بازم ممنووووووون.

----------

