2015-01-08 2 views
0

Я пытаюсь отправить непечатаемые символы ASCII (коды 128 - 255) через telnet в приложение Ruby с использованием объектов Socket для чтения данных.Отправка непечатаемых кодов ASCII (например, 0x80) через bash и Telnet

Когда я пытаюсь отправить \x80 через telnet, я ожидаю, что Ruby получит строку из 3 байтов: 128 13 10.

Фактически я получаю строку из 6 байтов: 92 120 56 48 13 10.

Нужно ли мне что-то менять в отношении того, как telnet отправляет информацию, или как приемник Ruby принимает его? Я прочитал весь жаргон telnet, который я могу понять. Точка в правильном направлении была бы очень оценена.

ответ

3
92 120 56 48 13 10 

в десятичной ASCII:

\ x 8 0 \r \n 

Таким образом, вы делаете что-то очень неправильно, и это не Telnet. Эквивалентная последовательность \x80 обрабатывалась буквально, а не понималась как один символ кода = 128.

Думаю, вы использовали '\x80' вместо "\x80". Обратите внимание на разные кавычки. Если это был один персонаж, вы можете в Руби также использовать ? символ для обозначения символа: ?\x80 так, например:

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

, а конечно

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

-

Резюмируя длинный рассказ из комментариев:

  • Первоначально данные будут отправлены en через telnet-терминал
  • telnet-терминалы часто не принимают никаких кодов эвакуации и «просто отправляют» все, что у них получается напрямую, иногда копируя &, вставляя текст со специальными работами символов, иногда терминалы предоставляют некоторые дополнительные свойства UI для отправки специальных символов - но на этот раз терминал был очень простым, и вставка его не работала, и не было никаких пользовательских плюсов
  • вместо ввода данных вручную, отправка файла через трубу в терминал telnet казалась намного лучше. Некоторые данные прибыли, но не хорошо
  • конвейеру данные nc (NetCat) вместо телнета терминал почти, казалось, работали, двоичные данные прибыли, но он не был совершен
  • после изучения входного файла (тот, который был с номером hexdump utility, выяснилось, что файл содержит не то, что мы думали, кажется, что редактор, используемый для создания файла, сохранил текст с неправильной кодировкой, и добавил несколько лишних лишних байтов.
  • наконец, utility called xxd помогли создать хорошие двоичные данные из специально разработанного шестнадцатеричного текста; выход xxd может быть напрямую подключен к nc (netcat)
+0

Я вручную вводим шестнадцатеричный код в telnet, а не через Ruby. Это _accepted_ by Ruby и интерпретируется по-характеру. Я спрашиваю, как ввести специальный символ в telnet, чтобы Ruby понял, что я имею в виду. –

+0

@BradRice: Обычно вы не можете. Но это зависит от того, какой терминал вам нужен. У интеллектуальных терминалов часто есть какая-то боковая консоль или окно, когда вы можете выпустить команду, например, «теперь отправьте этот специальный символ». Но если у вас нет ничего подобного, то the onlu заключается в попытке скопировать вставку его точного символа или строки из текстового блокнота, который может обрабатывать их. Кроме того, вы можете попытаться передать в терминал текстовый файл, который содержит текст со специальными символами, вместо того, чтобы вводить их вручную. Часто это более удобно и повторяемо. Или напишите сценарий для этого или (...) – quetzalcoatl

+0

И под терминалом я подразумеваю «telnet terminal», а не ваше окно Bash/console/etc. Я имею в виду приложение, которое вы используете для установления соединения telnet. Telnet - это имя протокола, и есть много разных клиентов (терминалов), которые его обрабатывают. Например, 'putty' может, и он поддерживает вставку специальных символов (при условии, что вам удастся скопировать их в буфер обмена). – quetzalcoatl

Смежные вопросы