نوشته شده توسط
systam
سلام
توضیح خیلی کلی بود
یکم مو شکافانه تر توضیح بدید با نمونه مثال ممنون میشم
یا علی
سلام
خود عمل ping کار سادهای هست. نمونه هم خیلی زیاد هست تو اینترنت.
خلاصهی کار اینشکلی هست.
اول باید یه کلاس بنویسی برای Ping کردن یک IP در شبکه.
private const int PingTimeout = 2000;
private const string Data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
private PingOptions _options = new PingOptions( 64, true );
private Ping _ping = new Ping();
private byte[] _buffer = Encoding.ASCII.GetBytes( Data );
_pingSender.PingCompleted += PingCompletedCallback;
_ping.SendAsync( hostNameOrIdAddress, PingTimeout, _buffer, _options, null );
باید یادآوری کنم که فضای نام System.Net.NetworkInformation رو باید اضافه کنی.
تو PingCompletedCallBack پارامتر PingCompletedEventArgs حاوی اقلام Cancelled، Error و Reply هست
که آخری یک Status داره که اگه مقدارش IPStatus.Success بود یعنی تونسته اون آدرس رو Ping کنه.
حالا باید یه حلقه ایجاد کنی که تمام IP رو پینگ کنی.
برای این کار شما باید اول دامنهی IP های موجود رو بدونی، مثلاً بیشتر شرکتها از محدودهی
192.168.1.1 تا 192.168.1.254 هستن. اگه از DHCP تو شرکتتون استفاده میشه اطلاعات اون رو
بدست بیارین، اینطوری ممکنه بجای 254 تا IP فقط لازم باشه 40-50 تا IP رو تست کنی.
حالا تو یه حلقه تمام IPها رو تولید کن و با اون متد پینگ که نوشتی تست کن.
یه مشکل بزرگ حالا برات پیش میاد و اون هم اینه که این کار خیلی کند میشه. اگه فرض کنیم که
هر پینگ 2 ثانیه طول بکشه، پینگ کردن 254 تا IP حدود 500 ثانیه یا 8 دقیقه طول میکشه که خیلی زیاده
برای این منظور باید بری سراغ Multi-Threading یعنی همزمان چند تا نخ ایجاد کنی که هر کدوم این کار
رو انجام بدن، اول با دو تا نخ تست کن، وقتی جواب گرفتی تعداد نخها رو حداقل به 20 عدد یا بیشتر افزایش بده.
اگه 20 نخ همزمان پینگ کنن، هر نخ باید حدود 12 بار پینگ کنه و این میشه حدودای 30 ثانیه که از 8 دقیقه
خیلی بهتره.
صبا صبوحی