Ruby 通过bash和Telnet发送不可打印的ASCII码(如0x80)
我正试图通过telnet将不可打印的ASCII字符(代码128-255)发送到一个使用套接字对象读取数据的Ruby应用程序 当我尝试通过telnet发送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表
\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
(netcat)nc
\ 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
(netcat)nc
\ 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
(netcat)nc
\ x 8 0 \r \n
所以你做了一些非常错误的事情,而不是Telnet。转义序列\x80