pepoとネットワークを語ろう

40年前からこれまでとこれからのネットワークを語る

telnetクライアントへの道その5

2009-08-05 18:57:01 | Linux

さて、telnetクライアントはtelnetサーバとコマンド&レスポンスのやり取りが
必要で今まで書いてきたプログラムの中でもう一つ説明していないのがTerminal Typeです、これを送信しないとLinux、FreeBSDはloginプロンプトを送りません

Terminal Typeとはクライアントの画面に文字情報を表示する場合に必要なエスケープキャラクタやカーソル情報など端末固有情報です

terminal type をここではVT100と定義して、

#define MY_TTYPE  "vt100"  /* terminal type */

サーバ→クライアント

    Command: Do Terminal Type
に対して

クライアント→サーバ
    Suboption Begin: Terminal Type
    Command: Suboption End

|IAC|SB|TELOPT_TTYPE|00|vt100|IAC|SE|

|ff|fa|18|00|7674313030|ff|f0|

上記のデータを次の関数でTerminal Typeとして送信してやります

send_ttype() {
  int dummy = 0;
  sprintf(f3,"%c%c%c%c%s%c%c",IAC,SB,TELOPT_TTYPE,dummy,MY_TTYPE,IAC,SE);
  write(fp2,&f3, 6 + strlen(MY_TTYPE));
  return;
}

これでサーバがTerminal Typeを認識してloginプロンプトを表示してくれます

pepo