Почему передача команд в telnet приводит к прерывистым сбоям соединения?

368
Mikey T.K.

В качестве дешевого обходного пути на многих серверах, у которых нет mailкоманды, был написан скрипт, который выводит команды SMTP в сеанс telnet. Соответствующая часть скрипта выглядит так

telnet mailserver 25 << EOF EHLO $HOST MAIL FROM: root@$HOST (and so on) EOF 

Это периодически завершается сбоем, когда «соединение закрыто удаленным хостом». А tcpdumpнеудачного сеанса подтверждает, что почтовый сервер Postfix закрывает соединение сразу после отправки 220приветственного сообщения. Таким образом, ни одно из перенаправления ввода не сделало это по проводу.

До сих пор я не смог определить условия сбоя, но могу подтвердить, что с помощью nc (netcat) работает безупречно, каждый раз.

Ряд вопросов на этом сайте и Stack Overflow непреклонны, что ncявляется правильным инструментом для этой работы. Мне интересно, почему это так.

  • Почему сбой прерывистый?
  • Почему почтовый сервер зависает, прежде чем по проводной линии отправляется одна строка ввода от перенаправленного?
  • Почему telnetломается, но netcatнет?
0

1 ответ на вопрос

-1
davidgo

Скорее всего, это происходит из-за игнорирования почтового хоста. Отправка электронной почты требует подключения, а затем ответа. Если MAIL FROM выдается до того, как сервер ответит, отправка завершится неудачно. Действительно, некоторые серверы полагаются на небольшую задержку ответа HELO специально для того, чтобы остановить этот насос и закрыть соединение, как это часто делают спаммеры.

Есть способы справиться с этим (не используя Telnet, являющийся лучшим), но иначе используя некоторый сценарий беседы. Если это недоступно, добавление задержек вручную не решит проблему, но может существенно ограничить проблему.

Поскольку вы, похоже, используете некую среду Linux, использование nc (netcat) через Telnet считается наилучшей практикой. В последней части этой ссылки показано, как использовать netcat и «ожидать», чтобы лучше отправлять электронную почту и правильно обрабатывать время.

Netcat - это замена telnet, а не то, что можно использовать поверх telnet. Если бы отсутствие задержки было проблемой, netcat постигла бы та же участь. psusi 7 лет назад 0
В этой части мира «за» в этом контексте «за» подразумевает «в предпочтении». Использование nc для общения поверх telnet не является бессмысленным в этом контексте. davidgo 7 лет назад 0
Я вижу, но все же, почему nc vs telnet вообще что-то меняет? Они оба подключаются к удаленному хосту и отправляют то, что вы им даете. psusi 7 лет назад 0
Именно этот вопрос задают здесь ... Mikey T.K. 7 лет назад 0

Похожие вопросы