C#中的网络嗅探器

F.B*_*Bek 5 c# sockets udp tcp packet-sniffers


最近,我为我目前合作的公司完成了我的网络嗅探器。

我想知道:

  • 有没有办法在到达目的地之前编辑捕获的数据包?(UDP/TCP)
  • 有没有其他程序来捕获数据包?

这是我的代码模板/程序:

1.首先,在加载时我得到了计算机上的所有设备/主机名。

IPHostEntry HostEntry = Dns.GetHostEntry((Dns.GetHostName()));
Run Code Online (Sandbox Code Playgroud)

2.嗅探套接字以捕获数据包必须是原始套接字,地址族为internetwork 类型,协议为IP。

mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
Run Code Online (Sandbox Code Playgroud)

3.将套接字绑定到选定的 IP 地址。

mainSocket.Bind(new IPEndPoint(IPAddress.Parse(TEXT-OF-YOUR-HOST-ENTRY), 0));
Run Code Online (Sandbox Code Playgroud)

4.设置套接字选项。

5. 将传出数据包捕获到 byte[] 数组。

mainSocket.IOControl(IOControlCode.ReceiveAll, YOUR-TRUE-BYTES, YOUR-OUTGOING-BYTES);
Run Code Online (Sandbox Code Playgroud)

6.开始异步接收数据包。

mainSocket.BeginReceive(BYTE-DATA, 0, BYTE-DATA-LENGTH, SocketFlags.None, new AsyncCallback(YOUR-RECEIVE-FUNCTION), null);
Run Code Online (Sandbox Code Playgroud)

7.分析/解析收到的字节。并且不要忘记调用另一个到 BeginReceive 以便我们继续接收传入的数据包。

8.最后进行解析,您可以创建自己的类或使用已经发明的类/dll 来研究捕获的包。


这就是我的全部。

  • 我希望这对尝试在 C# 中启动一些网络嗅探器的人有所帮助。
  • 我希望有人向我展示更好的方法来做到这一点。
  • 是否还有机会在我捕获的包裹到达目的地之前对其进行编辑?

感谢您的时间。