有没有办法确定传出连接中的哪个服务(在svchost.exe中)?


13

我正在使用更严格的策略来重做防火墙配置,并且我想确定某些传出连接的来源(和/或目标)。

我有一个问题,因为它们来自svchost.exe并转到Web内容/应用程序交付提供程序-或类似的文件:

5 IP in range: 82.96.58.0 - 82.96.58.255      --> Akamai Technologies         akamaitechnologies.com
3 IP in range: 93.150.110.0 - 93.158.111.255  --> Akamai Technologies         akamaitechnologies.com
2 IP in range: 87.248.194.0 - 87.248.223.255  --> LLNW Europe 2               llnw.net
205.234.175.175                               --> CacheNetworks, Inc.         cachefly.net
188.121.36.239                                --> Go Daddy Netherlands B.V.   secureserver.net

那么有可能知道特定连接执行哪种服务吗?或您对适用于这些规则的规则有何建议?

(Comodo防火墙和Windows 7)

更新:

netstat -anotasklist /svc帮我一点点,但是它们在一个svchost.exe中提供了许多服务,因此仍然是一个问题。此外,“ tasklist / svc”返回的服务名称不容易阅读。

(所有连接都是HTTP(端口80),但我认为这无关紧要)

Answers:


9

我在此服务器故障答案(关于服务和内存使用情况)中找到了一种方法,可以用来单独分析服务的网络使用情况(使用任何网络工具)

彼得·莫滕森(Peter Mortensen):

将每个服务拆分为在其自己的SVCHOST.EXE进程中运行,并且消耗CPU周期的服务将在任务管理器或进程资源管理器中轻松显示(“ =“之后的空格是必需的)):

SC Config Servicename Type= own

在命令行窗口中执行此操作,或将其放入BAT脚本中。需要具有管理特权,并且必须重新启动计算机才能生效。

可以通过以下方式恢复原始状态:

SC Config Servicename Type= share

7

SysInternals Process Explorer可以为您完成此任务。

打开svchost.exe您要分析的实例的流程属性。单击“ TCP / IP”选项卡。双击要查找的连接,以显示该连接的堆栈跟踪。您应该能够将堆栈追溯到实现该服务的DLL。这是有关Process Properites的帮助文件的摘录:

TCP / IP:

该页面上显示该进程拥有的所有活动TCP和UDP端点。

在Windows XP SP2和更高版本上,此页面包含一个“堆栈”按钮,该按钮将打开一个对话框,该对话框显示在打开时打开选定端点的线程的堆栈。这对于在系统进程和Svchost进程中确定端点的用途很有用,因为堆栈将包含负责端点的驱动程序或服务的名称

同样在配置符号

配置符号:在Windows NT及更高版本上,如果要让Process Explorer在进程属性对话框和线程堆栈窗口的“线程”选项卡中解析线程起始地址的地址,然后通过首先从Microsoft的网站下载Windows调试工具包来配置符号。站点并将其安装在其默认目录中。打开“配置符号”对话框,并指定“调试工具”目录中dbghelp.dll的路径,并通过为符号路径输入符号服务器字符串,使符号引擎根据需要从Microsoft将符号下载符号下载到磁盘上的目录。例如,要将符号下载到c:\ symbols目录,您可以输入以下字符串:

srv c:\ symbols http://msdl.microsoft.com/download/symbols

注意:您可能需要以管理员身份运行Process Explorer,才能看到线程的堆栈。


非常有趣,但不幸的是PE v11.33似乎在Windows 7上不支持TCP / IP堆栈:-/“该版本的Windows上不可用的堆栈”。我没有在网上找到确认信息,但是我敢肯定我已经正确配置了Symbols……
fluxtendu 10/3 / 24,2

与新的PE 12相同的结果:-/
fluxtendu 2010年

1
嗯..我在7上得到了相同的结果。奇怪的是,它在XP上可以正常工作。
重载了2010年

1
“ TCP / IP”选项卡应具有“服务”列,例如,在查看svchost.exe的实例时,它会告诉您哪个服务拥有每个连接(在分组在同一PID下的服务中)。现在,我正在使用PE 12.00,目前无法检查以前版本中的“服务”列,但是值得一试。
TataBlack

没事的。对我来说,此功能仅适用于XP。最好调查一下w7在这方面发生了什么变化,因此它不起作用。
saulius2


2

TCPView是一个图形工具,将向您显示服务,PID和TCP连接(本地和远程):

TCPView的屏幕截图


像'netstat -ano&tasklist / svc'一样,该工具在一个svchost PID中区分不同的连接,但是不显示它们背后的服务...它已经更好了,因为它链接了PID和连接(并识别了一些众所周知的端口)但这仍然不是我想要的。(此外,它缺少过滤器和日志功能...)
助焊剂

Downvote,因为这不能解决问题-Chris
Dale

@ChrisDale:我不同意。该答案显示正在连接的服务,因此是对已接受答案的补充。
哈里奇

@Harrymc TCPView仅显示svchost.exe侦听或建立连接。svchost不是服务,而是多个服务的容器。如果您需要知道哪个服务正在建立连接,那么您会更加聪明,因为您知道其中的一个正在建立连接。足够公平,它可以补充答案,但是有点。我遇到了同样的问题,而TCPView并没有为我解决问题:) Sysinternals Process Explorer确实做到了。
克里斯·戴尔

1
@ChrisDale:它确实显示了pid,以下是所有其他内容。
哈里克

2

尝试使用tasklist /svcand netstatnetstat -an从命令行。

这将向您显示正在使用svchost.exe的程序以及正在使用的端口。使用端口号,您可能可以查找通常使用该端口号的协议。请参阅TCP和UDP端口号列表


是的,但是svchost.exe的一个实例通常托管10-20个服务,并且很难找出哪个服务出了问题。不过,有一种获取信息的方法
彼得·莫滕森

1

使用任务管理器查看进程列表中每个进程的PID列。然后运行netstat -ano以查看活动的连接和关联的PID(=进程ID)。


1

如前所述,找到给定svchost进程的svchost PID和/或使用第三方应用程序,例如:CurrportsProcessExplorer将帮助您识别给定进程下的服务(svchost.exe或其他任何东西)。另外,Svchost ViewerSvchost Analyzer也将严格显示svchost信息。

我还想补充一下:内置Windows任务管理器的较新版本至少会向您显示一些有关在svchost下运行的服务的有限信息(无需安装任何东西):

首先,在“进程”下选择svchost进程。
右键单击给定的svchost进程,然后选择“转到服务”
。它将直接转到“服务”选项卡,并突出显示在该svchost进程下运行的给定服务。

另一种方法:
使用管理员CMD提示符:
tasklist /svc /fi "IMAGENAME eq svchost.exe" > svchost_services.txt
notepad svchost_services.txt
这也是获取有问题的给定svchost /服务的PID的快速方法。


1

NirSoft实用程序CurrPorts可以完成您想要的一切,包括过滤并提供流程服务列表。

实际上,它唯一的问题是如何在可能显示的大量信息列中进行选择。

CurrPorts实用程序的屏幕截图


到目前为止,这是最好的解决方案,但并不能满足我所需要的基本要求:“流程服务”列将所有可能的服务
归类
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.