【pythonでリアルタイムパケット分析】pyshark LiveCapture()の使い方

先日投稿した記事(【PYTHONでパケットを分析できる】PYSHARKの基本的な使い方をご紹介)が、大変好評をいただいておりまして今回もpythonでパケットをキャプチャ、分析できるpysharkネタでいきたいと思います。

読者の皆様の分りみが深くなるように、平文でユーザーIDとパスワードやりとりするtelnetを例にpysharkでリアルタイムでパケット分析したいと思います。

今回の検証イメージは、以下の図の通りです。

図1 pyshark検証イメージ

ubuntu18.04 LTSにtelnetdをインストールし、クライアントはteratermでtelnet接続をします。

サーバー側で、pytharkを起動しリアルタイムでtelnetのユーザー名とパスワードを抜き取りましょうといった検証をしてみます。

pytharkのインストールは、先に説明した前回記事をご参照ください。

今回サーバー側に仕込むコードは、以下の通りです。

import pyshark

cap = pyshark.LiveCapture ('br0', bpf_filter='tcp port 23')  
for pkt in cap:
    if 'TELNET' in pkt:
        try:
            out = pkt.telnet
            if 'Username' in str(out):
                print('ユーザー名:')
            elif 'Password' in str(out):
                print('パスワード:')

            if pkt.telnet.data:
                print(out)
        except:
            pass

ここでポイントなのは、

cap = pyshark.LiveCapture ('br0', bpf_filter='tcp port 23')  

の一行で、LiveCapture()の第一引数に、インターフェイス名、第二引数にBPFフィルタの設定をしています。

上記例では、インターフェイス br0をパケットキャプチャ対象とし、tcp 23(telnet)だけをキャプチャ対象にしているといった設定となります。

これを、pyshark_telnet.pyなどとして保存し、サーバー側で実行します。

$ sudo python3 pyshark_telnet.py

これで準備はできました。

クライアント側からtelnet接続をすると….

接続した瞬間に以下のような標準出力が表示されます。

$ sudo python3 pyshark_telnet.py
Layer TELNET:
        Data: Ubuntu 18.04.5 LTS\r\n

Layer TELNET:
        Data: apu4 login:

次に、クライアント側でユーザー名を入力してみてください。

Layer TELNET:
        Data: apu4 login:

Layer TELNET:
        Data: x

Layer TELNET:
        Data: x

Layer TELNET:
        Data: x

Layer TELNET:
        Data: x

Layer TELNET:
        Data: x

Layer TELNET:
        Data: 

Layer TELNET:
        Data: x

Layer TELNET:
        Data: x

Data: に続き、入力したユーザー名の文字列が表示されていきます。

パスワードに平文で表示されます。

pysharkのLiveCapture()を使えば、リアルタイムでパケット解析が実現できるといったイメージがついたのではないでしょうか。

Let’s Enjoy Packet Capture!!

(Visited 3,443 times, 1 visits today)
The following two tabs change content below.
【好きなもの】 インフラ技術が好き。古いものが好き。 【生きてきたフィールド】 システム運用、ソフトウェア開発、ミドルウェア検証、OSSサポート、プリセールスエンジニア、プロジェクトマネジメント 【このサイトでの役割】 サイト管理者。