libpcap

暇つぶしに*1 tcpdump のソースを追っていて初めて pcap なるものの存在を知った。man 曰く "Packet Captuer Library" というものらしい。

調べてみて分かった事。pcap の初期化処理を済ませた後に pcap_loop を呼び出すとパケットが到着するたびにこちらが指定した pcap_handler にパケットをまわしてくれる。つまり、イベント駆動型・パケットキャプチャフレームワークのようなものだ(と思う)。しかも、そのパケットの選別条件にあたるフィルタも tcpdump の引数のように指定できるようだ。

もちろプロミスキャスモードを使用できるようで、まさに tcpdump の大部分を占めているようだ。

# 実は、今ちょっとしたお遊びプログラムを作ろうと思っていまして…。結構面白くなると思うんですよまぁ、私のアイディアではなく、昔どこかの大学が作ったらしいプログラムを復刻させようと思っているだけなのだけど…。

【追記】 MacOSX で試したところ Undefined symbols になってしまいますので、コンパイル時に gcc -lpcap source.c というように pcap をリンクしないと駄目なようです。ちなみに同じ MacOSX で同じ現象になり、改善できずにいるかわいそうな人もいました(http://www.tcpdump.org/lists/workers/2002/05/msg00003.html)。


参考:
hacking with unix -> Programming libpcap
凄い分かりやすいです。ここだけみれば pcap についてかなり分かります。

*1:本当は暇じゃないのに(苦笑