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

آموزش روشن کردن کامپیوتر تحت شبکه با سی شارپ به زبان ساده

چگونه کامپیوتر را از طریق شبکه روشن کنیم؟ چه کدی در زبان سی شارپ بزنیم؟ در آموزش قبلی خاموش کردن کامپیوتر های متصل به شبکه (از راه دور) را توضیح دادیم در این آموزش روشن کردن سیستم را توسط برنامه نویسی سی شارپ می آموزیم.فرض کنید یک شبکه Domain داریم در یک روز سرد زمستانی برق میره طبیعتاً سروری که UPS نداشته باشه خاموش میشه .اگر سرور نزدیک باشه مشکلی نیست دوستان میرن و روشنش میکنن اما اگر دور باشه و کسی نخواد توی سرما بره سرور رو روشن کنه باید چیکار کرد؟

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

برای یادگیری و آموزش سی شارپ ( آموزش زبان برنامه نویسی سی شارپ ) رایگان به این لینک بروید

توسط Wake On Lan

نرم افزارهایی هستن که از قابلیت WakeOnLan در mainboard استفاده میکنند البته این در حالی است که mainboard شما این قابلیت رو support کنه .در مرحله اول باید طبق تصویر زیر تنظیمات رو انجام بدیم

وب سایت توسینسو

روش کار به این صورت هست: packet های ارسالی که در WakeOnLan استفاده می شوند از نوع UDP که مخفف User Datagram Protocol هستند که شامل MAC Address کارت شبکه سیستم مقصد می باشد. Address MAC به صورت استرینگ (String در برنامه نویسی ) در مبنای شانزده هست مثال :

00-1D-7D-C6-A3-C2

برای فرستادن نیاز به شش byte می باشد.این packet شش byte جهت header و جهت مشخص شدن نوع آن به شانزده برابر طول اطلاعات نیاز دارد . مجموع اینها 102 بایت می شود. شش byte اول packet مربوط به header آن است که با 0Xff پر می شود.شش byte دوم packet بایستی برابر با MAC آدرس کامپیوتر مقصد شود .

وب سایت توسینسو

این packet که UDP) User Datagram Protocol) می باشد به صورت Broadcast بر روی پورت نه(9) ارسال می شود همانند 200.0.0.255 . این packet توسط تمامی کامپیوتر هایی که در شبکه وجود دارند دریافت می شود .اما کامپیوتری که Mac Address آن با Mac Address ای که در packet نوشته شده است یکی باشد روشن می شود .

وب سایت توسینسو

روشن کردن سیستم توسط برنامه نویسی به زبان سی شارپ

برای این کار باید قابلیت WakeOnLan در mainboard فعال باشد همانند راه قبلی این در حالی است که mainboard شما این قابلیت رو support کنه .کد سی شارپ را مانند زیر انجام دهید : یک class بسازید که از UDPClient که در NameSpace به نام System.Net.Sockets قرار دارد به ارث ببرد

  public class WOLClass:UdpClient    
{
    public WOLClass():base()
    { }
    //this is needed to send broadcast packet
 
    public void SetClientToBrodcastMode()    
    {
      if(this.Active)
       this.Client.SetSocketOption(SocketOptionLevel.Sock  et,
                                 SocketOptionName.Broadcast,0);
    }
 }

سپس در class اصلی که می خواین از اونجا این کار رو انجام یه Method به صورت زیر بسازید

private void WakeFunction(string MAC_ADDRESS)
        {
            WOLClass client = new WOLClass();
            client.Connect(new
               IPAddress(0xffffffff),  //255.255.255.255  i.e broadcast
 
               0x2fff); // port=12287 let's use this one 
 
            client.SetClientToBrodcastMode();
 
            int counter = 0;
 
            byte[] bytes = new byte[1024];   // more than enough :-)
 
            //first 6 bytes should be 0xFF
 
            for (int y = 0; y < 6; y++)
                bytes[counter++] = 0xFF;
            //now repeate MAC 16 times
 
            for (int y = 0; y < 16; y++)
            {
                int i = 0;
                for (int z = 0; z < 6; z++)
                {
                    bytes[counter++] =
                        byte.Parse(MAC_ADDRESS.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
                    i += 2;
                }
            }
 
            int reterned_value = client.Send(bytes, 1024);
        }

یه Button به فرم اضافه کنید و رویداد کلیک این Method رو با مک آدرس کامپیوتر مورد نظرتون Call کنید. بصورت زیر:

<div style="text-align: left;">WakeFunction("0041a37f5fd2");
</div>
وب سایت توسینسو

مک آدرس فوق جواب میده اما اگر سیستم شما مک آدرس فوق جواب نداد از - های ما بین مک آدرس استفاده کنید.شاید برای برخی سوال پیش بیاد که این همه کار انجام بدیم تا فقط یک کامپیوتر رو روشن کنیم؟ اگر بخواهیم چند کامپیوتر رو با هم روشن کنیم کافیست یک Text Box رو فرم ایجاد کنیم و مک آدرس رو از داخل اون به برنامه پاس بدیم .البته می تونیم از List هم استفاده کنیم و وصلش کنیم به یه فایل ..


فرهاد خانلری
فرهاد خانلری

کارشناس ارشد شبکه مایکروسافت

فرهاد خانلری ، مدرس شبکه و برنامه نویسی مبتنی بر زیرساخت های مایکروسافت ، سابقه فعالیت در موسسات و مراکز دولتی در قالب پروژه ، مشاوره و تدریس ، برنامه نویسی ++C ، سی شارپ و دات نت ، متخصص و مدرس شبکه های مبتنی بر سیستم عاملهای مایکروسافت و سرویس های مربوطه ، سخت افزار و ...

نظرات