前回はうさちゃんとftpでした。そういえばftpよりももっと簡単?telnetもやっとくべきだな~と。しかし最近「素の」telnetなど使ったことないです。普通sshだよね。実際うさちゃんの対向機ラズパイ4にはtelnetインストールしてなかったです。今回はインストールから初めて、ひさしぶりに「素の」telnet。
※「うさちゃんと一緒」投稿順 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使うプロトコルの中でもかなりプリミティブなものではなかろうかと思います。接続を確立した後は、クライアントがテキトーなペイロード(多分、文字列)を投げ、サーバは受け取ったペイロードを解釈して返答をする、とこの繰り返し。そんな理解で大丈夫か?
今回試用してみるDynamic Cのサンプルプログラムは以下です。
Samples\TCPIP\telnet\rxsample.c
なんと、うさちゃんRabbit4000側がサーバ側担当とな。前回はクライアント側だったので「順当な攻守交替」ですけれども、非力なうさちゃんでできるのか?
一方telnetのクライアント担当はラズパイ4機です。先ほども書きましたが「普通 ssh しか使わない」ので「素の」telnetはインストールしてなかったです。その昔はtelnet、ftpは3種の神器的なものだったというのに(いつの時代だ?それに3つ目は何?)
サンプルプログラムの修正点は以下の追加のみです。
#define TCPCONFIG 1 #define _PRIMARY_STATIC_IP "192.168.2.59" #define _PRIMARY_NETMASK "255.255.255.0" #define MY_GATEWAY "192.168.2.1" #define MY_NAMESERVER "192.168.2.126"
Dynamic Cでビルドし、うさちゃんのRAMにプログラムを書き込んでGo!
ラズパイ4機からtelnetでうさちゃんに接続
昔懐かしい「素の」telnetコマンドでうさちゃんに接続した様子が以下に。うさちゃん側にはパスワードの認証などは何も持たせてないので、接続すれば即やりとりが始まってます。
abcリターン、defリターン、エスケープキャラクタを打ってtelnetのプロンプトを出し、quitと。忘れているかと思ったですが「手が覚えている」というやつ。コネクションを閉じました。
一方、同じときにうさちゃんRabbit4000機のStdioを観察したものがこちら。telnetで送られてくるデータの本体は、Stdioに「たれ流され」るようになってます。まず コネクション確立、そして abc とな。
まあ、ここまでのところ、予定通りでないかい。
telnetのやりとりを見張っていたwireshark
いつものようにラズパイ4機上では、wiresharkが見張りをしています。上記のやり取りをキャプチャしたところが以下に。
ARPなどのパケットも混じっていて、telnetのやりとりがわかりずらいので、前回同様フローグラフを使ってみました。こんな感じ。
うさちゃんが192.168.2.59です。ポートは23、ウエルノウンなtelnetポートですな。ポートひとつだけなので分かりやすいデス。ラズパイ4機側が192.168.2.126ポート56514とな。簡単とはいったけれども、それなりにやりとりはいろいろあるのね。次回はもっと詳しくみてみよう。