私は今ネットワークについて勉強しています。
そして、下のURLのソースコードを使わせてもらったのですが、
http://keicode.com/windows/winsock-packet-capture.php
// 生ソケットの作成
SOCKET hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
で必ずINVALID_SOCKETが帰ってきてしまいます。
生ソケットの作成に失敗する原因はどんなことがあるのでしょうか?
(どこかのページでroot権限じゃないとできないと書いてあったのでAdministratorでログインしてやってみたのですができませんでした。)
RAWソケットの作成に失敗する原因
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: RAWソケットの作成に失敗する原因
WSAStartup()の戻り値もチェックされたほうが良いのとWSAGetLastError()でエラー番号を表示してみて下さい。
「Windows Sockets Error Codes」
http://msdn.microsoft.com/en-us/library ... s.85).aspx
【追記】
こちらも参考に。
http://www.geekpage.jp/programming/wins ... tartup.php
「Windows Sockets Error Codes」
http://msdn.microsoft.com/en-us/library ... s.85).aspx
【追記】
こちらも参考に。
http://www.geekpage.jp/programming/wins ... tartup.php
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
tlnlniri
Re: RAWソケットの作成に失敗する原因
とりあえず戻り値を調べてみたので書いておきます。
WSAStartupは0を返してきました。
WSAGetLastErrorは10013を返してきました。
WSAStartupは0を返してきました。
WSAGetLastErrorは10013を返してきました。
-
tlnlniri
Re: RAWソケットの作成に失敗する原因
10013のエラーについて調べてみたのですが、
http://yasuharu.net/admin/diary/?id=1138
の内容は関係ないのでしょうか?
私のPCもWindows Vistaです。
http://yasuharu.net/admin/diary/?id=1138
の内容は関係ないのでしょうか?
私のPCもWindows Vistaです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: RAWソケットの作成に失敗する原因
権限エラーですね。
調べてみましたがVista以降はSOCK_RAWが使えないようです。
代用手段がWindows WFPだそうですが私も詳しくないので申し訳ないのですがお答えできません。。
「Rawソケット on Vista - Decremented Blog」
http://blog.goo.ne.jp/yuh_goo/e/9cc65a1 ... afb4d8a6ba
と言うことでWinPcapの利用も検討されてはどうでしょうか?
調べてみましたがVista以降はSOCK_RAWが使えないようです。
代用手段がWindows WFPだそうですが私も詳しくないので申し訳ないのですがお答えできません。。
「Rawソケット on Vista - Decremented Blog」
http://blog.goo.ne.jp/yuh_goo/e/9cc65a1 ... afb4d8a6ba
と言うことでWinPcapの利用も検討されてはどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
tlnlniri
Re: RAWソケットの作成に失敗する原因
うまく動作させることができたのでとりあえずやり方を書いておきます。
プロパティ→互換性で、
互換モードをWindowsXP(SP2)にして、
管理者としてこのプログラムを実行するにチェックを入れると動作しました。
プロパティ→互換性で、
互換モードをWindowsXP(SP2)にして、
管理者としてこのプログラムを実行するにチェックを入れると動作しました。