【问题标题】:C# How would I intercept all packets and find out the IPs through hooking?C#如何拦截所有数据包并通过挂钩找出IP?
【发布时间】:2015-10-15 05:41:23
【问题描述】:

其实我有三个问题:

1- 根据Nazar Grynko 的回答,是不是只截取三个函数(send、recv 和 connect)才能帮助我预测我机器中的所有数据包?

2- 如果我连接了这三个函数,如何从 P/Invoked 本机函数中获取一个指向 sockaddr 结构的 IntPtr?

3- send 和 recv 没有 sockaddr,那么如何找出地址呢?

提前谢谢你。

【问题讨论】:

  • 监控机器上的所有流量比从用户模式代码中挂钩三个函数更难。这将需要在内核模式下完成。意思是司机。不适用于 C#。
  • @DavidHeffernan ,C# 中的 Easyhook 和 deviare 怎么样。另一件事,转向捕获数据包工具(如 SharpPcap)是否更好。或坚持使用钩子。
  • 我以为你说你想检测机器上的所有数据包。您不会通过在用户上下文中运行的桌面应用程序来执行此操作。
  • @DavidHeffernan 我是这些东西的新手,所以你能解释一下,我该怎么办。我的目标是监控我机器中所有进程的网络流量(传出或传入)。我从 Pcap(sharppcap) 开始,但它在不知道接收或发送它的进程的情况下捕获数据包,我试图从标头中检索端口号并执行 netstate 但仍然不是所有数据包都可以关联到一个进程。所以,我转向了挂钩,通过挂钩所有导致网络数据包的系统调用,我认为它可以实现我的目标。

标签: c# hook pinvoke ip-address intptr


【解决方案1】:
  1. 您描述的函数是POSIX 标准的一部分。这意味着当您在 Windows 上使用这些函数时,您实际上是在调用一个最终转换为 system call 的包装器。您可以在不使用此功能的情况下发送数据包(例如,使用 Windows API)。

  2. 请参阅第一个答案。这对你没有帮助。您还必须为所有进程提供一个挂钩。

  3. 您描述的函数使用file descriptor,它是POSIX 构造,并且是在其他系统上模拟的用户模式。

要检查您的交通情况,您必须使用可以为您检查的司机。您可能想查看Pcap.Net,这是一个针对您的问题的 C# 项目,并提供了必要的驱动程序和 API。

【讨论】:

  • 我知道 pcap 和其他驱动程序,如 Sharppcap 等,但我的目标是了解接收或发送捕获数据包的过程,这对我来说很困难。我试图从 headers(tcp&udp) 中检索端口号并执行 netstate,但仍然不是所有数据包都可以与进程相关联,只有 tcp&udp。
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
相关资源
最近更新 更多