# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه >  چگونگی ping کردن IP

## kamal_habibi

من میخواستم یک برنامه بنویسم و بتونم یک IP درشبکه رو Ping کنم و نتیجه آن را در یک Memo ببینم اگه سورس کاملی در این رابطه دارید لطفا بذارید :ناراحت:

----------


## vcldeveloper

با استفاده از Indy به راحتی می تونید این کار را انجام دهید. در Demoهای Indy مثالی به اسم PingGUI وجود داره گه دقیقا همین کاری که شما میخواید رو انجام میده (البته نتیجه را در یک ListBox میریزه بجای Memo).
Demo های Indy را می توانید از سایتش دانلود کنید، همراه دلفی نیستند.

----------


## Batman

آقای کشاورز ممکنه آدرس رو هم بگید

----------


## vcldeveloper

http://www.indyproject.org/

----------


## kamal_habibi

سالم دوستان بالاخره با کمی کلنجار رفتن تونستم یه چیز جالب درست کنم 
میخوام که شما هم استفاده کنید 
جهت استفاده برای پینگ کردن در یک شبکه

----------


## iamehsan56

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



procedure TfrmPing.btnPingClick(Sender: TObject);
var
  i: integer;
begin
  ICMP.OnReply := ICMPReply;
  ICMP.ReceiveTimeout := 1000;
  btnPing.Enabled := False; try
    ICMP.Host := edtHost.Text;
    for i := 1 to spnPing.Value do begin
      ICMP.Ping;
      Application.ProcessMessages;
    end;
  finally btnPing.Enabled := True; end;
end;

procedure TfrmPing.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
  sTime: string;
begin
  // TODO: check for error on ping reply (ReplyStatus.MsgType?)
  if (ReplyStatus.MsRoundTripTime = 0) then
    sTime := '<1'
  else
    sTime := '=';

  lstReplies.Items.Add(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',
    [ReplyStatus.BytesReceived,
    ReplyStatus.FromIpAddress,
    ReplyStatus.SequenceId,
    ReplyStatus.TimeToLive,
    sTime,
    ReplyStatus.MsRoundTripTime]));
end;

----------


## babakmomeni

> من از دموی ایندی واسه پینگ کردن استفاده کرده ام .
> اما وقتی یه سایتی رو پینگ می کنم جواب خوبی نمی ده . گاهی جواب می ده بعد از کلی 
> پینگ کردن و گاهی هم جواب نمی ده . ایندی من10.2.5 هست 
> و تو دلفی 2009 کامپایل کردم
> حتی وقتی آدرس آی پی اون رو به جا ی اسمش وارد می کنم بازم همونطوره
> اما وقتی با دستور پینگ خود ویندوز از پرامت پینگ می کنم مشکلی نداره 
> این اشکال از چیه 
> لطفا کمک کنید


سلام. بالاخره یکی این تاپیک رو از اعماق خاک بیرون کشید :لبخند گشاده!: (محض مزاح عرض کردم). این مورد رو بنده هم تست کردم البته با سورس خودم و دلفی 7 و ایندی 8 (همشون زیرخاکی هستن عین خودم). تقریبا مثل شما جواب گرفتم. مقصر اصلی حادثه هم خاصیتی به نام RecieveTimout هستش. اگه این زمان کم تعیین بشه یا سرعت خط اونقدر زغالی باشه که  زمان پاسخ هاست بیشتر از این زمان بشه اون فاجعه ای که حضرت عالی بهش اشاره کردین رخ حواهد داد. برنامه نمونه رو توی ضمیمه تقدیم کردم.
موفق باشید...

----------


## tadeh2010

سلام خیلی خوب بود.
ولی یک سوال اگر بخواهیم n تا IP مختلف را همزمان Ping بکنیم چی کار باید کرد؟
تحقیقاتی در این باره کردم ولی به نتیجه کلی نرسیده ام
1-می شود با threadها هر IP ای را کنترل کرد. ولی بلد نیستم
2-می شود با متد new برای هر IP یک Timer و  Indy جداگانه ساخت . که بازهم چگونگی کار را بلد نیستم 
حالا یکی از اساتید فن کمکم بکند
ممنونم

----------


## Felony

