linux - 十六进制到 TCP 端口 - BASH

标签 linux bash tcp

所以我一直在努力将十六进制发送到 tcp 端口。现在,我的下一个任务是执行以下操作,但这是一种不同的十六进制方式?

我想我需要一些帮助,因为任何地方的文档都非常糟糕。

到目前为止,我被告知的十六进制(命令)是这样的

 01 53 20 00 41 04 4F

所以通常情况下,我会在 linux 中执行以下操作

exec 3<>/dev/tcp/IP OF SERVER/PORT TO SERVER

然后

echo -ne '01 53 20 00 41 04 4F' >&3

然后

echo <&3

但我没有收到任何回复,只是一片空白。

对不起,我忘了说,

我习惯做的是

echo -ne 54686973776f726b7366696e65 | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' >&3

然后 echo <&3 生病得到答复。

所以我的问题是,01 53 20 等之间有什么区别......

我有点懵。

最佳答案

当你说

echo -ne 54686973776f726b7366696e65 | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie' >&3

您正在通过 Perl 传输十六进制代码,Perl 会将它们分解并为您将它们翻译成 8 位字符代码。

另一方面,Bash 处理文本的能力不如 Perl(这就是您首先需要 Perl 的原因)。充其量,因为您没有进行任何翻译,另一方将看到文字文本 01 53 20 00 41 04 4F

为了完全在 Bash 中执行此操作,您必须执行以下操作

echo -ne '\x01\x53\x20\x00\x41\x04\x4f' >&3

\x## 代码基本上等同于 Perl 对每对数字所做的操作...并且 -e 启用该转换。

作为引用,这对我来说效果很好:

exec 3<>/dev/tcp/127.0.0.1/80
# 'GET /\r\n'
echo '\x47\x45\x54\x20\x2f\x0d\x0a' >&3
# Note: `echo <&3` didn't work here, in my tests.
cat <&3

关于linux - 十六进制到 TCP 端口 - BASH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754725/

相关文章:

linux - 如何在linux上将安装的gdb添加到系统路径

c++ - 尝试构建xerces c++解析器。 Netbeans和命令行构建错误未定义对“xercesc_3_2…”的引用

bash:传播以别名执行的命令的退出代码

java - Arraylist 通过 java 中的 tcp?

jquery - 使用 PhoneGap/jQuery mobile 将数据发送到本地网络上的 TCP 服务器

c# - 如何使用 ASP.net C# 将 HTTP Post 请求发送到套接字

我编译的每个可执行文件上的 linux 'cannot execute binary file',chmod 777 没有帮助

linux - Bash 脚本 : how to add a section to a config file?

linux - Bash:模式之间的 sed/grep(仅包括第一个模式)

linux - 当操作系统等待用户输入时,CPU 是否仍在执行任何指令?