如何拦截应用程序发送的数据包并检查它们的头部和内容?

18

我想知道如何拦截某个应用程序发送的数据包,并检查这些数据包所包含的内容。

因为我从未做过这样的事情,所以需要一些建议,我想自己学习。


1
使用类似 Pcap.net 的工具。 - Nasreddine
1
顺便问一下,你指的 PACKETS 是指 HTML、TCP 还是其他什么? - Harsh Baid
1
@HarshBaid 没有所谓的Html数据包,也许是HTTP。 - Nasreddine
@Nacereddine,我不知道你叫它什么,但使用Fiddler检查HTTP流量比使用任何捕获工具更加有用,因为后者在开始时可能会很复杂。 :D - Harsh Baid
Http数据包,例如游戏启动器。我想学习如何在C#中实现它,而不是使用其他程序。谢谢。 - Jax
3个回答

22

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

Fiddler是一个Web调试代理,它记录您的计算机和互联网之间的所有HTTP(S)流量。Fiddler允许您检查流量、设置断点,并“玩弄”传入或传出数据。Fiddler包括一个强大的基于事件的脚本子系统,并且可以使用任何.NET语言进行扩展。最近Fiddler被Telerik接管了。但是据我所知,它仍然是免费的。


感谢Pcap或Sharppcap能够帮助我。谢谢。 - Jax
您还可以从这里http://www.telerik.com/fiddler/fiddlercore使用FiddlerCore。 - Vinod Srivastav

5
一些创建c# sniffer socket的示例:
    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);

9
这段代码来自于 - http://www.codeproject.com/Articles/17031/A-Network-Sniffer-in-C - user1803300

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接