さて、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と