C# 如何让Windows服务打开端口?
我想用C#获取窗口服务及其端口的列表。我可以使用C# 如何让Windows服务打开端口?,c#,windows-services,port,C#,Windows Services,Port,我想用C#获取窗口服务及其端口的列表。我可以使用ServiceController获取所有窗口服务,但无法获取这些服务的端口。请检查。它与您要求的并不完全相同,但它指向一个名为的有用函数,该函数可以执行您需要的操作。另外,请检查。类似问题的答案总是建议使用Iphlpapi,但还不清楚如何在这个netstat-ban复制粘贴中获得RpcSs(服务名称): TCP 0.0.0.0:135 0.0.0.0.0:0侦听 RpcSs [svchost.exe] 或此处的时间表: TCP[::]:49154
ServiceController
获取所有窗口服务,但无法获取这些服务的端口。请检查。它与您要求的并不完全相同,但它指向一个名为的有用函数,该函数可以执行您需要的操作。另外,请检查。类似问题的答案总是建议使用Iphlpapi,但还不清楚如何在这个netstat-ban复制粘贴中获得RpcSs(服务名称):
TCP 0.0.0.0:135 0.0.0.0.0:0侦听
RpcSs
[svchost.exe]
或此处的时间表:
TCP[::]:49154[::]:0正在侦听
日程
[svchost.exe]
我一直在寻找解决办法,但没有找到任何办法。Netstat调用了iphlapi中一些未记录的函数,但不清楚它是从iphlapi获取服务名称,还是以某种方式使用iphlapi中的pid并使用其他内容来获取服务名称。我真的不想花时间用调试器来回答这个问题,因为..:
然而,在理想情况下,人们无论如何都不希望使用C#的轮询方式。使用ETW更合适。我认为缺乏从C#开始使用它的示例是因为开始使用它会有一些开销,并且周围的示例可能特定于其他类型的跟踪/监视场景
小结:如果您没有足够的时间来实现这一点,那么保存netstat输出似乎就是“解决方案”。理想情况下,我希望找到一个简单易用的C#示例来监视任何网络连接,并找出哪些服务或进程处理/启动了这些连接以及可能的防火墙更改。我相信ETW可以做到这两个方面,但就我目前的需求而言,很难证明需要多少时间才能使其正常工作。我至少已经知道“logman查询提供者”列出了提供者,然后您需要做一些事情来启用提供者(在某些情况下还需要驱动程序支持跟踪,比如数据包捕获)。有一个使用ETW的C#项目。但现在还不清楚用ETW复制netstat输出需要付出多大的努力。在仔细查看之后,我发现MIB\u TCPROW\u OWNER\u模块结构中存在未记录的“OwningModuleInfo” 然后我发现了以下评论: “我得出结论,数组中的第一项是正在运行的服务列表中服务的索引,…” 因此,这个问题的答案将是使用它来获取netstat-b显示的名称信息(服务名称和地址+端口),过滤您想要的服务。我找到了这个库,除了这个特性之外,它已经设置了很多相关的代码 其他有用的链接: