Hello Telnet (with PacketSender, Putty)

주싱·2022년 1월 28일
0

Network Programming

목록 보기
4/21

01. 배경설명

장비 원격 제어 프로그램을 개발하고 있는데, 제조사에서 명령어 스펙만 단순하게 정의된 프로토콜 문서를 준다. 연결은 어떻게 하는거냐고 물었더니 Telnet으로 접속하면 된다는 답변을 받았다. 내가 어렴풋이 아는 Telnet은 User, Password 입력하고, CLI(Command Line Interface) 기반의 가상 터미널을 제공하는 클라이언트 프로그램인데... 상대가 외국인이기도 했고, 일단 내가 기본적인 개념을 잘모르는 부분이 있는 것 같아 질문 전에 기본적인 개념을 먼저 이해하려고 학습을 시작했다.

02. 개념잡기

먼저 구글에서 검색해서 Wikipedia 내용을 읽어 보았다. 내게 필요한 내용만 간단히 요약해 본다.

기본

  • TCP 프로토콜 위에서 동작하는 (매우 심플한)응용 계층 프로토콜
  • 기본 23번 포트를 사용하나, 다른 포트로 변경하여 사용 가능
  • 문자 기반 프로토콜 (기본 ASCII 인코딩)
  • 양방향 통신 프로토콜

활용

  • 프로그래밍 인터페이스와 사용자 인터페이스를 하나의 프로토콜로 제공 가능한 장점이 있다.
  • TCP 위에서 동작하는 문자 기반 응용 계층 프로토콜 (FTP, HTTP, Custom Protocol 등) 디버깅에 유용하게 활용 가능 (연결, 간단한 메시지 전송 후 응답 확인)

보안

  • 기본적으로 사용자 데이터에 어떠한 암호화도 수행하지 않음 (심지어 비밀번호가 있더라도)
  • 여러 Telnet 구현에서 통신에 참여하는 사용자에 대한 인증도 수행하지 않는 경우도 많아

03. 실습하기

이제 Telnet 서버와 클라이언트 프로그램을 실행하고 데이터를 주고 받아 보자. 상용 도구를 사용했고 서버는 PacketSender 클라이언트는 Putty를 사용했다.

서버 실행하기

  • 먼저 PakcetSender 프로그램을 다운로드해서 설치하고 실행한다.

  • TCP 서버 설정을 위해 Menu > File > Setting 에 들어간다.
  • Enable TCP Server 설정을 활성화 하고, 원하는 서버 포트를 입력한다. 기본 23번 포트이지만 내가 원하는 포트를 사용 가능하다.
  • 그리고 Persistent TCP connections 설정을 활성화한다. (비활성화 시, 하나의 메시지 처리 후 연결이 끊어진다)
  • 이제 OK 버튼을 눌러 저장한다.

  • 메인 창에 아래와 같이 TCP:24 라고 표시되면 24번 포트를 열고 있는 TCP 서버가 실행된 것이다. 해당 부분이 ‘TCP Server Disabled’ 라고 표시되면 해당 토클 버튼을 눌러주면 다시 활성화 된다.

클라이언트로 접속하기

  • 먼저 Putty 프로그램을 다운로드해서 설치하고 실행한다.

  • Connection Type을 Other로 선택하고 콤보박스에서 Telnet을 선택한다.
  • Host Name / Port 에 127.0.0.1/24 를 입력하고 Open 버튼을 선택한다.

  • Telnet 세션창이 새롭게 열린다.

  • Server 쪽에서도 연결이 활성화 되고 별도의 세션창이 새롭게 열린다.
  • 앞에 뜨는 저건 내부적으로 뭔가 주고 받는 것 같은데 지금은 중요하지 않다.

데이터 주고 받기

  • 클라이언트에서 “HELLO”, 개행, “WORLD” 라고 입력해 본다. 서버에 해당 메시지가 수신된다.

  • 서버에서도 “I AM SERVER” 라고 입력해 본다. 클라이언트에서 해당 메시지가 수신된다.

04. 마치며

개인적으로 Telnet을 한 문장으로 정의해 보면 (특별한 규약이 없다시피한) TCP 기반, 문자 기반, 양방향 응용 계층 통신 프로토콜인 것 같다. 특별한 제약이 적다보니 TCP 기반이고, 문자 기반의 다양한 응용 계층 프로토콜, 예를 들면 FTP, HTTP, 기타 사용자 정의 프로토콜 등을 디버깅하는 목적으로 확장하여 유용하게 사용할 수 있는 것 같다. 물론 나의 경우처럼 단순한 장비를 제어하는데도 활용할 수 있겠다. 그리고 공부하다가 느낀건데 아래의 내용은 Telnet 구현에 따라 달라지는 내용이지 모든 Telnet 구현에 적용되는 내용은 아님을 알았다. 저런 부분들이 Telnet 필수 스펙이라고 생각해서 약간 혼돈이 왔었던 것 같다.

  • 23번 포트를 사용하지 않아도 된다.
  • 반드시 한 문자씩 전송하지 않아도 된다. (Windows Telnet Client는 키 입력이 있을 때 마다 전송한다)
  • Telnet 에서 정의하는 프로토콜 명령어도 사용하지 않아도 된다.
  • 사용자 인증을 하지 않아도 된다.
profile
소프트웨어 엔지니어, 일상

0개의 댓글