![](https://jhalfmoon.com/dbc/wp-content/uploads/2018/11/JH-2-150x150.png)
前回うさちゃんRabbit4000とラズパイ4の間でtelnet接続成功したものの、通信の様子を「遠くから眺めた」だけで終わってました。今回は例によってwireshark使ってパケット毎に観察していきます。生のパケットの中身を覗くとうさちゃんが「あれはやるな、これもダメ」と文句垂れてることに気づきました。わがまま?
※「うさちゃんと一緒」投稿順 Index はこちら
※Rabbitシリーズのマニュアルは、販売元のDigi社のページからダウンロードできます。
※実験にはRabbit4000搭載のRCM4010モジュールを使用しています。ソフトウエアはDynamic C 10.72でコンパイルしています。
※うさちゃんの対向機には、Raspberry Pi 4 model B(Raspberry Pi OS 64bit bullseye)を使用しています。telnet、wiresharkなどはこのラズパイ4で動かしてます。
telnetプロトコルの日本語解説記事
「素の」telnetこそは、もっともプリミティブなTCP利用のプロトコルだと思う(ヘッダもクソもない)のですが、最近ではどこかのポートを手動でハッキングする(デバッグする?)用途くらいでとんと使われないのではないかと思います。今回、telnet上の「やりとり」を解説している日本語の資料を探してみたのですがtelnetの使い方とかの記事ばかりヒットして、wiresharkで眺めるうさちゃんとラズパイのひそひそ話解読に役にたつものがなかなか見当たりません。直接RFC原文に当たらないとダメなのか?(でも複数のRFCに分散してるらしいのでメンドそうです。)そんな中よいページを発見しました。
aji-ssz様 「3分間NetWorking」の以下の記事であります。
非常にわかりやすくtelnetの端末とホスト間の「やりとり」を解説していただけてます。ありがとうございます。ただし、20世紀の古いプロトコルを21世紀初めに解説した記事だけあって、本文中の図版部分に「Adbe Flash Playerのサポートは終了しました」が表示されてます。ちょっと残念。Adbe Flashは遠くなりにけりっと。違うか。
また、telnetがやりとりする「コマンド文字の一覧」などを単刀直入に確認するだけであれば、7key雑学辞典様の以下のページもお役立ちかと。
ラズパイ4上のtelnetコマンドからうさちゃんへtelnet接続
うさちゃん上では、前回ビルドしたプログラムで、telnet接続で相手から送られてきたした内容をうさちゃんの標準出力にたれ流すだけの「telnetサーバ」が動いてます。ラズパイ4上では昔ながらの telnet (よい子は「リモートログイン」にこのプログラムをつかっちゃいけないと警告されるやつ)でうさちゃんのtelnetポートに接続、以下の文字列を打ち込んで、quitしてます。
abcdefg
まずは、キャプチャしたラズパイ4(192.168.2.126)とうさちゃん(192.168.2.59)の通信の全貌が以下に。
ARPまで戻ることはないだろ~ということで、ARPのやり取りは赤斜線で消しました。それ以外を「かたまり」でわけるとこんな具合かと(個人の都合?で分類してます。)
-
- 最初の黄色のマーカ部分、TCPの3ウエイ・ハンドシェーク
- 黄緑色のマーカ部分、ラズパイ4側からのtelnet接続の開始とネゴ。
- 水色のマーカ部分、うさちゃん側からの「一方的な」ご要求。
- ピンク色のマーカ部分、ラズパイ4側から文字列データの送信。
- 最後の黄色のマーカ部分、TCPコネクションの切断
うさちゃんサーバには「認証もクソもない」のでやりとりはシンプル極まりないっすけど、裏じゃいろいろネゴしていると。
さすがに1と5のTCPのところはパスして、2番から始めます。
まずパケット7番でラズパイ4からうさちゃんに向けてtelnet接続の条件をいろいろ送ってきてます。こんな感じ。
DoとかWillとか、いろいろ並んでますけれども以下のような意味みたいです。
-
- DO 相手に要求、お返事はWILLで使用、WON’Tで使用しない
- WILL 使用を宣言、お返事はDOで許可、DON’Tで不許可
- WON’T 相手にやめさせる WON’T以外の回答許されず。やめる
- DON’T 自分が無効 DON’T以外の回答許されず。無効了解
ラズパイ4側からいろいろ要求したり、宣言してたりしますな。それに対するうさちゃんの回答が以下のパケット8番に
Suppress Go Aheadだけ、Won’tだと。英語だから「使わんよ」ということで理解してよいのかな(二重否定は英語と日本語で挙動が違うので、私は恐れます。)その他の要求にはまったく回答してないけど受け入れたってことなんでしょうか。単なる無視。うさちゃん手抜きだな。
なお、GO AHEAD(GA)文字というのは、古の半二重通信用で通常使わないみたいです。半二重のトランシーバ使っているときの送信末尾の「オーバー」とか「どうぞ」みたいな使い方のキャラクタみたい。
パケット9はうさちゃんからの上記パケットに対するラズパイ4からのACKみたいなので、パケット10へ進みます。今度の発信元はうさちゃんです。
うさちゃんからは、あれやるな、これやるなとDon’tの連続です。まあ、うさちゃん側で走っているプログラムは「ミニマム」なサーバもどきなのでいたしかたないっすかね。ラズパイ4は黙ってACK返してきてます。そんなもんなのか。
そしてパケット14、ラズパイ4から文字列 “abcdefg\r\n” がご到着です。ラズパイ4の「素の」telnetでは設定デフォルトのままで1行入力したあとEnterキーを押したのです。デフォルトでは「復帰」、「改行」を送ってくれるのね。また、telnetというと1文字づつ送るイメージあったですが、telnetコマンド側からWill Linemodeとかネゴされていたので、1行=1パケットなのね。うさちゃんは何も気にしてない(バッファサイズだけ)のだけれど。
なんとか、ラズパイ4とうさちゃん間のやり取りが見えてきた気がしますな。ホントか?