繁体   English   中英

使用Netcat或Rails通过TCP / IP发送数据

[英]Send data over TCP/IP with Netcat or Rails

我有服务器的IP和端口,可以在Ubuntu 14.04上通过nc连接到该端口。

> nc x.x.x.x PORT

为了与服务器进行通信,第一步是发送WAKEUP呼叫并获得确认。 服务器在唤醒调用中期望3字节的ID。 文档中提供了一个示例,该示例显示了使用软件发送ID和接收确认的成功方案。

客户端发送:

<sy><sy><eq>111<et>

服务器响应:

<sy><ak>A<et><cr>

这是<sy>一些细节

在<>括号内是不可打印的ASCII字符( <sy> = ASCII 22或十六进制0x16)

我试图复制完全相同的方案,但没有这样做。 服务器没有响应我发送的数据,尽管在那里收到了数据。 我不确定这些标签<sy><sy><eq>等。如何正确发送ID(111)和这些标签<sy>

还尝试使用Rails框架和Bindata ruby gem发送此数据,但不知道如何表示以上格式。

netcat可能是错误的工具。 或者至少您将要使用其他程序来提供输入。

如果这样做的话,我会用python或C语言编写一些代码,这些代码既可以连接到服务器,也可以向我提供发送(以及接收/解释响应)所需的任何数据,而完全不使用nc 网上有很多例子。

您可以使用<sy>字符的语法b'\\x16'将控制字符编码为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为“ Ctrl-V”),并且需要知道如何使终端接受该文字字符(巧合的是,在Linux中,您必须在大多数控制字符之前)使用Ctrl-V,以便将它们作为输入输入,并避免以通常的方式解释它们:Ctrl-D == EOF,Ctrl-C ==中断,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

但要注意的另一个重要事项是,通常在输入换行符之前(即按Return键), nc实际上不会发送任何内容。 然后,该换行符也将发送到服务器,而这可能不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM