如何拦截应用程序发送的数据包并检查其标头和内容



我想知道如何拦截某个应用程序发送的数据包,然后检查这些数据包包含什么。我需要一些建议,因为我从来没有做过这样的事情,我想自学。

Pcap.Net

Pcap.Net是用C++/CLI和C#编写的WinPcap的.Net包装器。它具有几乎所有WinPcap功能,并包括一个数据包解释框架。

SharpPcap

SharpPcap是一个适用于.NET环境的跨平台数据包捕获框架,基于著名的pcap/WinPcap库。它提供了一个API,用于使用任何.NET语言(如C#和VB.NET.)捕获、注入、分析和构建数据包

Pcap.Net与SharpPcap的比较

Wireshark

它用于网络故障排除、分析、软件和通信协议开发以及教育。我认为它是迄今为止我使用的最通用的数据包嗅探器。

小提琴手

Fiddler是一个Web调试代理,它记录计算机和Internet之间的所有HTTP(S)流量。Fiddler允许您检查流量、设置断点和";小提琴;具有传入或传出数据。Fiddler包括一个强大的基于事件的脚本子系统,可以使用任何.NET语言进行扩展。最近Fiddler被Telerik超越了。但它仍然是免费的AFAIK。

创建c#嗅探器套接字的一些示例

    mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw,
                           ProtocolType.IP);
    // Bind the socket to the selected IP address
    mainSocket.Bind(newIPEndPoint(IPAddress.Parse(cmbInterfaces.Text),0));
    // Set the socket options
    mainSocket.SetSocketOption(SocketOptionLevel.IP,  //Applies only to IP packets
                               SocketOptionName.HeaderIncluded, //Set the include header
                               true);                           //option to true
    byte[] byTrue = newbyte[4]{1, 0, 0, 0};
    byte[] byOut = newbyte[4];
    //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
    mainSocket.IOControl(IOControlCode.ReceiveAll,  //SIO_RCVALL of Winsock
                         byTrue, byOut);
    //Start receiving the packets asynchronously
    mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                            newAsyncCallback(OnReceive), null);

您可以使用Fiddler查看HTTP流量http://www.fiddler2.com/fiddler2/.

或者Wiresharkhttp://www.wireshark.org/对于更先进的东西

此处为数据包分析器摘要http://en.wikipedia.org/wiki/Packet_analyzer

关于您正在努力实现的目标的更多细节将有助于我们提供建议。

最新更新