首页> 资讯> magic packet utility教程_利用magic packet utility远程唤醒电脑

magic packet utility教程_利用magic packet utility远程唤醒电脑

发布时间:2021-12-29 11:56:49来源:本站整理

小编概述:根据我的研究,这个网络唤醒功能没什么用处,因为它仅仅只能用于局域网,换成公网就没用了。。所以说只适合局域网玩玩。。

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

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

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

  1. 使用ATX电源;
  2. 同时主板要提供对网络唤醒的硬件和软件支持(在BIOS中开启);
  3. 网卡支持WOL。

需要说明的是:如果是集成网卡,只要主板支持就行了;如果是PCI网卡,在主板上和网卡上会有三针的WOL跳线插座,需要将其连接好。

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

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

使用Magic Packet Utility进行网络唤醒时,每次都必须输入手工被唤醒计算机的MAC地址,十分麻烦。还有一款名为WOL - Magic Packet Sender的软件,也使用Magic Packet包进行网络唤醒,但是功能更多,可以对配置文件进行管理。

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包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private static void WakeUp(byte[] mac)
{
    System.Net.Sockets.UdpClient client = new System.Net.Sockets.UdpClient();
 
    //指定目标地址为广播地址,端口号任意值即可;
    client.Connect(System.Net.IPAddress.Broadcast, 0);
 
    byte[] packet = new byte[17 * 6];
 
    for (int i = 0; i < 6; i++)
    {
        packet[i] = 0xff;
    }
 
    for (int i = 1; i <= 16; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            packet[i * 6 + j] = mac[j];
        }
    }
 
    //发送UDP数据包,返回发送的字节数到bytesSent
    int bytesSent = client.Send(packet, packet.Length);
 
    if (bytesSent != packet.Length)
    {
        MessageBox.Show("发送可能失败,请重试!");
    }
}

最后讨论两个小问题:

一、跨局域网的问题

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

1
2
IPAddress ip = new IPAddress(new byte[]{192,168,11,255});
client.Connect(ip,port)

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

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

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

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

好了,以上就是全部内容了。

举报