C# WOL ROUTE 分享器 網路喚醒

這陣子常常需要連線回家~但連線回去後又不想一直開著電腦浪費電,於是就想到好久以前就有的技術WOL 可以用,但硬體設備有了,卻缺少了軟體的控制,網路上雖然有很多,但自己也想知道一下原理,於是就動手寫了一下WOL這奇怪的封包!!




我的環境
俗稱小烏龜(WAN) >> 分享器(ROUTE) >> 家中電腦(多台)


以下是我的分享器設定










/// <summary>
/// 發送WOL至遠端電腦
/// </summary>
/// <param name="strIP">目的地IP</param>
/// <param name="intPort">目的地PORT</param>
/// <param name="strMAC">遠端電腦的MAC</param>
/// <returns>True/False</returns>
private Boolean SendWOLCmd(String strIP,int intPort, String[] strMAC)
{
 System.Net.IPAddress IPAdd = null;
 System.Net.IPEndPoint IPEP = null;
 System.Net.Sockets.Socket socket = null;
 System.Net.IPHostEntry hostEntry = null;
 try
 {
  // 如果是網域名稱的話則由 IPHostEntry 來要求DNS取得IP
  if (!System.Net.IPAddress.TryParse(strIP, out IPAdd))
  {
   // 向本機端的DNS取得IP
   hostEntry = System.Net.Dns.GetHostEntry(strIP);
   IPAdd = System.Net.IPAddress.Parse(hostEntry.AddressList[0].ToString());
  }
  // 判斷IPAdd物件是否無效
  if (IPAdd != null)
  {
   Byte[] byteCmd = new Byte[102];
   // 前6個byte 給予 255 的值
   for (int i = 0; i <= 5; i++)
   {
    byteCmd[i] = 0xFF;
   }
   // 從第7個byte以後給予連續MAC位置16次
   for (int i = 6; i <= 101; i += 6)
   {
    for (int j = 0; j <= 5; j++)
    {
     byteCmd[i + j] = Byte.Parse(strMAC[j], System.Globalization.NumberStyles.HexNumber);
    }
   }
   IPEP = new System.Net.IPEndPoint(IPAdd, intPort);
   socket = new System.Net.Sockets.Socket(
       System.Net.Sockets.AddressFamily.InterNetwork,
       System.Net.Sockets.SocketType.Dgram,
       System.Net.Sockets.ProtocolType.Udp);
   socket.SendTo(byteCmd, IPEP);
  }
  else
  {
   return false;
  }
 }
 catch
 {
  return false;
 }
 return true;
}



成功的喚醒

留言

這個網誌中的熱門文章

delivery note和delivery order的區別和翻譯

Eclipse 3.6.1 Helios 中文化方法

牙技專業英文--技工篇