我有一个服务器IP和一个端口,我可以在Ubuntu 14.04上通过nc连接。
> nc x.x.x.x PORT
为了与服务器通信,第一步是发送WAKEUP呼叫并获得确认。服务器在唤醒调用中需要3个字节的ID。文档中提供了一个示例,其中显示了使用软件发送ID和接收ack的成功方案。即
客户发送:
<sy><sy><eq>111<et>
服务器响应:
<sy><ak>A<et><cr>
以下是<sy>
在&lt;&gt;内括号是不可打印的ASCII字符(
<sy>
= ASCII 22或Hex 0x16)
我试图复制完全相同的情况但未能这样做。虽然在那里接收了数据,但服务器不响应我发送的数据。我不确定这些代码<sy><sy><eq>
等。如何正确发送ID(111)以及这些代码<sy>
?
还尝试使用Rails框架和Bindata ruby gem发送此数据,但不知道如何表示上述格式。
答案 0 :(得分:1)
netcat
可能是错误的工具。或者至少你会想要使用其他程序来输入它。
如果我这样做,我会在python或C中编写一些代码,这些内容既可以连接到服务器,也可以提供发送它所需的任何数据(并接收/解释响应),而忽略nc
共。网上有很多例子。
您可以使用b'\x16'
字符的语法<sy>
对python中的字节字符串中的控制字符进行编码。大多数其他语言都具有相同的功能。
我无法确切知道这些角色是什么。它们似乎是标准的ASCII控制字符,但它们并没有使用标准缩写(例如,请参阅http://www.theasciicode.com.ar/)。因此,您正在查看的文档可能包含相应值的列表。假设为了示例,<eq>
对应于ASCII ENQ字符,<et>
对应于ASCII EOT(并且已经知道<sy>
等同于ASCII SYN),您想要的字符串<sy><sy><eq>111<et>
可以用python字节字符串编码:b'\x16\x16\x05111\x04'
(或等效b'\x16\x16\x05\x31\x31\x31\x04'
如果您喜欢规律性:1
字符只是ASCII数字,因此您可以将每个1
替换为其二进制等效b'\x31'
)
要返回nc
,尝试从终端窗口输入控制字符到nc
输入,虽然在大多数情况下可能非常困难且容易出错。您将需要知道等效的控制字符映射(例如,0x16是&#34; Ctrl-V&#34;)并且需要知道如何让终端接受该文字字符(巧合的是,在linux中,你有使用Ctrl-V在大多数控制字符之前输入它们以避免以通常的方式解释它们:Ctrl-D == EOF,Ctrl-C == Interrupt,Ctrl-W == Delete-Previous- Word等。)
因此,如果您想从命令行输入上面的数据到nc
的输入,您需要输入以下字符:
Ctrl-V Ctrl-V <sy> / SYN
Ctrl-V Ctrl-V <sy> / SYN
Ctrl-V Ctrl-E <eq> / ENQ
1
1
1
Ctrl-V Ctrl-D <et> / EOT
但值得注意的是,通常nc
在您输入换行符之前不会发送任何内容(即按回车键)。然后,该换行符也将被发送到服务器,这可能不是您想要的。