Как взаимодействовать с сервером Swank на низком уровне с помощью telnet?

Я пытаюсь поиграть с сервером Swank из командной строки (без какой-либо конкретной производственной цели, просто пытаясь понять вещи с некоторыми хакерскими идеями на потом), и я не могу понять, что я могу ввести из сеанса telnet для получение любого полезного ответа; например, как я мог оценить (+ 1 1)?

предыдущий вопрос говорит :

Связь с swank-сервером действительно возможна, если вы ознакомитесь с swank-протоколом, который кажется недостаточно документированным (см., например, здесь: https://github.com/astine/swank-client/blob/master/swank-description.markdown). Однако при этом открывается TCP-сокет по сети, что может быть небезопасно. Когда-то я тоже так пробовал, но скорость IPC меня не устраивала.

и ссылка на самом деле дает некоторые подсказки, но, к сожалению, нет примера. Я не мог получить никакого результата.

Вот что я пробовал; после отдельного запуска сервера с

(swank:create-server :port 4005  :dont-close t :style NIL)

Я пробовал такие вещи, как:

~ $ telnet localhost:4005
00001e(swank:listener-eval (+ 1 2))

и получил следующее сообщение об ошибке:

" "Reader error in file #<string-input stream from \"(swan...\" 0x6045ce0640>, position 20:
Cannot find the external symbol LISTENER-EVAL in #<\"SWANK\" package>.")Connection closed by foreign host

Какой в ​​этом случае будет строка, которую я должен ввести?


person Thomas Baruchel    schedule 27.07.2019    source источник
comment
Как насчет swank-repl:listener-eval ?   -  person Rainer Joswig    schedule 27.07.2019
comment
Привет @RainerJoswig Если я не ошибаюсь, я получаю ответ Connection closed by foreign host, как только набираю его.   -  person Thomas Baruchel    schedule 29.07.2019


Ответы (1)


Мне удалось сделать эту работу:

00003e(:emacs-rex (swank:interactive-eval "(+ 1 2)") "cl-user" t 8)

Обратите внимание, что сначала есть ключевое слово :emacs-rex, и как форма для оценки находится в строке. 8 здесь просто произвольное значение. Ответ сначала начинается с 00A1C8(:indentation-update ...), за которым следует:

000031(:return (:ok "=> 3 (2 bits, #x3, #o3, #b11)") 8)
person coredump    schedule 30.07.2019