目 录CONTENT

文章目录

win电脑开启网卡唤醒开机

过客
2025-12-16 / 0 评论 / 1 点赞 / 1 阅读 / 0 字

公司嘎了后,把台式电脑搬回家了。家里没有电脑桌,所以主机被扔到一个角落了,开机键有点远不好按,于是折腾了一下网卡唤醒开机。

一、电脑上配置

1. 确认硬件支持

  • 主板和网卡必须支持Wake-on-LAN,现在大多数的板载有线网卡都支持了。

2. BIOS中设置

  • 重启电脑,进入BIOS(一般台式机是Del键,有的是F2、F10等功能键)
  • 在电源设置(Power Management)中找到 Wake on LAN 相关设置,不同主机设置名可能不一样。我的是华硕主板,开启 PCI-E设备唤醒 就好了。注意,如果有ErP的记得禁用(Disabled),开启后就进入节能模式,到时候关机后网卡会被断电,导致无法唤醒。

3. 在Windows中配置网卡属性。

  • Win+X -> 选择 设备管理器

  • 展开 网络适配器 -> 找到 有线网卡 -> 双击进入网卡属性页面 -> 选择 电源管理 -> 勾选上 允许此设备唤醒计算机只允许幻数据包唤醒计算机

  • 然后找到高级选项卡,确认下面选项为 开启(Enabled)
    • 魔术封包唤醒(Wake on Magic Packet)
    • 样式比对唤醒(Wake on pattern match)
    • 关机 网络唤醒(Shutdown Wake-On-LAN)

4. 获取电脑中IP地址和Mac地址

  • 输入win+R 输入 cmd 打开命令行窗口
  • 输入命令
ipconfig /all

  • 记下IP地址和物理地址,如:0C-11-22-3-44-55。到此所有配置已经完成,

二、发送“魔术包”(Magic Packet)开机

可以使用任意的工具发送WOL包开机。

  • 手机App:直接搜 WOL Wake on Lan相关的APP,填写关键信息:
    • MAC地址:0C-11-22-33-44-55
    • 广播地址:192.168.1.255 (有的app可能要你填写ip)
    • 端口:默认是9

  • Windows 电脑工具,如 Depicus Wake On Lan GUI
  • Linux中,如:etherwakewakeonlan
# 以 Debian 中 wakeonlan 为例,因为 etherwake 需要root权限。

# 安装
sudo apt install wakeonlan

# 基本用法
wakeonlan 0C:11:22:33:44:55

# 完整用法
wakeonlan -p 9 -i 192.168.1.255 0C:11:22:33:44:55

三、扩展学习

我们可以在局域网中的Nas中,可以写个脚本来启动并监听电脑是否开机。远程链接回Nas中,运行脚本就可以实现远程开机了。

#!/bin/bash

# ===== 配置区 =====
TARGET_IP="192.168.1.100"
TARGET_MAC="0C-11-22-33-44-55" # 支持0C-11-22-33-44-55和0C:11:22:33:44:55格式
INTERFACE_BROADCAST="192.168.1.255"
PORT=3389
MAX_WAIT_SECONDS=180      # Windows 启动可能较慢,建议 2~3 分钟
CHECK_INTERVAL=10         # 每隔 10 秒检查一次
TIMEOUT_PER_CHECK=3       # 每次连接尝试最多等 3 秒
# ==================

# 检查依赖
if ! command -v wakeonlan &> /dev/null; then
    echo "wakeonlan 未安装,请运行:sudo apt install wakeonlan"
    exit 1
fi

# 这里用nc,检查3389端口,需要开通远程桌面。
if ! command -v nc &> /dev/null; then
    echo "netcat (nc) 未安装,请运行:sudo apt install netcat-openbsd"
    exit 1
fi

echo "发送 Wake-on-LAN 魔术包到 $TARGET_MAC ..."
wakeonlan -i "$INTERFACE_BROADCAST" "$TARGET_MAC"

echo "等待 $TARGET_IP 的 RDP 端口 ($PORT) 开放(最多 ${MAX_WAIT_SECONDS} 秒)..."

start_time=$(date +%s)

while true; do
    current_time=$(date +%s)
    elapsed=$((current_time - start_time))

    if [ $elapsed -ge $MAX_WAIT_SECONDS ]; then
        echo "超时:$TARGET_IP:$PORT 在 ${MAX_WAIT_SECONDS} 秒内未响应。"
        exit 1
    fi

    # 使用 nc 尝试连接(-z: 扫描模式,-w: 超时秒数)
    if nc -z -w "$TIMEOUT_PER_CHECK" "$TARGET_IP" "$PORT" 2>/dev/null; then
        echo "成功!$TARGET_IP 的远程桌面(端口 $PORT)已就绪!(耗时 ${elapsed}s)"
        exit 0
    fi

    sleep "$CHECK_INTERVAL"
done

最后

如果要外网启动,需要在路由做端口转发,将UDP端口9转发到指定MAC地址上。不过不建议暴露在外网,因为这玩意没有权限认证,被端口扫描到,任何人都可以给你家的电脑开机。如果要外网开机,可以用中转的局域网Nas服务器。也可以换另一种思路,使用智能插座来实现,这个下次再讲哈。

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区