前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WOL 唤醒内网设备

WOL 唤醒内网设备

作者头像
潇洒
发布2023-10-23 14:50:36
2040
发布2023-10-23 14:50:36
举报
文章被收录于专栏:石头岛石头岛

简述

使用在内网发起一个数据包来唤醒支持WOL的设备。 但是这有几个前提:

  1. 设备支持WOL

代码实现

使用UDP,设置广播模式,往目标或者直接全网段广播就行。

代码语言:javascript
复制
package net.liukai.tool;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class WakeOnLanTest {

    public static void wakeUp(String macAddress) {
        try {
            byte[] macBytes = getMacBytes(macAddress);
            byte[] magicPacket = new byte[102];
            // 添加6个FF字节
            for (int i = 0; i < 6; i++) {
                magicPacket[i] = (byte) 0xff;
            }
            // 添加16次MAC地址
            for (int i = 6; i < magicPacket.length; i += 6) {
                System.arraycopy(macBytes, 0, magicPacket, i, 6);
            }
            // 创建用于发送UDP数据报的Socket
            DatagramSocket socket = new DatagramSocket();
            // 发送数据报到目标主机的255.255.255.255端口
            DatagramPacket packet = new DatagramPacket(magicPacket, magicPacket.length, InetAddress.getByName("255.255.255.255"), 9);
            socket.send(packet);
            // 关闭Socket
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static byte[] getMacBytes(String macAddress) throws IllegalArgumentException {
        String[] hex = macAddress.split("(\\:|\\-)");
        if (hex.length != 6) {
            throw new IllegalArgumentException("Invalid MAC address.");
        }
        byte[] bytes = new byte[6];
        try {
            for (int i = 0; i < 6; i++) {
                bytes[i] = (byte) Integer.parseInt(hex[i], 16);
            }
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException("Invalid hex digit in MAC address.");
        }
        return bytes;
    }

    public static void main(String[] args) {
        String macAddress = "11:22:33:44:55:66"; // 替换为目标设备的MAC地址
        wakeUp(macAddress);
    }
}

特殊情况

使用这种方式唤醒,如果是在双路由器的情况下,NAS的网络服务顺序会被改变。多次测试确实是这样,但是原理想不通。 原来默认网关出是是A路由器,使用代码后,就会成B路由器。使用synology官方的唤醒工具就没有这个问题。 为什么要用两个路由器,因为其中一个刷了固件,懂的都懂。 顺序变了有什么影响?当然有,默认B路由器的网走的不是常规网络,外部访问不了。 但是,如果NAS是使用了FRP,FRP的功能不受影响,因为FRP指定了内网IP和端口。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 代码实现
  • 特殊情况
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档