ページ 11

RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 12:08
by tlnlniri
私は今ネットワークについて勉強しています。
そして、下のURLのソースコードを使わせてもらったのですが、
http://keicode.com/windows/winsock-packet-capture.php

// 生ソケットの作成
SOCKET hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
で必ずINVALID_SOCKETが帰ってきてしまいます。

生ソケットの作成に失敗する原因はどんなことがあるのでしょうか?
(どこかのページでroot権限じゃないとできないと書いてあったのでAdministratorでログインしてやってみたのですができませんでした。)

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 13:20
by softya(ソフト屋)
WSAStartup()の戻り値もチェックされたほうが良いのとWSAGetLastError()でエラー番号を表示してみて下さい。

「Windows Sockets Error Codes」
http://msdn.microsoft.com/en-us/library ... s.85).aspx

【追記】
こちらも参考に。
http://www.geekpage.jp/programming/wins ... tartup.php

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 13:40
by tlnlniri
とりあえず戻り値を調べてみたので書いておきます。
WSAStartupは0を返してきました。
WSAGetLastErrorは10013を返してきました。

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 13:52
by tlnlniri
10013のエラーについて調べてみたのですが、
http://yasuharu.net/admin/diary/?id=1138
の内容は関係ないのでしょうか?
私のPCもWindows Vistaです。

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 14:19
by softya(ソフト屋)
権限エラーですね。
調べてみましたがVista以降はSOCK_RAWが使えないようです。
代用手段がWindows WFPだそうですが私も詳しくないので申し訳ないのですがお答えできません。。

「Rawソケット on Vista - Decremented Blog」
http://blog.goo.ne.jp/yuh_goo/e/9cc65a1 ... afb4d8a6ba

と言うことでWinPcapの利用も検討されてはどうでしょうか?

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 14:23
by tlnlniri
ありがとうございます。
原因がわかってスッキリしました。
これからWinPcapでがんばってみたいと思います。

Re: RAWソケットの作成に失敗する原因

Posted: 2012年6月27日(水) 14:58
by tlnlniri
うまく動作させることができたのでとりあえずやり方を書いておきます。
プロパティ→互換性で、
互換モードをWindowsXP(SP2)にして、
管理者としてこのプログラムを実行するにチェックを入れると動作しました。