パケットキャプチャでパケット内容を確認してみると、IPヘッダのプロトコルタイプが0x01→0xFFに勝手に書き換わってる?!どういうこと?
と思って色々知らべてみると、setsockoptでIPPROTO_IPにIP_HDRINCLを指定するようにしないといけないとのこと。IP_HDRINCLはIPヘッダをユーザアプリで作成するので手を出さないでということらしい。
なるほどなるほどと思って、改めて送信しようとすると今度はsendtoがエラー(エラー番号は10004)・・・どういうこと?
と思って調べていると、WindowsXP SP2では、RAWソケットに対してセキュリティ的な問題から制限を加えているとのこと・・・そういえばNMapがSP2をあてると動かなくなるということを聞いたことがあった・・・
ということで、一応IP_HDRINCLの設定を入れたものを、この後リリースしますが、WindowsXPではIPPROTO_RAWは制限を受けますので、ご注意を。
回避するには、WinSock2を使用せずに別のパケットキャプチャライブラリを使うしかないようですね(要はNMapと同じ対応するしかない)。
う〜ん。中途半端な感じになってしまった。ちょっと悔しい
