PDA

View Full Version : پیدا کردن آدرس IP دستگاه های متصل به اکسس پوینت ها در شبکه محلی



sasanamiri
یک شنبه 09 فروردین 1394, 17:23 عصر
سلام به همگی
دوستان من دارم یه برنامه به زبان سی شارپ می نویسم که نیاز دارم آدرس ip دستگاه های متصل به شبکه رو پیدا کنم
داستان از این قرار است که من تو شبکه ام یه سری اکس پوینت و روتر دارم که که این اکسس پوینت و روتر ها متصل شده اند به یک سرور (از طریق کابل یا بی سیم)بعد یه سری دستگاه مثل موبایل و تبلت و لپ تاپ این جور چیزا وصل میشن به این اکسس پوینت و روتر های من حالا من میخوام برنامه ای بنویسم که بتونه آدرس آی پی این دستگاه ها رو پیدا کنه
اینم تصویرری از شبکه من

129865

SabaSabouhi
دوشنبه 10 فروردین 1394, 09:28 صبح
سلام
یه راه حل اینه که تمام IPهای قابل قبول رو تو subnet خودت ping کنی.
فقط برای این کار لازمه که از multi-threading استفاده کنی، وگرنه خیلی طول می‌کشه.
می‌تونه مثلاً تو دسته‌های 64تایی این pingها رو انجام بدی ( منظورم باز کردن 64 نخ همزمان هست )

صبا صبوحی

systam
دوشنبه 10 فروردین 1394, 09:33 صبح
سلام
یه راه حل اینه که تمام IPهای قابل قبول رو تو subnet خودت ping کنی.
فقط برای این کار لازمه که از multi-threading استفاده کنی، وگرنه خیلی طول می‌کشه.
می‌تونه مثلاً تو دسته‌های 64تایی این pingها رو انجام بدی ( منظورم باز کردن 64 نخ همزمان هست )

صبا صبوحی
سلام
توضیح خیلی کلی بود
یکم مو شکافانه تر توضیح بدید با نمونه مثال ممنون میشم


یا علی

SabaSabouhi
دوشنبه 10 فروردین 1394, 12:52 عصر
سلام
توضیح خیلی کلی بود
یکم مو شکافانه تر توضیح بدید با نمونه مثال ممنون میشم


یا علی

سلام
خود عمل 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 دقیقه
خیلی بهتره.

صبا صبوحی

sasanamiri
دوشنبه 10 فروردین 1394, 17:18 عصر
ممنونم ولی برنامه من قراره هر یک ثانیه چک کنه که آیا ای پی هست که درخواست اتصال داشته باشه
ولی این نمونه کد شما خیلی زمان گیز هست برای پیدا کردن این آی پی ها
بازم ممنون

sasanamiri
دوشنبه 10 فروردین 1394, 17:21 عصر
دوستان اگه خودتون در زمینه شبکه تخصص دارین یا کتابی رو میشناسین که در این زمینه هست و یا متخصص شبکه ای رو میشناسین که من بتونم ازش در رابطه با نوع ارتباط دستگاه ها در شبکه با هم و نحوه دریافت و ارسال اطلاعات در پروتوکل های مختتلف مشاوره بگیرم ممنون میشم معرفی کنید حاضرم بابت این مشاوره هم هزینه کنم
بازم ممنون

plus
دوشنبه 10 فروردین 1394, 17:46 عصر
میتونید اینجا (http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using) رو بررسی کنید. کلاسی هست که به شما لیست Computer Name های دستگاه های متصل رو میده. مدت زمانش به عوامل زیادی بستگی داره ولی معمولا در چند ثانیه جواب میده. البته ممکنه بعضی از سیستم ها رو مشاهده نکنید و صد درصد Reliable نیست.

sasanamiri
دوشنبه 10 فروردین 1394, 20:12 عصر
لطفا دوستان باهام تماس بگیریدکسانی که می تونن کمکم کنن در رابطه با راه اندازی شبکه و ساخت این نرم افزار توضیحات بیشتر رو می تونم تو تماس باهاتون در میون بزارم بهم پیام بدید من باهاتون تماس میگیرم 09178753856