Warum führt das Einleiten von Befehlen in Telnet zu zeitweiligen Verbindungsfehlern?

434
Mikey T.K.

Als billiger Hack-Workaround auf einer Reihe von Servern, die den mailBefehl nicht haben, wurde ein Skript geschrieben, das SMTP-Befehle in einer Telnet-Sitzung wiedergibt. Der relevante Teil des Skripts sieht so aus

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

Dies schlägt zeitweise mit einer "Verbindung, die von einem entfernten Host geschlossen wurde" fehl. Eine tcpdumpfehlgeschlagene Sitzung bestätigt, dass der Postfix-Mail-Server die Verbindung unmittelbar nach dem Senden der 220Begrüßungsnachricht beendet. Das heißt, keine der Eingangsumleitungen hat es über die Leitung geschafft.

Bisher konnte ich die Bedingungen des Ausfalls nicht genau ncfestlegen, aber ich kann bestätigen, dass die Verwendung von (netcat) jedes Mal einwandfrei funktioniert.

Eine Reihe von Fragen auf dieser Site und im Stack Overflow sind ausschlaggebend. ncDies ist das richtige Werkzeug für diesen Job. Ich bin daran interessiert, warum das so ist.

  • Warum ist der Fehler zeitweilig?
  • Warum wird der Mailserver aufgelegt, bevor eine einzige Eingabezeile von der umgeleiteten Leitung über die Leitung gesendet wird?
  • Warum telnetbricht doch netcatnicht?
0

1 Antwort auf die Frage

-1
davidgo

Dies ist höchstwahrscheinlich auf Verzögerungen des Mailhosts zurückzuführen, der ignoriert wird. Das Versenden einer E-Mail erfordert eine Verbindung und dann eine Antwort. Wenn MAIL FROM ausgegeben wird, bevor der Server geantwortet hat, schlägt das Senden fehl. In der Tat sind einige Server darauf angewiesen, diese HELO-Antwort etwas zu verzögern, um diese Pumpe anzuhalten und das Verbindungsverhalten zu beenden, wie dies häufig von Spammern geschieht.

Es gibt Möglichkeiten, dies zu behandeln (wobei Telnet nicht die beste ist), ansonsten jedoch ein Chat-Skript. Wenn dies nicht möglich ist, kann das Problem durch manuelles Hinzufügen von Verzögerungen nicht behoben werden. Das Problem kann jedoch erheblich eingeschränkt werden.

Da Sie scheinbar eine Art Linux-Umgebung verwenden, wird die Verwendung von nc (netcat) über Telnet als bewährte Methode angesehen. Der letzte Teil dieses Links zeigt, wie Sie netcat verwenden und "erwarten" können, dass Sie eine E-Mail besser senden und Zeitvorgaben korrekt verarbeiten.

Netcat ist ein Ersatz für Telnet und kann nicht über Telnet verwendet werden. Wenn der Mangel an Verspätung das Problem war, würde netcat das gleiche Schicksal erleiden. psusi vor 7 Jahren 0
In diesem Teil der Welt bedeutet "über" in diesem Zusammenhang "über" "Vorzug vor". Die Verwendung von nc zum Sprechen über Telnet ist in diesem Zusammenhang nicht unsinnig. davidgo vor 7 Jahren 0
Ich verstehe, aber warum sollte nc vs telnet überhaupt einen Unterschied machen? Beide stellen eine Verbindung zum Remote-Host her und senden das, was Sie ihnen geben. psusi vor 7 Jahren 0
Genau die Frage, die hier gestellt wird ... Mikey T.K. vor 7 Jahren 0