C# 提供了哪些帮助程序类来监视操作系统上的所有 TCP 连接。一段示例代码也将不胜感激。
注意:最初的意图是在 Windows 上监控这一点,但在其他使用 .Net Core 的操作系统上做同样的事情会很好。
假设您想监视机器上的 TCP 套接字,您可以使用 System.Net.NetworkInformation.GetActiveTcpConnections ,它应该为您提供 TCP 连接列表和每个连接的当前状态。您可以调用常规计时器来获取套接字的更新状态。
我对 Win32 API 比较熟悉,例如 GetTcpTable 和文档较少的 GetTcpTableEx,后者还提供了拥有本地端点的进程的进程 ID。因此,以上内容可能无法完全给出我认为的内容:)
当然,如果您需要在创建 tcp 套接字之前或之后立即通知您,或者它的状态发生变化,那么不幸的是,这将需要一个无法用 .NET 编写的内核模式驱动程序。
如果你真的需要一个基于事件的机制,windows 的事件跟踪是最好的选择。既然你说这只是一个偏好:) 你最好使用 windows api (c/c++) 编写这个。
http://msdn.microsoft.com/en-us/library/aa964766(v=vs.85).aspx
从 .NET 3.5 开始,部分事件跟踪可通过 .NET 使用 System.Diagnostics.Eventing 命名空间进行访问。我知道这在 .NET 4.0 中得到了改进。我自己没有研究过这个,所以我不知道是否可以进行 TCP 连接检测。
我确信你可以用 windows api 和 ETW 做你想做的事。