【问题标题】:Hex to TCP Port - BASH十六进制到 TCP 端口 - BASH
【发布时间】:2013-12-24 12:48:56
【问题描述】:

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

但我没有得到回复,只是空白。

对不起,我忘了说,

我习惯做的是

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

然后 回声

所以我的问题是,01 53 20 等之间的差异是什么..

我有点困惑。

【问题讨论】:

  • @robmayoff 抱歉打错了

标签: linux bash tcp


【解决方案1】:

当你说

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

【讨论】:

  • @user3100345:尝试使用cat 而不是echo。 :P 我刚试过cat,效果很好。 echo 没有给我任何东西,这对我来说并不奇怪——它通常不处理输入。
  • 现在可以了。哇,为什么这会起作用而不是回显,但回显适用于我尝试使用不同的十六进制方案的所有其他命令。
  • 我不知道。实际上,我对 echo 曾经为您工作感到有些惊讶,因为它不读取输入。如果你尝试echo 'stuff' | echo,它也应该会失败(只给你一个空行)。
  • 对于我的最后一个问题,也许我可以打开另一个问题,但不想浪费它.. 我如何计算最后一位,即 01 53 20 00 41 04 的低 8 位结果以字节为单位计算......所以基本上 01 + 53 + 等将等于我的最后一部分。这是 4F 但这是如何计算的?顺便说一句,01 53 20 00 41 04 不是我为这篇文章更改的真正的十六进制代码。谢谢! @cHao
  • 你需要以一种有意义的方式重新表述它。
猜你喜欢
  • 2012-10-02
  • 2019-05-10
  • 2020-09-25
  • 2011-12-09
  • 2016-04-06
  • 2018-07-26
  • 2014-08-24
  • 2012-06-22
  • 1970-01-01
相关资源
最近更新 更多