프로토콜 협상 없이 telnet 명령 사용

프로토콜 협상 없이 telnet 명령 사용

TCP/IP 서버를 통해 직렬 포트에 연결하기 위해 텔넷을 사용하고 있습니다. 필터링되지 않고 버퍼링되지 않은 원시 연결이 필요하며 대부분 거기에 도달할 수 있지만 내가 무엇을 하든 연결할 때 텔넷은 프로토콜 협상 명령을 보냅니다.

"man Telnet" 페이지에 다음과 같이 나와 있기 때문에 이것은 이상합니다.

When connecting to ports other than the telnet port, telnet does not attempt telnet
protocol negotiations. This makes it possible to connect to services that do not
support the telnet protocol without making a mess.

그러나 비표준 포트에 연결하더라도 텔넷은 다음을 협상합니다.

linuxdev:~ griscom$ telnet 172.16.250.49 2023
Trying 172.16.250.49...
Negotiating binary mode with remote host.
Connected to 172.16.250.49.
                           Escape character is '^]'.

그리고 매뉴얼 페이지에서 경고했듯이 이는 혼란을 야기할 수 있습니다.

완전히 투명한 TCP/IP 클라이언트로 텔넷을 사용할 수 있는 방법이 있습니까? 아니면 사용할 수 있는 다른 도구가 있나요?

세부 사항:

  • Ubuntu 22.04 시스템에서 텔넷 실행
  • 서버는USR-TCP232-T2 이더넷-직렬 변환기
  • 직렬 포트는 Linux 시스템의 콘솔에 연결되어 있으므로 vim제어 문자를 실행하거나 입력하려면 버퍼링되지 않은 투명성이 필요합니다.

편집: 문제를 발견했습니다. telnet기본적으로 "라인" 모드에서 실행되어 문자를 수집하고 다음에 CR을 입력할 때 이를 보냅니다. "문자" 모드에서 실행하여 데이터를 있는 그대로 보내야 합니다.

telnet문제: 상대방과 변경 사항을 협의하지 않고는 "캐릭터" 모드를 설정할 수 없습니다. 증명: 구성되지 않은 텔넷을 사용하여 직렬 어댑터에 연결하면 어댑터로 전송된 협상된 문자를 받을 수 없습니다. 그러나 를 ^]사용하여 명령 모드에 들어간 다음 을 입력 하면 즉시 상대방과 협상하여 혼란을 겪게 됩니다 mode character. (파일을 telnet사용하여 문자 모드로 연결을 구성하는 경우에도 .telnetrc같은 일이 발생합니다 .)

따라서 해당 포트에 가짜 명령 바이트를 보내지 않고 telnet"문자" 모델의 포트에 연결하는 것은 불가능합니다. 다른 솔루션이 필요합니다.

답변1

netcat( )를 사용하여 nc투명한 연결을 만들 수 있습니다 .

   nc {host} {port}

클라이언트는 협상을 올바르게 시도하지 못 하더라도 telnet항상 서버의 협상 요청에 응답합니다. 나는 이번 사건에서 이런 일이 일어났을 것이라고 믿는다. 모든 협상을 피하기 위해 사용할 수 있습니다 nc.

nc라인 모드에 있는 것처럼 보일 수도 있습니다 . 이는 사실이 아니며 단지 터미널 드라이버가 원시 모드로 들어가도록 요청받지 않은 것뿐입니다.

stty raw; nc {host} {port}

이렇게 하면 터미널 세션을 사용하여 종료할 수 없습니다 nc. 다른 곳에서 신호를 보내야 합니다.

ps | grep -w nc    # 60883 pty0     00:00:00 nc
kill 60883         # ^this^

관련 정보