Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#我如何拦截所有数据包并通过挂钩找到IP?_C#_Hook_Pinvoke_Ip Address_Intptr - Fatal编程技术网

C#我如何拦截所有数据包并通过挂钩找到IP?

C#我如何拦截所有数据包并通过挂钩找到IP?,c#,hook,pinvoke,ip-address,intptr,C#,Hook,Pinvoke,Ip Address,Intptr,其实我有三个问题: 1-根据答案,是否只有拦截三个功能(发送、接收和连接)才能帮助我预测机器中的所有数据包 2-如果我钩住了这三个函数,如何从p/调用的本机函数中获取指向sockaddr结构的IntPtr 3-Send和recv没有sockaddr,那么如何确定地址呢 先谢谢你 您描述的功能是POSIX标准的一部分。这意味着,当您在Windows上使用这些函数时,实际上您正在调用一个包装器,该包装器最终将转换为一个。您可以不使用此函数(例如,通过使用Windows API)发送数据包 见答案一。

其实我有三个问题:

1-根据答案,是否只有拦截三个功能(发送、接收和连接)才能帮助我预测机器中的所有数据包

2-如果我钩住了这三个函数,如何从p/调用的本机函数中获取指向sockaddr结构的IntPtr

3-Send和recv没有sockaddr,那么如何确定地址呢

先谢谢你

  • 您描述的功能是POSIX标准的一部分。这意味着,当您在Windows上使用这些函数时,实际上您正在调用一个包装器,该包装器最终将转换为一个。您可以不使用此函数(例如,通过使用Windows API)发送数据包

  • 见答案一。这对你没有帮助。您还必须为所有进程提供一个钩子

  • 您描述的函数使用的是一种POSIX结构,并且是在其他系统上模拟的用户模式


  • 为了检查你的交通状况,你必须让一个司机帮你检查。您可能想看看哪个是针对您的问题的C#项目,并提供必要的驱动程序和API。

    监控机器上的所有流量比从用户模式代码中挂接三个函数更难。这需要在内核模式下完成。那意味着一个司机。不是为C#准备的。@DavidHeffernan,那么Easyhook和deviare是为C#准备的呢。另一件事,转移到像SharpPcap这样的包捕获工具是不是更好。或者继续用钩子。我记得你说过要检测机器上的所有数据包。你不能从运行在用户上下文中的桌面应用程序中执行此操作。@DavidHeffernan我对这些东西不熟悉,请你详细解释一下,我该怎么做。我的目标是监视机器中所有进程(传出或传入)的网络流量。我从Pcap(sharppcap)开始,但它捕获数据包时不知道接收或发送数据包的进程,我尝试从报头中检索端口并执行netstate,但仍然无法将所有数据包与进程关联。因此,我转向了挂接,通过挂接产生网络数据包的所有系统调用,我认为可以实现我的目标。我知道pcap和其他驱动程序,如sharppcap等。但我的目标是了解接收或发送捕获数据包的过程,这对我来说很困难。我试图从报头(tcp和udp)中检索端口#,并执行netstate,但仍然无法将所有数据包与进程关联,只有tcp和udp。