[Python] Twisted用rawソケットライブラリ twistedraw 0.1公開
これはなんですか?
Twistedでrawソケットを扱うライブラリです。このライブラリを使うことで、Twistedでpingができるようになります。
Twistedには、TwistedPair (http://twistedmatrix.com/trac/wiki/TwistedPair) というrawソケットのライブラリがありますが、メンテナンスされていないようなので、作成しました。
サンプルプログラム
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の応答が得られればコールバックされ、得られなければエラーバックされます。
今後の予定
時間があれば、以下のことをやってみたいと思っています。
- traceroute
- より低レベルなプロトコル(ARPとか)