打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Magic Packet进行网络唤醒(WOL)

查看原文:http://blog.xieyc.com/wol-by-magic-packet/

现在几乎所有的电脑都支持从网络唤醒,这意味着你可以通过网络控制远程一台计算机开机。

目前,远程唤醒数据包的发送,大多使用AMD公司的Magic Packet。MagicPacket虽然只是AMD公司所开发的一项技术,但是受到了几乎所有网卡制造商的支持,因此,大多数流行网卡都能与之很好地兼容。最常使用的工具是MagicPacket Utility 1.00.005。

X

使用WOL需要被唤醒机满足以下条件:

使用ATX电源; 同时主板要提供对网络唤醒的硬件和软件支持(在BIOS中开启); 网卡支持WOL。需要说明的是:如果是集成网卡,只要主板支持就行了;如果是PCI网卡,在主板上和网卡上会有三针的WOL跳线插座,需要将其连接好。

有些网卡还提供了对Wake up功能的设置项(例如集成在驱动的设置中),可以选择唤醒包的类型等。

发送MagicPacket唤醒数据包只需要知道被唤醒计算机网卡的MAC地址,这可以使用getmac命令,或者ipconfig命令结合all参数来实现。

使用Magic Packet Utility进行网络唤醒时,每次都必须输入手工被唤醒计算机的MAC地址,十分麻

烦。还有一款名为WOL - Magic Packet Sender的软件,也使用MagicPacket包进行网络唤醒,但是功能更多,可以对配置文件进行管理。

Magic Packet的包格式很简单,首先是六个FF,然后是重复十六次待唤醒电脑的MAC。比如上图的封包,就应该是这样:

FF FF FF FF FF FF 20 12 04 24 13 43 20 12 04 24 13 43 ......

理论上可以在任意网络封包中打包Magic Packet,不过一般选择UDP或IPX。

下面使用C#语言编写了一个简单的小程序,使用UDP协议向局域网内广播Magic Packet包。

[code language='csharp']

private static void WakeUp(byte[] mac)

{

System.Net.Sockets.UdpClient client = newSystem.Net.Sockets.UdpClient();

//指定目标地址为广播地址,端口号任意值即可;

client.Connect(System.Net.IPAddress.Broadcast, 0);

byte[] packet = new byte[17 * 6];

for (int i = 0; i < 6;="">

{

packet[i] = 0xff;

}

for (int i = 1; i <= 16;="">

{

for (int j = 0; j < 6;="">

{

packet[i * 6 + j] = mac[j];

}

}

//发送UDP数据包,返回发送的字节数到bytesSent

int bytesSent = client.Send(packet, packet.Length);

if (bytesSent != packet.Length)

{

MessageBox.Show('发送可能失败,请重试!');

}

}

[/code]

该程序可以在博主的SkyDrive网盘下载。

最后讨论两个小问题:

一、跨局域网的问题

如果被唤醒机器和发送唤醒包的机器在同一个网段内,用client.Connect(IPAddress.Broadcast,port)是可以的。如果不是处于同一个网段内,那么就要用被唤醒机器网段的广播地址,比如A机器是192.168.1.2,B机器IP地址是192.168.11.10,用A远程唤醒B,就要用B网段的广播地址(192.168.11.255),即

[code language='csharp']IPAddress ip = new IPAddress(newbyte[]{192,168,11,255});

client.Connect(ip,port)[/code]

前提是计算机A和计算机B的网络地址是可连通的。

二、从外网唤醒路由器内局域网中的机器

如果被唤醒的计算机位于使用NAT功能的路由器组建的局域网内,从外网上是看不到这台机器的,因此也无法将唤醒包送达被唤醒的计算机。

解决方法估计只有端口转发了,我觉得在路由器上设置将发到WAN地址为一个特定的UDP端口的数据包想LAN端广播即可,比如设定 UDPPort 9 至 LAN broadcast address,估计直接转发给被唤醒计算机的IP地址也没有问题。

引用:

[1] 利用MagicPacket启动电脑

[2] C#远程唤醒(远程开机)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
广域网远程开机(远程唤醒)
网络唤醒(WOL)全解指南:原理篇
遠端啟動電腦開機(Magic Packet )
远程唤醒、WOL、Magic Packet[点点论坛]
【转】兴奋中,终于可以远程开机了
WOL: Wake
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服