所以我一直在努力把hex发送到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
然后
回声我会得到答复的。
所以我的问题是,015320之间的差值是多少。。
我有点困惑。
最佳答案
当你说
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/