如果有一个命令行工具用于在 Linux 中嗅探单个命令的数据包,我会很高兴。类似sniff dumpfile command
这样您就可以在终端中运行您想要数据包嗅探的命令并在其他地方获取数据包的转储。
我想只转储/保存/查看我输入的单个命令的网络流量,而不是我的单个网络接口上的所有 TCP 流量。因此,如果我登录到我的计算机并在后台运行 IRC,并且我确实这样做了sniff somefile wget http://www.google.com
,我想查看 wget 命令下载http://www.google.com所执行的所有网络流量。我不希望'somefile' 让 IRC 网络流量混淆事物。
有很多 linux/unix 命令接受不同的命令并执行不同的操作。从sudo
(以超级用户身份运行),nice
更改 nice 级别,trickle
(限制命令的带宽)
没有任何我知道的,但理论上应该不难得到类似的东西。Strace 可用于拦截网络系统调用。
这将为您提供有关内核和进程之间发送的数据的信息。strace 的输出并不完全是您想要的。但是,strace 使用 ptrace 系统调用来拦截系统调用。也许可以编写一个程序来更有用地输出数据。
或者,您还可以拦截漂亮有用的套接字、绑定和监听系统调用。可以编写一个小程序,在这些调用上使用 ptrace 和 libpcap,以便在每次打开新套接字时动态更改捕获过滤器。
跟踪转储
在此处下载和描述:http: //mutrics.iitis.pl/tracedump
试试 Wireshark——命令是
tshark
或者,你真的只想要 LSOF?
我认为没有一种工具可以动态地过滤与进程相关的所有通信。但是,您可以尝试使用诸如此类的工具来跟踪进程通信,
lsof
并且一旦您拥有一个可以将该进程的通信与系统上运行的所有其他流量隔离开的良好过滤器,您就可以获得正确的捕获。例如,
wget
通常目标 IP 地址与其他进程相关的流量不同。即使您采取类似skype
目标端口范围的方法,通常也是固定的一个实例。这有点像不确定性原理。您通常可以知道通过一组通信路径(通过嗅探器过滤已识别的流组)正在经历什么,或者在哪里建立了不同的通信链接(使用 lsof)。
我真的很想知道两者是否都可以用于应用程序。我认为应该是可行的。但是,还没有看到任何工具可以做到这一点。
学习使用过滤器表达式。
虽然这不会做你要求的花哨的跟踪东西。
它将允许您从捕获中删除几乎所有“像 IRC 这样令人困惑的东西”。
此外,了解过滤器语法以供将来快速参考非常有用。
专门针对 Web 浏览器/网页,例如 Firefox 的 Firebug 插件可能会为您提供一些您正在寻找的信息:http: //getfirebug.com/net.html
对于更一般的应用程序,您可能需要使用 netstat 来识别应用程序使用的端口,然后使用带有过滤器的 Wireshark/tshark/dtrace 来捕获该流量。不是您正在寻找的单行答案...
一个想法,试试VMWare
-设置一个 vm
- 配置该 vm 以使用特定的接口
- 从主机上嗅探该接口(它就像一个中间人攻击)
如果您隔离了该虚拟机上正在运行的网络应用程序,您可能会得到答案
我想,一个更理想的解决方案是按照 VMWare 所做的那样指定它如何选择要讨论的接口。我认为它的魔力来自它使用的内核模块,在这种情况下,可能是 vmnet 内核模块。
据我所知,应用程序不知道他们在谈论什么界面,我相信这是设计使然;他们不应该担心这些事情。
此外,
也许一个程序已经存在,我不知道。但是,如果编写了一个,您可以将其称为 nettrace(例如),并且用法可能类似于
nettrace 程序接口
然后嗅探它使用的接口并将路由(也许它自动执行)添加到您的真实接口
假设您是当时唯一尝试连接到谷歌的人,我认为这样的事情应该可以解决问题:
tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80
如果您不是在盒子上尝试连接到 google 的唯一连接,那么如果您可以识别您正在连接的 IP/端口,您还可以指定 src 端口/src ip。
除非您可以在您使用的任何客户端上指定它,否则识别 src 端口可能是个问题。我不确定你是否可以使用 wget。
我强烈怀疑您可以同时指定 src 和 dst 端口,
netcat
因此如果您真的对 google 感兴趣,您可以通过 netcat (手动)进行 GET。当然手册页会给你细节
tcpdump 手册页和许多网站都提供了过滤器的深入示例,甚至还有一些 tcpdump 过滤器表达式的在线存储库。它应该能够做几乎任何你能想到的事情,假设你对网络流量(源、目的地、端口、协议等)有所了解,而不仅仅是生成它的程序。
如果您在服务器或无头机器上工作,您始终可以让 tcpdump 写入转储文件,然后在工作站上的 Wireshark 中打开它,并获得高级过滤和图形界面。
也许这个脚本会通过对 tshark 命令进行适当的修改来做你想做的事情:
稍后阅读转储文件:
Dtrace 应该允许这样做,尽管我不知道它是否已经完全融入 Linux。