توی این پست قراره برسی کنیم که چجوری میشه توی سی شارپ یک سایت یا ادرس رو توی شبکه داخلی پینگ کرد.
ping که مخفف کلمات Packet InterNet Groperـه در واقع یکی از دستوراتیه که برای پیدا کردن اشکالات شبکه و مشکل یابی استفاده میشه.
پینگ کردن از پروتکل ICMP استفاده میکنه و به صورت خلاصه کاربردش برسی ارتباط دو نقطهست، حالا این دو نقطه میتونه دو تا کامیپوتر توی شبکه باشه هم میتونه برسی ارتباط کامپیوتر با یه سایت یا سرور باشه.
روش معمولیش که همون پینگ کرفتن با دستور ping توی cmdـه که اگه یه چرخی توی این قسمت وب بزنین میتونین اموزشش رو پیدا کنین.
برای پینگ کردن در سی شارپ می تونیم از دو روش استفاده کنیم، روش اول استفاده از api های ویندوز که با استفاده از فراخوانی تابع های فایل wininet.dll ویندوز انجام میشه و روش دوم که با استفاده از کلاس ping که توی نیم اسپیس System.Net.NetworkInformationـه انجام میشه.
توی این پست روش دوم رو برسی می کنیم و یه برنامه کنسول اپلیکیشن برای پینگ گرفتن از سایت ها یا کامیپوتر های داخل شبکه درست می کنیم.
(اگه میخواین برنامه تون خوشگل موشگل باشه و یه چند تا قابلیت دیگه هم بهش اضافه کنین، میتونین از ویندوز فرم استفاده کنین ولی اگه میخواین برنامه تون تم حکری داشته باشه همین کنسول بزارین)
اول از همه یه برنامه سی شارپ کنسولی درست کنین، و namespace زیر رو به برنامه اضافه کنین:
using System.Net.NetworkInformation;
و بعد کد های زیر روی توی متد mian پروژه تون بنویسین:
پ ن: می دونستین اگه حرف اول متد Main با حرف m کوچیک باشه، کامپایلر ارور میده!
Console.WriteLine(@" ____ _ ______ __ ________ "); Console.WriteLine(@" / __ \(_)___ ____ _ /_ __/__ _____/ /____ __ _ |__ /__ \"); Console.WriteLine(@" / /_/ / / __ \/ __ `/ / / / _ \/ ___/ __/ _ \/ /_/ /_ <__/ /"); Console.WriteLine(@" / ____/ / / / / /_/ / / / / __(__ ) /_/ __/ / ___/ / __/ "); Console.WriteLine(@"/_/ /_/_/ /_/\__, / /_/ \___/____/\__/\___/\_/ /____/____/ "); Console.WriteLine(@" /____/ "); Console.ForegroundColor = ConsoleColor.Green; string hostname_or_ip, data; int timeout; //نمونه سازی از کلاس ها Ping ping32 = new Ping(); // مقدار ttl / fragmentation فعال بودن یا نبودن PingOptions pingo = new PingOptions(64,true); Console.Write("Plz Enter HostName Or Ip==> "); hostname_or_ip = Console.ReadLine(); //فاصله زمانی timeout = 120; //حجم پاکت های ارسالی data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; byte[] buffer = Encoding.ASCII.GetBytes(data); PingReply reply = ping32.Send(hostname_or_ip,timeout, buffer, pingo); Console.WriteLine("-------------------------------------------------"); //برسی موفق بودن یا نبودن اتصال if (reply.Status == IPStatus.Success) { //موفق بودن یا نبودن اتصال Console.WriteLine("conection: {0}", reply.Status.ToString()); //ادرس ای پی مقصد Console.WriteLine("Address: {0}", reply.Address.ToString()); //RoundTrip time Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime); //ttl Console.WriteLine("Time to live(ttl): {0}", reply.Options.Ttl); //سایز پاکت ها Console.WriteLine("Buffer size: {0}", reply.Buffer.Length); //fragment Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment); } else Console.WriteLine("Ping failed!"); Console.ReadKey();
یه روش دیگه هم هست که میشه دستورات cmd رو توی سی شارپ اجرا کرد (توی این پست توضیح داده شده) حالا اگه حال و حوصله یادگرفتن ping توی سی شارپ رو ندارین می تونین دستور ping سی ام دی رو به همراه سوییچ هاش توی سی شارپ بزنین که توسط cmd اجرا بشه.
و این که می تونین از همین پینگ گرفتن برای برسی اتصال کاربر به اینترنت استفاده کنین و یا این که با یه کمی دستکاری همین کدها یه دیداسر ساده بسازین و...
کد ها هم که کامنت گذاری شده بود ولی اگه بازم جایی مشکلی بود توی کامنت ها بگین :))
عالی مثل همیشه، فقط من این قسمت که حجم پکت ها تعریف میشه و داستان این aaaaaaaaaa ها رو نفهمیدم D: