naoki86star

このインターネットの片隅で、バルスと唱えてみる

scapyのこと

(わき道な話し)ガーンなことで、python2.7のeolがアナウンスされていたとのこと。
というわけで新しく書き出すときはpytohn3で書くようにしてます。



PINGTTL*1のデータを収集するにはどうしようと考えてみてます。*2。それで思い出したのがscapyです。すぐには名前が思い出せなくて、こんな名前だったかなぁと。簡単に説明してみると、IPパケットの組み立てと送受信をより直感的なコードで実現してくれるpythonモジュール、だととらえています。

pingパケットを組み立てて1回のsend/receiveをするときはこんな感じです。レイヤ(IP,ICMP/TCP/UDP,...)ごとにオブジェクト組み立ててそれを積み重ねるような書き方です。演算子/を使うようになっているのが面白いです。

from scapy.all import *
pkt = IP(dst=target)/ICMP()
res = sr1(pkt, verbose=0)
print(res.ttl)

ドキュメントは関数個別にはあまりフォーカスあたってないので引数詳細とかはコードとhelp()とあわせてみるのがいいようです。知りたいことをどう引くか自分には慣れが必要です。

import scapy.all as A
help(A)
help(A.IP)
help(A.IPv6)

すべてpython記述なモジュールなので応答時間記録とか大量パケット解析とか向かないかもです。でも、改めて目次をみてるとグラフィカルな出力機能とかもあるように見えてscapyなかなか楽しそうです。

*1:v6だとhop limitにあたるらしい

*2:何がいいの?とかはない