Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# 使用winPcap代替套接字的相关风险_C#_C++_Tcp_Winpcap_Osi - Fatal编程技术网

C# 使用winPcap代替套接字的相关风险

C# 使用winPcap代替套接字的相关风险,c#,c++,tcp,winpcap,osi,C#,C++,Tcp,Winpcap,Osi,到目前为止,winPcap允许您绕过操作系统,绕过TCP的应用程序和传输层处理,并提供对链路层的直接访问 我计划使用winpcap做一些用户应用程序的事情,而不仅仅是嗅探。我将使用pcap接收和发送关键信息,我目前正在通过套接字执行此操作 根据我的理解,绕过操作系统以及我这边的应用程序和传输层是否涉及任何风险 作为一个附带问题,到目前为止我发现的winpcap文档讨论了如何通过编程实现它,但没有详细说明它绕过了什么以及它是如何做到的。任何链接都会有帮助 此外,我还想知道是否有人出于监视原因和ms

到目前为止,winPcap允许您绕过操作系统,绕过TCP的应用程序和传输层处理,并提供对链路层的直接访问

我计划使用winpcap做一些用户应用程序的事情,而不仅仅是嗅探。我将使用pcap接收和发送关键信息,我目前正在通过套接字执行此操作

根据我的理解,绕过操作系统以及我这边的应用程序和传输层是否涉及任何风险

作为一个附带问题,到目前为止我发现的winpcap文档讨论了如何通过编程实现它,但没有详细说明它绕过了什么以及它是如何做到的。任何链接都会有帮助


此外,我还想知道是否有人出于监视原因和msn的目的而将winpcap用于网络嗅探之外的任何目的。

当然,存在很多风险:

  • 操作系统不会知道您的私人管理的TCP连接,因此它不会知道您选择的端口正在使用中。这意味着它可能尝试将同一端口用于另一个应用程序的连接,从而导致混乱
  • 操作系统不会知道您的私人管理的TCP连接,因此,除非您阻止它查看这些数据包,否则它将发送RST数据包来重置明显虚假的连接
  • 相关操作系统管理的数据、配置的IP地址和路由表的更改不会自动通知您的应用程序。您可能需要轮询更新
  • 正确地实现TCP协议是非常重要的。大多数实现,即使是使用非常好的实现,都有多年未发现的休眠bug。并非所有必要的信息都在RFC中;有些地方的既定做法与记录的行为有所不同,通常是有充分理由的。现代TCP堆栈中也有大量代码专门用于处理其他堆栈中的历史错误行为,复制所有这些工作并不简单
  • 与安装在主机上的第三方网络安全软件进行不良交互的风险很大,这将要求所有TCP连接都通过操作系统进行

对我来说,这似乎是一场支持噩梦。

感谢您的详细回复。关于第3点,当机器运行时,生产环境中的ip地址和路由表通常不会动态变化。或者他们可以?就应用程序而言,它只知道它发送的字节数组中包含的目标ip和端口。关于第4点,我不打算自己做tcp实现。我将使用winCap API设置字段并发送字节数组,同样地,将winCap用于传入字节流并对其进行解码。您认为wincap API可能存在严重风险?@bsobaid:当机器运行时,可用的本地IP地址可能会发生变化,因为接口会上下波动,DHCP租约会被释放和续订。如果使用动态路由协议(如RIP),则路由表可能非常流畅。我不相信WinPCAP完全实现了TCP——您将不得不自己处理诸如初始序列号选择、重传、慢启动、拥塞控制、窗口更新、窗口缩放、PMTU发现等事情。因此,最合适的用法是数据包嗅探。WinPcap不太适合应用程序数据传输。我想知道为什么它周围有c-sharp包装器,除了数据嗅探之外,还允许发送数据。@bsobaid:它对某些事情很有用,但对实现TCP连接却不是很有用。例如,您可以实现一个操作系统不支持的协议。我真的很想知道这样做的目的是什么