c#網絡喚醒功能實現(xiàn)
網絡喚醒實現(xiàn)了對網絡的集中管理,即在任何時刻,網管中心的IT管理人員可以經由網絡遠程喚醒一臺處于休眠或關機狀態(tài)的計算機。使用這一功能,IT管理人員可以在下班后,網絡流量最小以及企業(yè)的正常運作最不受影響的時候完成所有操作系統(tǒng)及應用軟件的升級及其他管理任務。
為了喚醒網絡上的計算機,用戶必須發(fā)出一種數(shù)據(jù)包,該數(shù)據(jù)包的格式與普通數(shù)據(jù)包不同,而且還必須使用相應的專用軟件才能產生。當前比較普遍采用的是AMD公司制作的Magic Packet,這套軟件可以生成網絡喚醒所需要的特殊數(shù)據(jù)包。該數(shù)據(jù)包包含有連續(xù)6個字節(jié)的“FF”和連續(xù)重復16次的MAC地址。Magic Packet 雖然只是AMD公司開發(fā)推廣的一項技術,并非業(yè)界公認的標準,但是仍受到很多網卡制造商的支持,因此許多具有網絡喚醒功能的網卡都能與之兼容。
要使用網絡喚醒,你必須擁有:
1:可向網卡發(fā)送網絡“喚醒幀”的軟件。
2:可解碼“喚醒幀”的網卡,該網卡同時還必須可以從輔助電源中獲取能量,并能夠向主板發(fā)送“喚醒信號”。 (基本上都支持)
先說被喚醒機器如何設置
1.Win7系統(tǒng)下設置如下圖,計算機-》設備管理器-》網卡驅動屬性
2.ipconfig –all 命令查看本機網卡的MAC地址
發(fā)送的網絡數(shù)據(jù)包顯示如下圖,其中mac地址是隨便填寫的重復的09。
C#代碼如下:
private IPEndPoint point;
private UdpClient client = new UdpClient();
/**
* 喚醒遠程機器方法
* @param
* mac 要喚醒的機器的MAC
* IP
* port udp消息發(fā)送端口
*
* 摘要:喚醒方法為網卡提供的魔術封包功能,即以廣播模式發(fā)送6個FF加上16遍目標MAC地址的字節(jié)數(shù)組
**/
private void wakeUp(string mac, int port, string ip)
{
byte[] magicBytes = getMagicPacket(mac);
point = new IPEndPoint(IPAddress.Parse(ip), port);//廣播模式:255.255.255.255
try
{
client.Send(magicBytes, magicBytes.Length, point);
}
catch (SocketException e) { MessageBox.Show(e.Message); }
}
/// <summary>
/// 字符串轉16進制字節(jié)數(shù)組
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] strToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
/// <summary>
/// 拼裝MAC魔術封包
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] getMagicPacket(string macString)
{
byte[] returnBytes = new byte[102];
string commandString = "FFFFFFFFFFFF";
for (int i = 0; i < 6; i++)
returnBytes[i] = Convert.ToByte(commandString.Substring(i * 2, 2), 16);
byte[] macBytes = strToHexByte(macString);
for (int i = 6; i < 102; i++)
{
returnBytes[i] = macBytes[i % 6];
}
return returnBytes;
}
相關文章
C#框架winform實現(xiàn)簡單點餐系統(tǒng)
這篇文章主要為大家詳細介紹了C#框架winform實現(xiàn)簡單點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07