所以我一直在努力将十六进制发送到 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/