1

C# を使用してパケット データをスニッフィングしたい HTTP だけでなく、すべてのタイプのデータをスニッフィングする必要がある

私がそれをやろうとすると、このエラーが発生します:

System.Net.Sockets.SocketException: System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) の System.Net.Sockets.Socket でのアクセス許可によって禁止されている方法でソケットにアクセスしようとしました。バインド (エンドポイント ローカル EP)

public void StartCapture(string InterfaceIp)
{
        try
        {
                //Start capturing the packets...
                //For sniffing the socket to capture the packets has to be a raw socket, with the
                //address family being of type internetwork, and protocol being IP
                mainSocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                    System.Net.Sockets.SocketType.Raw, System.Net.Sockets.ProtocolType.IP);
                //Bind the socket to the selected IP address
                mainSocket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(InterfaceIp), 0));
                //Set the socket  options
                mainSocket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.IP,            //Applies only to IP packets
                                           System.Net.Sockets.SocketOptionName.HeaderIncluded, //Set the include the header
                                           true);                           //option to true
                byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
                byte[] byOut = new byte[4] { 1, 0, 0, 0 }; //Capture outgoing packets
                //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
                mainSocket.IOControl(System.Net.Sockets.IOControlCode.ReceiveAll,              //Equivalent to SIO_RCVALL constant
                    //of Winsock 2
                                     byTrue,
                                     byOut);

                //Start receiving the packets asynchronously
                mainSocket.BeginReceive(byteData, 0, byteData.Length, System.Net.Sockets.SocketFlags.None,
                    new AsyncCallback(OnReceive), null);
        }
        catch (Exception ex)
        {
            //Report Exception
        }
}

注:私はASP.Netを使用しています。パケットのヘッダーだけでなく、データを盗聴することが非常に重要です

偽装を使用しても問題は解決しませんでしたが、問題はソケットにアクセスするための適切な権限がないことに関連していると思います

問題の解決策を見つけました。これは、保護され、単一の IP アドレスに制限されているソケットへのバインドを制限する最近の実装に関連しています

ここにいくつかの興味深いリンクがあります

http://msdn.microsoft.com/en-us/library/cc150667(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/ms740668%28v=VS.85%29.aspx

4

2 に答える 2

1

ライブラリの使用に問題がなければ、SharpPcapは優れたライブラリであり、使い方は非常に簡単です。

于 2012-04-29T20:51:55.797 に答える