[英]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.