在Wireshark中按进程/ PID过滤


Answers:


58

我不知道如何。PID不会将其传递到电线上(通常来说),加上Wireshark允许您查看电线上的内容-可能是所有通过电线进行通信的机器。无论如何,进程ID在不同的机器上并不是唯一的。


7
好point..thats我的想法太..让我等了一天收盘在此之前,只是柜面有一个Wireshark的忍者在那里谁设法做..
瑞恩·费尔南德斯

30
Wireshark知道正在使用哪个端口,OS知道正在使用该端口的进程的PID。通过更改代码,Wireshark应该可以将端口映射到PID。在某些情况下,这将失败,例如,在Wireshark向OS查询端口的PID之前,操作系统将端口重新分配给其他应用程序时。因此,这不会是傻瓜和小故障,但是如果用户意识到这些限制,它将仍然是有用的功能。
2014年

我说只是将模块添加到wireshark,以监听端口的打开/关闭并将PID映射到端口。与主进程同步,您将获得一个完美的端口到进程映射器。但是,从问题注释中读取错误后,该模块的创建并不是那么简单。
维斯珀

我记得第一次下载Wireshark时,它显示了进程树,您可以选择要监视的进程。当此选项消失时,Dunno出现了,但它在那里。
托马什Zato -恢复莫妮卡

90

万一您正在寻找一种替代方法,并且所使用的环境是Windows,Microsoft的Network Monitor 3.3是一个不错的选择。它具有进程名称列。您可以使用上下文菜单轻松地将其添加到过滤器中并应用该过滤器。通常,GUI非常直观...


10
Microsoft Network Monitor 3.4位于microsoft.com/en-us/download/details.aspx?id=4865
gt

39
还有Microsoft Message Analyzer,它基本上是Microsoft的Wireshark版本(据我所知是Network Monitor的前身),但集成度更高。在列选择器的“ Etw”->“ EtwProviderMsg”下,有一个“ PID”列。效果很好!
卡梅伦

3
确切的路径是EtwProviderMsg-> EventRecord-> Header-> ProcessId
r590

我刚刚尝试过,而Microsoft Message Analyzer是如此乏味!几乎使我的系统崩溃了。UI也很违反直觉。有没有人找到清除收集到的数据的方法?我放弃并卸载了那块垃圾。(PS。太糟糕了,Wireshark开发人员没有添加功能来将PID /进程名称连接到过滤器中的端口。这非常容易做到。这对于查看启动过程中的过程可能至关重要。一种解决方法,我可以从SysInternals使用ProcMon来获得一般想法。)
c00000fd

1
我最近才发现Microsoft Message Analyzer,它是一个非常有用的工具!我怎么可能从未听说过它。如此低估。由于与Windows的集成要比Wireshark好得多,因此它具有强大的筛选功能。我已经在每天工作约3个月内在所有公司主机上切换到该模式。感谢@Cameron在该答案下的评论!:-)
船长

16

您可以将Wireshark的端口号与netstat的端口号进行匹配,这将告诉您侦听该端口的进程的PID。


12
好吧,这可能行不通..程序打开并关闭了许多本地和远程端口
Ryan Fernandes 2009年

11

使用Microsoft Message Analyzer v1.4

从字段选择器导航到ProcessId。

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

右键单击并添加为列


1
感谢您指出我的方向,这正是我所需要的。FWIW,在“将procmon”顶级组似乎包含相同的ProcessID,以及其他信息,如进程名,的ParentId等
托比亚斯Ĵ

3

在Windows上,有一个实验性版本可以做到这一点,如邮件列表中所述,按本地进程名称过滤


确实,在Wireshark中,“您可以将Wireshark的端口号与netstat的端口号进行匹配,这将告诉您侦听该端口的进程的PID。” 汤姆·伍尔弗瑞(Tom Woolfrey)评论中的内容,因此(如消息所述)受该机制的限制。

3

监视某些进程尝试连接到的位置是一件很重要的事情,在Linux上似乎没有任何方便的方法可以做到这一点。但是,有几种解决方法是可行的,因此我觉得值得一提。

有一个名为nonet的程序,它允许运行无法访问Internet的程序(我的系统上安装了大多数程序启动器)。它使用setguid在nonet组中运行进程,并设置iptables规则拒绝该组的所有连接。

更新:到目前为止,我使用了一个更简单的系统,您可以轻松地使用ferm进行具有可读性的iptables配置,并且只需使用该程序sg即可运行具有特定组的程序。iptables还允许您重新路由流量,因此,即使您不想禁用所有Internet,甚至可以将其路由到端口上的单独接口或本地代理,也可以过滤wireshark或直接记录来自iptables的数据包正在检查流量。

使它适应于在一个组中运行程序并在执行生命周期内使用iptables削减所有其他流量并不是很复杂,然后您只能从该过程中捕获流量。

如果我愿意写它,请在此处发布链接。

另外,您始终可以在虚拟机中运行进程并嗅探正确的接口以隔离其建立的连接,但这将是一个次等的解决方案...


3

如果您想遵循仍必须启动的应用程序,那么当然可以:

  1. 安装Docker(请参阅https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
  2. 打开一个终端并运行一个小容器:(docker run -t -i ubuntu /bin/bash将“ ubuntu”更改为您喜欢的发行版,这不必与您的实际系统中的相同)
  3. 使用与在真实系统中安装应用程序相同的方法,将应用程序安装在容器中。
  4. 在您的实际系统中启动Wireshark,转到捕获>选项。在打开的窗口中,您将看到所有界面。而是选择的anywlan0eth0,...选择新的虚拟接口docker0来代替。
  5. 开始捕捉
  6. 在容器中启动您的应用程序

您可能对在容器中运行软件有一些疑问,因此,这是您可能要问的问题的答案:

  • 我的应用程序可以在容器内工作吗?几乎可以肯定,但是您可能需要了解一些有关docker的知识才能使其正常工作
  • 我的应用程序运行不慢吗?微不足道。如果您的程序运行了一周的大量计算,则现在可能需要一周零三秒钟
  • 如果我的软件或其他东西在容器中损坏怎么办?那是关于容器的好处。无论内部运行什么,都只会破坏当前容器,而不会损害系统的其余部分。

0

在某些情况下,您无法按进程ID进行过滤。例如,就我而言,我需要从一个进程中嗅探流量。但是我在其配置目标机器的IP地址中找到了添加的过滤器ip.dst==someip和voila。它在任何情况下都不会起作用,但是对于某些情况来说很有用。


0

使用获取端口号netstat

netstat -b

然后使用Wireshark过滤器:

tcp.port == portnumber

我不确定这是万无一失的方法。如果您有一个侦听端口的TCP服务器,但没有阻止内核的TCP处理,则内核或您的应用程序中的一个或两个都可以在端口上响应。
aeb0

0

使用strace更适合这种情况。

strace -f -e trace=network -s 10000 -p <PID>;

选项-f还可以跟踪所有分支的进程,-e trace=netwrok仅过滤网络系统调用并-s显示不超过10000个字符的字符串长度。

您也只能跟踪某些调用,例如send,recv,read操作。

strace -f -e trace=send,recv,read -s 10000 -p <PID>;

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.