|
分類:[C#]
2013/03/09(Sat) 19:30:24 編集(投稿者) 2013/03/09(Sat) 19:29:51 編集(投稿者) 2013/03/09(Sat) 19:29:42 編集(投稿者)
<pre><pre>こんばんは。Zenと申します。
C#とTCP/IPの勉強をかねて、 Socketを使用してパケットキャプチャを作ろうとしております。
【ソースコードここから】 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Socket socket = new Socket( AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP );
socket.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true );
socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.2"), 0)); socket.IOControl(IOControlCode.ReceiveAll, new byte[] { 1, 0, 0, 0 }, new byte[] { 0 });
byte[] buffer = new byte[socket.ReceiveBufferSize];
while (true) { // パケット受信 socket.Receive(buffer); int Protocol = buffer[9];
IPAddress SourceAddress = new IPAddress(BitConverter.ToUInt32(buffer, 12)); IPAddress DestinationAddress = new IPAddress(BitConverter.ToUInt32(buffer, 16));
Console.Write("Protocol: {0}", Protocol); Console.WriteLine();
Console.Write("Send {0} -> {1}", SourceAddress, DestinationAddress); Console.WriteLine(); } } } }
【ソースコードここまで】
試しに動かしてみますと、何かしらキャプチャできているところまでは確認できますが、 私の環境ですと、SourceAddressには必ず、「192.168.1.2」が記載されており、 送信パケットのみキャプチャできているようにみえます。
いろいろググった結果、Windows7では、強化されたファイアウォールにより、受信パケットが拾えないようになっているとのことで、 @ConsoleApplication1.exe を例外設定に登録し、パケットの受信を可能にした(はず!) AVisualStudio本体も例外設定に登録し、パケットの受信を可能にした(はず!)
なのですが、改善される様子もなく、困り果てております。 何か例外設定のやり方がマズかったのかと困惑しておりますが、皆様の知恵を拝借したい所存です。
ちなみに、Windows Network Monitorでパケットキャプチャを行った際には、送受信共にキャプチャできております。
参考にしたURLは以下の通りです。 ttp://kazuhirokazu.hateblo.jp/entry/20111223/1324574391 ttp://kzpro.iga-log.com/c-/-c--%20system.net.sockets.socket%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%83%A2%E3%83%8B%E3%82%BF%20-3-
ttp://wiz.came.ac/blog/2011/06/netwindows7.html
環境を書き忘れたので追記 OS:Windows7 HomePremium VS:VisualStudio2012 Express for Desktop(管理者モードで実行) ネットワーク:有線ルータを経由(Corega CG-BARFX3)
不足の情報があればお申し付けくださいませ。</pre></pre>
|