转储单个应用程序的网络流量(类似跟踪)


11

我正在寻找一种方法来转储应用程序生成的网络数据的pcap,以类似的方式strace转储syscalls等,例如:

net-strace somecommand -args

somecommand会在网络上执行某些操作,并net-strace保存该应用程序生成的所有流量的pcap转储(+回复和相关流量)。

能做到吗?


问题在于,应用程序不发送数据包(使用诸如ping之类的原始套接字的数据包除外),而是使用网络API来使内核代表它们发送数据包(并接收相关的数据包)。
斯特凡Chazelas

是的,但也有应用(例如proxychains - proxychains.sourceforge.net),它是通过代理运行的所有应用程序数据。不知道他们是如何做到的,但是他们可以捕获它并通过代理发送它。也许如果有一个简单的代理(在本地运行)可以转储pcap,则可以使用proxychains + proxy组合来获取转储。
gesti 2014年

他们比数据包更有可能劫持API(使用LD_PRELOAD)。话虽这么说,也许可以将一些setsockopt(SO_MARK)注入应用程序并使用netfilter将数据包记录到ulog中。
斯特凡Chazelas

3
为应用程序创建一个新的网络名称空间,并捕获其中的所有流量。对于某些用例,也可以采用一种可接受的方法。
斯特凡Chazelas

Answers:



2

您可以通过不同的方法转储应用程序生成的流量:

如果知道应用程序正在使用的端口,则可以使用针对这些端口的特定过滤规则来运行tcpdumpwirehark

如果不是这样,则可以使用iptables规则标记应用程序数据包,使其与进程的所有者匹配。您可能需要创建一个新的用户帐户以完全隔离该过程。然后,您可以捕获仅与规则匹配的流量。

您可以找到有关此相关主题的更多完整信息:https : //askubuntu.com/questions/11709/how-can-i-capture-network-traffic-of-a-single-process

您可能还会发现有趣的程序跟踪转储,如上一主题所述。http://mutrics.iitis.pl/tracedump

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.