如何记录网络进程与之交换数据的所有远程目的地?

如何记录网络进程与之交换数据的所有远程目的地?

当一个进程通过网络交换数据时,我至少能想到以下参数:

  • 远程主机:端口对 - 它标识远程端点(还有本地主机:端口对,但端口通常是随机用于传出连接的,所以我不需要它)
  • 这是 TCP 还是 UDP 流量
  • 是传入流量还是传出流量

我如何才能在某个进程的整个生命周期内记录所有这些数据?我需要在 Linux 上这样做。我并不是想阻止某些流量,只是想记录上述详细信息。

据我所知,单靠网络嗅探器无法做到这一点,因为当 IP 数据包来自外部时,嗅探器不知道该数据包用于哪个进程(因为这是另一层,即应用层 IIRC)。

答案1

如果这只是针对一个进程,您可以在 strace 的控制下运行该进程并记录数据。strace 将显示所有系统调用,然后您可以对所有日志进行后处理以查看您的进程在做什么。

答案2

我不确定这对您是否有用,但是还有其他选择:

1)如果你知道进程 ID (PID):

 $ lsof -ni4 -p <PID>
  • -n:数字输出(不查找主机或端口)
  • -i4:互联网文件(打开套接字)、ipv4

这将仅显示从您的主机发起的连接。

2)另一种方法是使用带有 LOG 目标和模块所有者 (-m 所有者) 的 iptables。例如:

# iptables -A OUTPUT -m owner <USER ID> -j LOG '[ Some Tag ]'
# iptables -A INPUT -p tcp --dport <SERVICE PORT> -j LOG '[ Some Tag input ]'
# iptables -A INPUT -p udp --dport <SERVICE PORT> -j LOG '[ Some Tag input ]'

您可以 grep 系统日志以查找指定标签。此方法不允许您指定进程 ID,但如果它是仅运行此服务的守护进程,则可能正是您想要的。

答案3

查看“tcpspy”。它应该能满足您的要求。但是,该工具的主页目前没有响应,因此您可能需要从 FSF 列表或 Debian 档案中查看它。

描述如下:

tcpspy 是一款管理员工具,可记录有关传入和传出的 TCP/IP 连接的信息。它用 C 编写,与 tcpdump 不同,不使用 libpcap 函数。

使用规则选择要记录的连接,类似于 tcpdump 接受的过滤表达式。记录以下信息:用户名、本地地址和端口、远程地址和端口,以及(可选)可执行文件名。

目前仅支持IPv4协议。

以下是相关链接:

以下是 Debian 软件包中列出的项目主页的 URL:

相关内容