[Python] Twisted用rawソケットライブラリ twistedraw 0.1公開

これはなんですか?

Twistedでrawソケットを扱うライブラリです。このライブラリを使うことで、Twistedでpingができるようになります。

Twistedには、TwistedPair (http://twistedmatrix.com/trac/wiki/TwistedPair) というrawソケットのライブラリがありますが、メンテナンスされていないようなので、作成しました。

環境

以下の環境で、動作を確認しています。

種別 バージョン
OS Ubuntu Linux 6.10
Python 2.4.4c1
Twisted 2.4.0-2

ダウンロード

以下のURLからダウンロードできます。

サンプルプログラム

twistedraw-0.1.tar.gzには、このライブラリを使用するサンプルのプログラムsample/twistedping.pyが含まれています。このプログラムは、以下のようにして使用します。twistedraw-0.1.tar.gzを展開してできたディレクトリが、カレントディレクトリであるとします。

$ sudo python sample/twistedping.py [OPTIONS] [ADDRESS] 

OPTIONSには、以下を指定することができます。

短い形式 長い形式 デフォルト値 説明
-c --trycount 3 ひとつのアドレスに対し、最大何回pingをするか指定します。
-p --parallelcount 10 同時にいくつのホストに対してpingをするか指定します。
-t --timeout 1000 タイムアウト時間を、msecで指定します。

ADDRESSにはIPアドレスを指定します。192.168.0.1という形式のほか、192.168.0.1-192.168.0.254というように、IPアドレスの範囲を"-"で区切って指定することもできます。

rawソケットを使用するので、root権限が必要です。

例えば、192.168.0.1から192.168.0.8の範囲に対して、ひとつのアドレスに対して最大10回、同時に4つのホストに対してpingし、タイムアウト時間を10秒とすると、以下のようにします。

$ sudo python sample/twistedping.py -c 10 -p 4 -t 10000 192.168.0.1-192.168.0.8

結果は、以下のように出力されます。

192.168.0.1: status=active, time=326.928[msec], count=1
192.168.0.2: status=inactive, count=10
192.168.0.3: status=inactive, count=10
192.168.0.4: status=inactive, count=10
192.168.0.5: status=inactive, count=10
192.168.0.6: status=inactive, count=10
192.168.0.7: status=inactive, count=10
192.168.0.8: status=inactive, count=10

IPアドレスのあとに、ping応答の結果(status. 応答があればactive, なければinactive)と、(応答があれば)応答時間 (time), pingした回数 (count) が表示されます。

ライブラリの使い方

pingするときは、このライブラリを以下のようにして使用します。

from twisted.internet import reactor

def stop(reason):
    reactor.stop()

from twistedraw.icmp.echo import ping
d = ping("192.168.0.1")
d.addBoth(stop)

reactor.run()

twistedraw.icmp.echo.ping関数が、pingを実行する関数です。この関数には、対象となるIPアドレスを与えます。ping関数の戻り値は、twisted.internet.defer.Deferredオブジェクトです。他のTwistedプログラムと同様に、このオブジェクトにコールバックとエラーバックを登録します。pingの応答が得られればコールバックされ、得られなければエラーバックされます。

インストール

このライブラリをインストールするときは、以下のようにします。

$ sudo python setup.py install

ただし、サンプルのプログラムはインストールされません。

今後の予定

時間があれば、以下のことをやってみたいと思っています。

  • traceroute
  • より低レベルなプロトコル(ARPとか)