是否有一个简单的命令行工具用于在 Linux 上嗅探单个命令的数据包?

是否有一个简单的命令行工具用于在 Linux 上嗅探单个命令的数据包?

如果有一个用于在 Linux 中嗅探数据包的单个命令的单一命令行工具,我会很高兴。类似于sniff dumpfile command这样,您可以在终端中运行您想要嗅探数据包的命令,并在其他地方获取数据包的转储。

我想转储/保存/查看我输入的单个命令的网络流量,而不是单个网络接口上的所有 TCP 流量。因此,如果我登录到我的计算机并在后台运行 IRC,并且我确实这样做了sniff somefile wget http://www.google.com,我希望看到 wget 命令下载的所有网络流量http://www.google.com。我不希望“somefile”的 IRC 网络流量造成混乱。

有许多 linux/unix 命令可以接受不同的命令并执行不同的操作。从sudo(以超级用户身份运行)、nice更改良好级别、trickle(限制命令的带宽)

答案1

据我所知,没有,但理论上应该不难找到类似的东西。 Strace 可用于拦截网络系统调用。

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

这将为您提供有关内核和进程之间发送的数据的信息。 strace 的输出并不完全是您想要的。但是, strace 使用 ptrace 系统调用来拦截系统调用。也许可以编写一个程序来更有效地输出数据。

或者,您也可以拦截有用的套接字、绑定和监听系统调用。可以编写一个小程序,在这些调用上使用 ptrace,并在每次打开新套接字时使用 libpcap 动态更改捕获过滤器。

答案2

跟踪转储

Tracedump 是一个单应用程序 IP 数据包嗅探器,它捕获单个 Linux 进程的所有 TCP 和 UDP 数据包。

下载及说明请点击此处:http://mutrics.iitis.pl/tracedump

答案3

尝试 Wireshark——命令如下tshark

  • tshark 允许您选择从接口捕获的流量的过滤器
  • 使用其他实用程序,如 debianlsof识别您感兴趣的应用程序所进行的通信类型。

或者,您真的只是想要 LSOF?


我认为没有一种工具可以动态过滤与进程相关的所有通信。但是,您可以尝试使用类似这样的工具跟踪进程通信lsof,一旦您拥有一个可以将该进程的通信与系统上运行的所有其他流量隔离开来的良好过滤器,您就可以获得正确的捕获。

例如,wget通常目标 IP 地址与其他进程相关流量不同。即使您采取类似的做法,skype目标端口范围通常对于一个实例也是固定的。


这有点像不确定性原理。你通常可以知道什么正在经历一组通信路径(使用嗅探器对已识别的一组流进行过滤),或者在哪里正在建立不同的通信链接(使用 lsof)。

我真的很想知道是否可以为一个应用程序同时完成这两项操作。我认为这应该是可行的。但是,还没有看到任何工具可以做到这一点。

答案4

具体来说,对于 Web 浏览器/网页,类似 Firefox 的 Firebug 插件可能会为您提供一些您正在寻找的信息: http://getfirebug.com/net.html

对于更通用的应用程序,您可能需要使用 netstat 来识别应用程序使用的端口,然后使用带有过滤器的 Wireshark/tshark/dtrace 来捕获该流量。但这不是您想要的一行答案...

相关内容