Bash 一行命令发送 LAN 唤醒魔术包,无需特定工具

问题描述 投票:0回答:3

是否可以伪造一个局域网唤醒魔术包并仅通过单行bash命令发送它?

当然,我知道有特定的工具可以做到这一点,可以一次性解决问题,但了解 WOL 锻造的最低要求可能会很有用。这就是:如何处理局域网唤醒无需特定工具

bash wake-on-lan
3个回答
49
投票

我能想到的最低要求:

  • Bash支持大括号扩展(我认为是v3.5.1及以上版本)。
  • sed 命令 (1)。
  • 网猫.
假设:

    LAN 的 WOL 包,广播到 255.255.255.255。

命令行将是:

echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000

$MAC

 替换为目标 MAC。或者,这次是两行 :-) 命令:

MAC=11:22:33:44:55:66 echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000

因此,用更通用的表示法:

MAC=11:22:33:44:55:66 Broadcast=255.255.255.255 PortNumber=4000 echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber

说明:

    WOL
  • 魔法数据包由 ffffffffffff(12 倍
    f
    )组成
    ,后跟 16 倍不带冒号的目标 MAC(
    :
    )。
  • 此处使用
  • sed
     命令从 MAC 中
    删除冒号 (:
    ) 并添加 
    \x
     
    十六进制说明符(以便 11
     变为 
    \x11
    22
     变为 
    \x22
     ...等等)在将字符串发送到网络堆栈之前。
  • 伪造的 LAN 唤醒包被发送到网络堆栈
  • 通过管道将其发送到 NetCat。可以使用 SoCat 来代替(当然,语法会有所不同)。
在 Ubuntu、Kali 甚至 CygWin(Windows 7 SP 1 64 位)上测试

工作

考虑:

  • CygWin 的 NetCat 版本不需要 -b
     参数。
  • NetCat 的 OpenBSD 版本在今天(2015 年 7 月)广播数据发送 (
  • -b) 方面存在 bug
    ,因此您必须将其替换为 NetCat 传统版本(apt-get 安装程序上的 netcat-traditional 软件包)。
  • 此示例使用
  • UDP 端口 4.000。 特定端口号在 WOL 上似乎并不重要。
  • 上面的一行 bash 命令也应该适用于通过互联网
  • 在 LAN 上唤醒。在这种情况下,将 $Broadcast 地址替换为目标公共 IP,并在目标上打开/转发指定的
    $PortNumber
    (UDP)。
  • echo -e
  • 可以替换为
    printf
    
    
    
  • 以上示例的 WOL 魔包字符串:

FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566

(1) 嗯,确实,
sed

并不是明确要求的。此处用于删除 ':' 并为魔术包伪造字符串中的每对字符添加

\x
。我知道有一些方法可以通过一些 shell 扩展等来替换
sed
    


3
投票

UDP 是建议用于 WOL 的协议,因为它可以在没有带有安全限制的原始套接字的情况下生成,并且建议使用端口 9,因为它映射到旧的众所周知的丢弃协议。有时您会看到端口 7 被使用,但这映射到 echo 协议。

这意味着,如果您的网络上有支持这种旧的简单标准服务的主机,您在使用端口 7 时将获得不必要的反向散射流量,但在使用端口 9 时则不会获得反向散射流量。并且由于 LAN 唤醒通常是广播的,因此您可能会获得反向散射流量来自许多主机。

此外,如果您使用 Wireshark 等网络嗅探器对 WoL 进行故障排除,只有当 WoL 数据包是端口 9 上的 UDP 数据包时,它才会正确解码它们。

来源:

https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.