Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过bash和Telnet发送不可打印的ASCII码(如0x80)_Ruby_Sockets_Ascii_Telnet_Extended Ascii - Fatal编程技术网

Ruby 通过bash和Telnet发送不可打印的ASCII码(如0x80)

Ruby 通过bash和Telnet发送不可打印的ASCII码(如0x80),ruby,sockets,ascii,telnet,extended-ascii,Ruby,Sockets,Ascii,Telnet,Extended Ascii,我正试图通过telnet将不可打印的ASCII字符(代码128-255)发送到一个使用套接字对象读取数据的Ruby应用程序 当我尝试通过telnet发送\x80时,我希望Ruby会收到一个3字节的字符串:1281310 我实际上收到了一个6字节的字符串:9212056481310 我是否需要更改telnet发送信息的方式,或者Ruby套接字接受信息的方式?我已经通读了我能理解的所有telnet术语。如果你能指出正确的方向,我将不胜感激 92 120 56 48 13 10 以十进制ASCII表

我正试图通过telnet将不可打印的ASCII字符(代码128-255)发送到一个使用套接字对象读取数据的Ruby应用程序

当我尝试通过telnet发送
\x80
时,我希望Ruby会收到一个3字节的字符串:
1281310

我实际上收到了一个6字节的字符串:
9212056481310

我是否需要更改telnet发送信息的方式,或者Ruby套接字接受信息的方式?我已经通读了我能理解的所有telnet术语。如果你能指出正确的方向,我将不胜感激

92 120 56 48 13 10
以十进制ASCII表示:

\  x   8  0  \r \n
所以你做了一些非常错误的事情,而不是Telnet。转义序列
\x80
被逐字处理,而不是理解为单个字符的code=128

我猜您使用了
'\x80'
而不是
“\x80”
。注意不同的引号。如果是单个字符,您也可以在Ruby中使用
字符来表示字符:
?\x80
,例如:

"\x80\r\n" == ?\x80 + ?\r + ?\n
=> true
当然

'\x80\r\n' == "\x80\r\n"
=> false
--

要从评论中总结一个长故事:

  • 最初要发送的数据是通过telnet终端手动输入的
  • telnet终端通常不接受任何转义码,直接“发送”他们得到的所有信息,有时复制和粘贴带有特殊字符的文本起作用,有时终端提供一些额外的UI功能来发送特殊字符,但这次终端非常基本,粘贴不起作用,也没有UI功能
  • 通过管道向telnet终端发送文件似乎比手动输入数据要好得多。一些数据到了,但不是很好
  • 通过管道将数据传输到nc(netcat)而不是telnet终端似乎可以工作,二进制数据已经到达,但还不完美
  • 在检查输入文件(通过管道传输到nc的文件)后,发现该文件所包含的内容与我们的想法不完全相同,似乎用于创建该文件的编辑器使用错误的编码保存了文本,并且添加了一些额外的不需要的字节
  • 最后,a有助于从定制的十六进制文本生成良好的二进制数据;
    xxd
    的输出可以直接通过管道输送到
    nc
    (netcat)
以十进制ASCII表示:

\  x   8  0  \r \n
所以你做了一些非常错误的事情,而不是Telnet。转义序列
\x80
被逐字处理,而不是理解为单个字符的code=128

我猜您使用了
'\x80'
而不是
“\x80”
。注意不同的引号。如果是单个字符,您也可以在Ruby中使用
字符来表示字符:
?\x80
,例如:

"\x80\r\n" == ?\x80 + ?\r + ?\n
=> true
当然

'\x80\r\n' == "\x80\r\n"
=> false
--

要从评论中总结一个长故事:

  • 最初要发送的数据是通过telnet终端手动输入的
  • telnet终端通常不接受任何转义码,直接“发送”他们得到的所有信息,有时复制和粘贴带有特殊字符的文本起作用,有时终端提供一些额外的UI功能来发送特殊字符,但这次终端非常基本,粘贴不起作用,也没有UI功能
  • 通过管道向telnet终端发送文件似乎比手动输入数据要好得多。一些数据到了,但不是很好
  • 通过管道将数据传输到nc(netcat)而不是telnet终端似乎可以工作,二进制数据已经到达,但还不完美
  • 在检查输入文件(通过管道传输到nc的文件)后,发现该文件所包含的内容与我们的想法不完全相同,似乎用于创建该文件的编辑器使用错误的编码保存了文本,并且添加了一些额外的不需要的字节
  • 最后,a有助于从定制的十六进制文本生成良好的二进制数据;
    xxd
    的输出可以直接通过管道输送到
    nc
    (netcat)
以十进制ASCII表示:

\  x   8  0  \r \n
所以你做了一些非常错误的事情,而不是Telnet。转义序列
\x80
被逐字处理,而不是理解为单个字符的code=128

我猜您使用了
'\x80'
而不是
“\x80”
。注意不同的引号。如果是单个字符,您也可以在Ruby中使用
字符来表示字符:
?\x80
,例如:

"\x80\r\n" == ?\x80 + ?\r + ?\n
=> true
当然

'\x80\r\n' == "\x80\r\n"
=> false
--

要从评论中总结一个长故事:

  • 最初要发送的数据是通过telnet终端手动输入的
  • telnet终端通常不接受任何转义码,直接“发送”他们得到的所有信息,有时复制和粘贴带有特殊字符的文本起作用,有时终端提供一些额外的UI功能来发送特殊字符,但这次终端非常基本,粘贴不起作用,也没有UI功能
  • 通过管道向telnet终端发送文件似乎比手动输入数据要好得多。一些数据到了,但不是很好
  • 通过管道将数据传输到nc(netcat)而不是telnet终端似乎可以工作,二进制数据已经到达,但还不完美
  • 在检查输入文件(通过管道传输到nc的文件)后,发现该文件所包含的内容与我们的想法不完全相同,似乎用于创建该文件的编辑器使用错误的编码保存了文本,并且添加了一些额外的不需要的字节
  • 最后,a有助于从定制的十六进制文本生成良好的二进制数据;
    xxd
    的输出可以直接通过管道输送到
    nc
    (netcat)
以十进制ASCII表示:

\  x   8  0  \r \n
所以你做了一些非常错误的事情,而不是Telnet。转义序列
\x80