我想要得到的窗口服务的列表和它们在C#中的端口。 我能够用得到的所有窗口服务ServiceController
但我无法得到这些服务的端口。
Answer 1:
请检查在stackoverlow这个问题 。 它并不像你所要求完全一样,但它指向所谓有用的功能GetExtendedTcpTable可通过PInvoke的 ,可以做你的需要。 同时检查这一项 。
Answer 2:
很多环顾四周后,我发现,还有的无证“OwningModuleInfo”在MIB_TCPROW_OWNER_MODULE结构。
然后寻找,我发现此评论:
奇怪的问题瞄准64时关于GetOwnerModuleFromTcpEntry
“我已经得出结论,数组中的第一项是服务的索引中运行的服务列表,...”
所以,这个问题的答案将被用它来获取信息名netstat的那个节目-b(服务名称和地址+端口),过滤为您所需的服务。 我发现这个https://github.com/Loriowar/IpHlpApidotnet LIB其中有一系列相关的代码已经成立,除了这个功能。
其他有用的链接:
编组结构与结构成员的数组
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366911(v=vs.85).aspx
Answer 3:
类似的问题的答案总是建议使用IPHLPAPI但它不是在这个netstat的-ban复制粘贴都清楚你将如何得到RPCSS(服务名称):TCP 0.0.0.0:135 0.0.0.0:0 LISTENING RPCSS [SVCHOST。可执行程序]
或计划在这里:
TCP [::]:49154 [:]:0收听计划[中svchost.exe]
我找了解决这一点,并没有发现什么( - 容易)。 呼叫的Netstat进入IPHLPAPI一些无证功能,但无论从IPHLPAPI获取服务名称或以某种方式从IPHLPAPI采用PID和使用别的东西来获取服务名称还不清楚。 我真的不动心花时间与调试器来回答这个问题,因为..:
然而理想的人会不会一定要使用从C#轮询式的方法。 这将是更适合使用ETW。 我认为缺乏使用它从C#的例子是,因为有一些开销,开始使用它和周围的例子可能是针对其他类型的跟踪/监视方案。
总结:如果你是在很短的时间来实现这一点,只是节省了netstat输出似乎是“解决方案”。 理想的情况下我也希望找到一个简单易用的C#示例来监视任何网络连接,并搞清楚什么服务或进程处理/开始他们可能更改防火墙一起。 我相信,这样做既可以与ETW但我现在需要它很难证明来获取工作所需的未知量的时间。 我已经ATLEAST想通了,“logman查询提供”列出了供应商,那么你需要做一些事情,以使供应商(和驱动程序支持,在某些情况下,像数据包捕获跟踪)。 还有周边的使用ETW C#项目。 但是,这并不清楚这将是多么大的努力重现了netstat输出与ETW。