保存程序的所有网络i / o

时间:2010-07-12 23:17:59

标签: networking

通常我使用tcpflow来调试网络i / o,但它似乎没有任何方法按进程过滤 - 所以我需要手动找出哪些文件来自正在调试的程序,以及这是完全不相关的流量。通常两者都是http,因此端口过滤是不可能的,并且有时只能通过远程主机名进行过滤。

理论上它应该有效。进程ID可以与套接字相关联,至少在Linux上 - /proc/net/tcp将套接字地址对与inode相关联,fstat ing /proc/*/fd/*按进程显示所有套接字inode(这就是netstat -p使用) - 但它需要通过流量捕获程序实时完成,否则这些数据全部消失 - 所以我不能只是稍后grep正确的文件。 (otoh我不确定这在OSX上是否可行)

或者另一种可能性是在程序启动而不是外部监视器时使用某种低级库注入,如LD_PRELOAD

在程序中查找每个网络读取和写入的替代方法,以及在那里添加日志记录代码太难以考虑 - 特别是因为很多实际的i / o可能深埋在第三方库中。

有什么建议吗?跨平台的东西是完美的,但如果它适用于OSX或Linux,那就足够了。

1 个答案:

答案 0 :(得分:1)

如果您从特定用户ID运行程序,您可以使用大多数主要防火墙(至少netfilter / iptables,Linux中使用的防火墙)标记用户的流量,然后使用Wireshark保存它。

此外,如果您只想调试网络数据,请尝试使用:

strace -f -e trace=network -s 10000 ping 8.8.8.8

很抱歉没有达到多平台要求。 Windows上的其他程序的低级网络i / o处理对我来说似乎有点棘手。