Windows XP SP2+raw socketプログラミングの注意

MICR0$OFTさんは「わが社の製品のraw socketを利用してSYN Floodをやろうとしても無駄だよ(キリッ」と言いたいようです。
ユニコードの拡張でウンコの絵文字があったけど、使えたらここで使うべきだろうな。


"Windows XP Service Pack 2 セキュリティ強化機能搭載" での機能の変更点 ‐ 第 2 部 : ネットワーク保護技術
http://technet.microsoft.com/ja-jp/library/bb457156.aspx#EHAA

raw ソケット経由のトラフィックの制限

詳細説明

raw IP ソケットは、ごくわずかな Windows アプリケーションで使用されており、アプリケーションが TCP/IP スタックを使用するより少ない整合性およびセキュリティ チェックで TCP/IP パケットを作成するための、業界標準の手段を提供します。WindowsTCP/IP の実装では、raw IP ソケットでのトラフィックの受信は引き続きサポートされています。ただし、raw ソケット経由でのトラフィックの送信機能は、次の 2 つの方法で制限されています。

  • TCP データを raw ソケット経由で送信することはできません。
  • 無効な送信元アドレスを持つ UDP データグラムを raw ソケット経由で送信することはできません。送信 UDP データグラムの IP 送信元アドレスがネットワーク インターフェイスに存在している必要があります。そうでない場合は、データグラムが削除されます。


そんな情報初耳ですな。おかげで3日ぐらい無駄にした。
いやまぁ、調べ方が悪かったんだけども。でももっと目立つ位置においてほしいよ。
無理な気はしてたから、解決方法を調べることよりも、無理なことを裏付ける情報を探してたぐらい。


で、諦めるの?というと、そんなことは無く。
pcapで代用できるか試す。
pcap
http://ja.wikipedia.org/wiki/Pcap
パケットキャプチャを主としているが、パケットを送信する機能も付いてる。
これを使えばパケットを本当に1から生成できる。
exampleでデータリンク層(MACアドレスとか)から適当なパケットを作って、sendするところまでは確認済み。
後はMACアドレス,IP,TCPのそれぞれ層の実装をするだけ。
さらに使うNICを指定できるので、色々面白そう。
今まで作ったコードが無駄になるわけでもないしね(Linuxとかならそのまま動きそうだし)。
windowsがこのレベルまで監視しているかが問題だが、行けそうな気がする。