> سلام خیلی خوب بود.
> ولی یک سوال اگر بخواهیم n تا IP مختلف را همزمان Ping بکنیم چی کار باید کرد؟
> تحقیقاتی در این باره کردم ولی به نتیجه کلی نرسیده ام
> 1-می شود با threadها هر IP ای را کنترل کرد. ولی بلد نیستم
> 2-می شود با متد new برای هر IP یک Timer و  Indy جداگانه ساخت . که بازهم چگونگی کار را بلد نیستم 
> حالا یکی از اساتید فن کمکم بکند
> ممنونم


 تو پست شماره 66 این تاپیک براتون یه نمونه قرار دادم .

----------


## hp1361

سلام

من از IdICMP برای پینگ کردن استفاده کردم اما وقتی یک IP خارج از Lan وارد می کنم چون Default Gateway اجازه خارج شدن و نمیده ارور Unreachable  رو دیافت نمی کنم و فقط Timeout دریافت می کنم در حالیکه توی command prompt دقیقا همین مورد ذکر میشه.راه حل چیه که مثل command prompt نتیجه بگیرم؟

----------


## tadeh2010

سلام
امکان دارد یک مثال بزنید 
و فرق بین آنچه  command prompt و برنامه شما نمایش می دهد را با مثال بیان بکنید.

----------


## hp1361

حالت command prompt
cmd-ping.JPG

حالت برنامه
test-ping.JPG

----------


## tadeh2010

سلام دوست عزیز
من هم دارم بر روی پروژه ای کار می کنم که کار پینگ کردن را انجام می دهد 
با این فرق که من چند IP را یک زمان و بطور متنواب می خواهم پینگ بکنم
بعد از مدتها جستجو و کارهای متفاوت و همچنین کمک اساتیدی همچون آقای مجتبی تاجیک که در پست 9 همین تاپیک هم کمک بزرگی به من کردند
توانستم بعد از جستجو های زیادی کامپوننت و برنامه جالبی در این زمینه پیدا بکنم
و با تغییر ابتدایی و کوچکی مثال ساده ای از یک برنامه ی مانیتورینگ نودها را بسازم
برنامه همراه با کامپوننتهایش را برایتان upload کرده ام
همچنین برای اطلاعات بیشتر سایتهایی هم که خودم کامپوننتها یا برنامه را از آنها دانلود نموده ام را اضافه کرده ام
http://www.magsys.co.uk/delphi/magics.asp
http://www.overbyte.be/frame_index.html
درضمن من از دلفی 2010 استفاده می کنم و تمامی PChar ها را به صورت PAnsiChar(AnsiString(Str)) استفاده کرده ام.
یک مورد دیگر من هنوز برنامه ام را کامل نکرده ام اگر به نتیجه رسیدید من را فراموش نکنید حتما شما هم می توانید گوشه ای از سوالات من را پاسخ دهید
متشکرم
http://www.4shared.com/file/lu-l_YLH/Ping.html
اگر مشکلی در دانلود فایل داشتید حتما مطلعم سازید.

----------


## hp1361

سلام دوست عزیز Tadeh2010

لینک هایی که دادی واقعا مفید بودند.
کامپوننت ها رو دانلود کردم و نصب کردم و از یونیتی که در لینک اول گذاشته شده بود هم استفاده کردم و با استفاده از یک حلقه For به تعداد مورد نیاز ترد ساختم.برنامه هم فریز نشد.

باز هم ممنون

----------


## program103

> سلام دوست عزیز
> من هم دارم بر روی پروژه ای کار می کنم که کار پینگ کردن را انجام می دهد 
> با این فرق که من چند IP را یک زمان و بطور متنواب می خواهم پینگ بکنم
> بعد از مدتها جستجو و کارهای متفاوت و همچنین کمک اساتیدی همچون آقای مجتبی تاجیک که در پست 9 همین تاپیک هم کمک بزرگی به من کردند
> توانستم بعد از جستجو های زیادی کامپوننت و برنامه جالبی در این زمینه پیدا بکنم
> و با تغییر ابتدایی و کوچکی مثال ساده ای از یک برنامه ی مانیتورینگ نودها را بسازم
> برنامه همراه با کامپوننتهایش را برایتان upload کرده ام
> همچنین برای اطلاعات بیشتر سایتهایی هم که خودم کامپوننتها یا برنامه را از آنها دانلود نموده ام را اضافه کرده ام
> http://www.magsys.co.uk/delphi/magics.asp
> ...


