ネットワークオペレーターは、遠隔からオペレーションするときに現地にいる人の作業（機器の交換など）が終わるのを待たなければいけないときがある。そんなオペレーションの合間に、思わずほっこりとするような癒やしを与えてくれるサービスが開発された。コンピュータとつながってるかを確認するときに打つコマンド「ping」を使った、「pingアスキーアート」だ。

開発されたのはpingを打つと「にゃーん」を返すサービス。IPv4とIPv6のどちらにも対応している。ただし、Cisco ルーター限定。

Cisco ルーターのping。これを……

Cisco ルーターは、ICMP（Internet Control Message Protocol）のecho requestを送った結果を一文字ずつ返してくれる。例えば、通信相手と疎通できれば「！」を、できない場合は「．」を、宛先に到達できない場合は「U」を返すといった具合だ。

そして、横の文字数が70文字と決まっている（高さは無限）。これを活用し、70（横）×20（縦）＝1400ピクセルの画像を用意。pingを1400発打つとアスキーアートが描かれるというわけだ。

描く画像

さくらインターネットのVPS（仮想専用サーバ）にLinuxサーバを立て、そこにICMPのecho requestを送ると、ICMPのecho replyが返ってくるという仕組み。それとは別に、unreachableを返す実装もしている。

Pythonスクリプトでは、画像を読み取り、ICMPのシーケンス番号をみてピクセル位置を特定。「白い部分はICMPのecho reply」「黒いところはICMPのunreachable」を返すよう指示し、その結果をもとにCisco ルーターに結果を返しているという。中身のPythonスクリプトは、IPv4とIPv6の両方のプロトコルを用意。それぞれ50行程度の簡単なスクリプトを書いている。

他にも、OpenCVで画像の二値化（白と黒に変換する処理）をしたり、NetfilterQueueを使ってICMPパケットを受信したり、ScapyでICMPパケットの解析・生成するなどのこだわりも。

中身のPythonスクリプト

開発したのは、ネットワークエンジニアの岩田浩真（＠kooshin）さん。Cisco ルーターを持っている人であれば、pingを打つだけで誰でもほっこりできる。ちなみに、IPv4とIPv6で結果が違うのでお試しを。

「日々のメンテナンスや障害で疲れたネットワークオペレーターの皆さまが、今日も元気に過ごせますように」（岩田さん）

（太田智美）