goo blog サービス終了のお知らせ 

No orz No Life

よろしくお願いします。

ErlangとRAW Socket

2010年11月23日 17時01分26秒 | 日記
不定期にTCP接続が失敗するという事案が発生しました。パケットを観察してこれが原因かなと思えるものを発見、仮説に基いて人為的に作成したパケットを送ってみることにしました。パケットいじりならErlangだろうと思い調べてみたのですが、(私にとって)意外なことに、ErlangでRAWソケットを使うのは簡単ではないようです。

Erlang Questions - packet sniffingにある通り、Erlangでは何らかの外部パッケージの力を借りないとRAWソケットは使えないようです。ここで挙げられているものや、発見したものをまとめておきます。結局冒頭のテストもCで書いてしまったので(C#で書いて期待通りに動かず、Cで書いたらすぐ動いた)、今回は一行もErlangのコードを書いてません。

[ List || List <- "Incomprehension" ].では、procketというライブラリを使ってRAWソケットを扱っています。同ライブラリを用いてSYN Flood等の攻撃を行うサンプルが示されています。

他にもPCAPを利用する方法が挙げられています。EDTKには、PCAPのバインディングも含まれています。(EDTKはFAQにもある通り、SWIGみたいに定義ファイルからグルーコードとErlangのインターフェースを作ってくれるツールキットだそうです。論文(PDF)も読んでみる予定)。移植性という点ではこちらのほうがいいのかもしれません。PCAPは様々な用途に使えて便利だし、他の言語で慣れていればすぐに使えるようになると期待できます。(先程のblogではepcapというライブラリを使ってpcapを利用している記事があります)

冒頭でパケットいじりならErlangだろうと書きましたが、この装備ではルータもどきを作りましょうといったことをErlangでやるのは思ったほど手軽ではないなあという印象です。