11 回答
万一您正在寻找替代方法并且您使用的环境是 Windows,Microsoft 的Network Monitor 3.3 是一个不错的选择。它具有进程名称列。您可以使用上下文菜单轻松地将其添加到过滤器并应用过滤器。像往常一样,GUI 非常直观......
我不明白怎么做。PID 不会进入网络(一般来说),而且 Wireshark 允许您查看网络上的内容 - 可能是所有通过网络进行通信的机器。无论如何,进程 ID 在不同的机器上并不是唯一的。
您可以将wireshark 中的端口号匹配到来自netstat的端口号,它会告诉您侦听该端口的进程的PID。
使用 Microsoft 消息分析器 v1.4
从字段选择器导航到 ProcessId。
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
右键单击并添加为列
如果您想关注一个仍需启动的应用程序,那么这当然是可能的:
- 安装 docker(参见https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/)
- 打开一个终端并运行一个小容器:(
docker run -t -i ubuntu /bin/bash
将“ubuntu”更改为您最喜欢的发行版,这不必与您的真实系统中的相同) - 使用与在真实系统中安装应用程序相同的方式将应用程序安装到容器中。
- 在你的真实系统中启动 wireshark,去 capture > options 。在将打开的窗口中,您将看到所有界面。不要选择
any
,wlan0
,eth0
, ... 而是选择新的虚拟接口docker0
。 - 开始捕捉
- 在容器中启动您的应用程序
你可能对在容器中运行你的软件有一些疑问,所以这里是你可能想问的问题的答案:
- 我的应用程序可以在容器内工作吗?几乎可以肯定是的,但您可能需要了解一些有关 docker 的知识才能使其正常工作
- 我的应用程序不会运行缓慢吗?微不足道。如果您的程序需要进行一周的繁重计算,那么现在可能需要一周零 3 秒
- 如果我的软件或其他东西在容器中损坏了怎么办?这就是容器的好处。无论在里面运行什么,都只能破坏当前容器,而不会伤害系统的其余部分。
使用strace
更适合这种情况。
strace -f -e trace=network -s 10000 -p <PID>;
-f
跟踪所有分叉进程的选项,-e trace=netwrok
仅过滤网络系统调用并-s
显示最多 10000 个字符的字符串。
您还可以只跟踪某些调用,如发送、接收、读取操作。
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
在 Windows 上,有一个实验版本可以执行此操作,如邮件列表中所述,按本地进程名称过滤
这对于监视某些进程尝试连接的位置是一件重要的事情,而且在 Linux 上似乎没有任何方便的方法可以做到这一点。但是,有几种解决方法是可能的,所以我觉得值得一提。
有一个名为nonet的程序,它允许在没有 Internet 访问权限的情况下运行程序(我的系统上的大多数程序启动器都安装了它)。它使用 setguid 在组 nonet 中运行进程并设置iptables规则以拒绝来自该组的所有连接。
更新:到目前为止,我使用了一个更简单的系统,您可以轻松地使用 ferm 获得可读的 iptables 配置,并且只需使用该程序sg
运行具有特定组的程序。iptables 还允许您重新路由流量,因此您甚至可以将其路由到单独的接口或端口上的本地代理,如果您不想在使用时禁用所有互联网,则可以直接从 iptables 过滤或记录数据包正在检查交通。
调整它以在一个组中运行一个程序并在执行生命周期内使用 iptables 切断所有其他流量并不是很复杂,然后您只能从该进程中捕获流量。
如果我来写它,我会在这里发布一个链接。
另一方面,您总是可以在虚拟机中运行一个进程并嗅探正确的接口以隔离它所建立的连接,但这将是一个相当低劣的解决方案......
在某些情况下,您不能按进程 ID 过滤。例如,就我而言,我需要从一个进程中嗅探流量。但我在它的配置目标机器 IP 地址中找到了,添加了过滤器ip.dst==someip
,瞧。它在任何情况下都不起作用,但对某些人来说它很有用。
您可以使用 wireshark 上的这些命令示例检查端口号:-
tcp.port==80
tcp.port==14220