ظاهرا فیلتر شده. میشه لینک درست رو بذارید؟؟

----------


## tadeh2010

سلام
چک کردم
این لینکها درست بودند (بدون فیلتر شکن)
http://www.magsys.co.uk/delphi/magics.asp
http://www.overbyte.be/frame_index.html
البته این دوتا سایت فوق سایتهایی هستند که من از آنها کامپوننتها و برنامه هایی را دانلود کردم که در ساخت برنامه ام کمکم کردند.
و لینک سومی حق با شماست!؟ :متعجب: 
خوب یه جایی را پیشنهاد بکنید من برنامه را  بگذارم که همه بتوانند بردارند.آیا توی همین سایت هم می شود چنین کاری کرد؟
اگر هم می خواهید یک ایمیل بدهید تا برایتان ایمیلش بکنم.

----------


## saeed.tousi

سلام دوستان
من این تایپیک رو چندین مرتبه خوندم.باضافه یکی دو هفته ای هم هست دارم توی اینترنت سرچ میکنم
خوب مطالب زیادی هم بدست آوردم اما تمام کدها ،یک error به من میدن
اون ارور هم اینه :
socket error #13 access denied

حتی بعد از این هم توی cmd دستور scktsrvr - install رو هم اجرا کردم
ولی باز هم این ارتباط برقرار نشد

ممنون میشم اگه به من کمک کنید

----------


## بهروز عباسی

درود
اینــــــــــو ببین

واینم یک نمونه 

موفق باشید.

----------


## tadeh2010

سلام دوست عزیز
من متوجه مشکل شما نشدم!؟
یعنی با این error تا به حال برخورد نداشتم
این ایراد( socket error #13 access denied )چه موقعی پیش می آید؟
موقعی که از داخل برنامتان می خواهید IP ای را پینگ نمایید؟
آیا با دستور پینگ ویندوز مشکلی دارید، بعنی درموقع پینگ کردن همان IP در Run با ایرادی مواجه می شوید؟
آیا از برنامه دوستمان آقای عباسی استفاده کردید؟

----------


## saeed.tousi

tadeh 2010 : آره امتحان کردم و مشکلی نداشتم
فقط وقتی که می خوام یک ip رو تست کنم(exe برنامه) این error رو میده

جناب عباسی از توجه شما بسیار متشکرم
اما این لینکی رو هم که گذاشتید قبلاً تست کردم
و باز هم با مشکل مواجه شدم
البته مشکلی با سوکت نداشتم تنها یک errror ،به دو خط کد زیر میده

phe := GetHostByName(PChar(AIP));
*.*
.
.
pac := phe^.h_addr_list^;

و می خواد که بجای pchar از pansichar استفاده کنم

خوب من هم کد ؛رو به صورت زیر تغییر دادم و در نهایت با همون error سوکت مواجه شدم

phe := GetHostByName(*pansichar(pstring*(AIP)));
.
.
pac := *pchar*(phe^.h_addr_list^);

----------


## بهروز عباسی

> و باز هم با مشکل مواجه شدم


اون برنامه ای که گذاشتم با Delphi XE و Win 7 تست کردم IP بهش دادم و بدون مشکل اجرا شد.

----------


## tadeh2010

سلام
من یک برنامه درست کردم برای multi ping کردن که به صورت فرم MDI می باشد ولی بلد نیستم که از Thread ها استفاده بکنم کسی می تواند کمک بکند.
اگر بشود از Thread استفاده کرد برای هر فرمی که ساخته می شود (هر IP یک نام که برای کپشن فرم می باشد می گیرد و یک form child ساخته میشود که داخلش یک timer می باشد که هر یک ثانیه یا هر زمانی که تنظیم کرده باشیم از طریق کامپوننت ایندی ICMP آی پی فرم مربوطه را پینگ می کند)،
برنامه بسیار خوبی برای مدیران شبکه ها می شود.
source کامل اش را گزاشته ام.
http://s1.picofile.com/file/74361611..._ICMP.rar.html

----------

