2015-02-09 2 views
0

Как проверить, завершена ли команда сервера TELNET на сервере, используя исходные параметры telnet в C?Проверка завершения команды TELNET

recv (...) ждет ввода буфера, однако не дожидается завершения команды.

Должно ли быть ожидание на уровне сокета? Или, есть ли опция TELNET для этого? (Я еще не нашел его в поиске)

man socket показывает, что select/poll может использоваться для проверки сокета FD открыт для чтения/записи; но я не думаю, что это правильный путь.

Любая помощь или, по крайней мере, направление было бы полезно.

+0

Когда вы получаете строку подсказки назад? –

+0

Я общаюсь с несколькими программами, которые индивидуально имеют строки. Это то, о чем я думал изначально. Это был бы грязный способ решения, но я уверен, что есть что-то более элегантное. – timonti

+0

Вы пытаетесь написать свой собственный telnet-сервер? Вы еще не прочитали спецификацию Telnet? Команды Telnet имеют для них очень специфическую структуру. Вы читаете необработанные данные из сокета, поэтому вам нужно разобрать то, что вы получаете, и если команда неполна, чем вам нужно вернуться в сокет и прочитать больше необработанных байтов, чтобы закончить синтаксический анализ, чтение и разбор в цикле, как до тех пор, пока вы не получите полную команду, вы можете ее обработать. Это базовое сокетное программирование. –

ответ

1

Предполагая, что вы имеете в виду команды, которые вы используете на удаленном хосте, а не команды telnet (IAC DON'T ECHO и т. Д.), Вы не можете делать то, что хотите. Соединение telnet - это просто терминал, передающий символы взад и вперед. Он не знает, представляют ли какой-либо из этих символов команды и ответы на программу с другой стороны.

Так что действительно вопрос в том, как программно управлять некоторым интерфейсом командной строки, который был разработан для интерактивного использования. Ответ будет зависеть только от интерфейса командной строки, а не от метода, который вы используете для подключения к нему (telnet, ssh, RS232 serial ... у вас была бы такая же проблема в любом случае).

Человеческий оператор, для которого был разработан интерфейс командной строки, необходим для понимания подсказок, а также должен быть достаточно интеллектуальным, чтобы реагировать на неявку ожидаемого приглашения. Написание программы для этого для конкретного интерфейса командной строки может быть затруднено, если вам не повезло, и у него есть команда ввести неинтерактивный режим со структурированными ответами.

Инструмент, который обычно используют для написания такой программы, - expect.

+0

Спасибо. Я соглашусь на это. – timonti

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