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;
}
成功的喚醒
我的環境
俗稱小烏龜(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;
}
成功的喚醒
留言
張貼留言