如果在Linux中有一个单一的命令行工具来侦听单个命令的话,我很乐意。 像sniff dumpfile command这样你就可以运行你想要在terminal中进行数据包嗅探的命令,并在其他地方获得数据包的转储。
我想转储/保存/只查看我input的单个命令的networkingstream量,而不是单个networking接口上的所有TCPstream量。 所以,如果我login到我的电脑,并在后台运行IRC,我sniff somefile wget http://www.google.com ,我希望看到所有的networkingstream量wget命令做下载http ://www.google.com 。 我不希望'somefile'使IRCnetworkingstream量混淆。
有很多linux / unix命令可以接受不同的命令,并做一些不同的事情。 从sudo (作为超级用户运行), nice改变好的水平, trickle (限制命令的带宽)
没有我所知道的,但从理论上来说,不应该很难得到类似的东西。 Strace可以用来拦截networking系统调用。
# strace -f -e trace=network -s 10000 /usr/bin/command arguments
这将为您提供有关在内核和进程之间发送的数据的信息。 strace的输出并不完全是你想要的。 但是,strace使用ptrace系统调用拦截系统调用。 编写一个程序来输出更有用的数据是可能的。
或者,你也可以拦截好用的套接字,绑定和监听系统调用。 编写一个在这些调用中使用ptrace的小程序,libpcap可以在每次打开新套接字时dynamic更改捕获筛选器。
Tracedump
Tracedump是一个单一的应用程序IP数据包嗅探器,捕获单个Linux进程的所有TCP和UDP数据包。
下载和描述在这里: http : //mutrics.iitis.pl/tracedump
尝试Wireshark – 命令将是tshark
或者,你真的只想要LSOF吗?
我不认为有一个工具可以dynamic地保持与进程相关的所有通信的过滤。 但是,您可以尝试使用lsof等工具来跟踪进程通信,并且一旦您拥有一个可以将该进程的通信与系统上运行的所有其他通信隔离的良好filter,就可以获得正确的捕获。
例如,对于wget通常目标IP地址与其他进程相关的stream量不同。 即使你采取了像skype的目标端口范围通常是固定的实例。
这有点像不确定性原理。 通常你可以知道通过一组通信path(通过对所识别的一组stream进行嗅探器过滤),或者通过不同的通信链路(使用lsof)。
我真的很想知道是否可以为一个应用程序完成。 我认为这应该是可行的。 但是,还没有看到任何工具呢。
学习使用filterexpression式。
虽然这不会做你想要的花式痕迹的东西。
它可以让你从捕捉中删除几乎所有的“令人困惑的东西,如IRC”。
另外,了解将来可以快速参考的filter语法非常有用。
特别是对于一个网页浏览器/网页,像Firefox的Firebug插件可能会给你一些你正在寻找的信息: http : //getfirebug.com/net.html
对于更一般的应用程序,您可能需要使用netstat来识别应用程序使用的端口,然后使用filter来捕获Wireshark / tshark / dtrace以捕获stream量。 不是你正在寻找的一个线路的答案,但…
一个想法,尝试VMWare
安装一个虚拟主机
configuration该vm使用特定的接口
-sniff从主机接口(它就像一个中间人攻击)
如果你隔离什么networking应用程序在该虚拟机上运行,你可能会得到你的答案
我想,更理想的解决scheme就是根据VMWare如何select接口进行交谈来完成VMWare的工作。 我认为它的魔法来自它使用的内核模块,在这种情况下,可能是vmnet内核模块。
据我所知,应用程序并不知道他们在什么接口上交谈,我相信这是devise的; 他们不应该担心这样的事情。
此外,
也许一个程序已经存在了,我不知道。 但是,如果写了一个,你可以把它称为nettrace(例如)和用法可能是
nettrace程序界面
然后嗅探它使用的接口,并添加路由(也许它会自动)到您的真实接口
假设你是当时试图连接到谷歌的唯一的人,我想这样的事情应该做的伎俩:
tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80
如果您不是试图连接到Google的唯一连接,那么如果您可以识别您正在连接的IP /端口,则还可以指定src port / src ip。
识别src端口可能是一个问题,除非您可以在您使用的任何客户端上指定它。 我不确定你是否可以用wget。
我强烈怀疑你可以指定netcat同时使用src和dst端口,所以如果你真的感兴趣的是谷歌,你可以通过netcat手动执行GET操作。
当然手册页会给你具体的
也许这个脚本会通过对tshark命令的适当修改来完成你想要的:
#!/bin/bash # Start tshark in the background before we run the commsnd to be sniffed. # Add more options to tshark, as appropriate to your command.... setsid tshark -w dump -i eth0 tcp port 8080 >/dev/null 2>&1 & sleep 2 wget www.google.com # tshark keeps running if you don't kill it. # This kills all other tsharks that may be running. pkill -9 tshark
稍后阅读转储文件:
tshark -r dump
Dtrace应该允许这样做,尽pipe我不知道它是否已经完成了Linux。
tcpdump手册页和许多网站给出了深入的filter示例,甚至还有一些tcpdumpfilterexpression式的在线存储库。 假设你知道有关networkingstream量(源,目的地,端口,协议等)的内容,而不仅仅是程序产生的东西,它应该能够做到你可以梦想的任何事情。
如果您正在使用服务器或无头框,则可以始终使用tcpdump写入转储文件,然后在工作站的Wireshark中打开它,并获得高级筛选和graphics界面。