是否可以将字符直接回显到网络?

是否可以将字符直接回显到网络?

即使这是一个网络问题,我也会说这是一个 Unix/Linux 经验丰富的用户问题。

我在尝试着手动发送网络魔术包通过使用回声和重定向器(文件描述符)。
这是一例子必须通过网络广播发送的数据(至 255.255.255.255)以唤醒计算机MAC 00:17:31:3F:D3:A9(FFFFFFFFFFFF 后跟 MAC 的 16 倍,不带冒号):

ffffffffffff0017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a9

我已经从我常用的程序中发送了 LAN 唤醒魔术包(IH沃尔,或者wakeonlanLinux 的工具)工作得很好,我被捕获WireShark 的网络流量:

魔包工作

注意突出显示的绿色区域:魔法包是正确地以十六进制发送。

现在是时候了重定向器回显方法。
我正在回显魔法数据包以广播IP地址、UDP协议、端口号4000:

exec 6<>/dev/udp/255.255.255.255/4000
echo "ffffffffffff0017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a90017313fd3a9" >&6

没有结果(远程计算机无法唤醒)。 WireShark的抓包是这次咯不同的:

魔包不起作用

binary area可以看到,魔法包现在位于信息的右侧(!) 。在左侧区域,每个F显示为66(我假设是其 ASCII 代码),每个0显示为30...等。
顺便说一下,WireShark 不会将数据检测为“MagicPacket”。

是什么正确的发送方式我的数据可以通过shell直接传到网卡吗?

PS:也许这个问题必须转移到ServerFault?我认为这很像某种十六进制到 ascii 或二进制转换问题。

答案1

真的很简单:

  • 添加十六进制规范“\x”每两个字符。
  • 用于echo -e十六进制解释的。您也可以使用,printf因为echo在不同的 shell 中执行不同的操作。

使用相同的示例数据:

echo -e "\xff\xff\xff\xff\xff\xff\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9\x00\x17\x31\x3f\xd3\xa9" >&6

这次您的计算机应该被唤醒。

  • 笔记: 不是所有的shell都这样支持此功能。事实上,只有少数人这样做。参考这个线程知道是哪一个做的。为我,西格文最新版本(2015年6月)Windows运行Bash 4.3.39(2)-release (i686-pc-cygwin)完美。
  • 笔记2:遗憾的是,Ubuntu (v14.04) 和 Kali (v1.1.0) 似乎不支持就今天而言,正如中所解释的这个线程。由于网络兼容性问题,它可能已在 Bash 上被禁用。
  • 注3:嗯,我必须承认,报告这/dev/protocol/host/port不是正确方法的人(参见上面的线程)是完全正确的。例如,十六进制代码\x0a充当网络数据报的一些控制代码,分割数据包。所以你不能像0a:11:22:33:44:55这种方法那样使用MAC地址。是时候切换到netcatsocat

相关内容