列出活动*和过去*的网络连接

列出活动*和过去*的网络连接

在 Linux 上,我知道我可以使用lsof -i或 netstat 列出活动网络连接。但是,据我所知,这只能列出目前开放

如果某个进程建立了一个短暂的连接然后终止它(例如,一个“呼叫总部”的程序),除非我恰好lsof在那一刻运行,否则我会错过它。有没有办法获取我已连接的服务器列表?例如,每当打开系统范围内的新连接时,都会将 IP 地址写入文件的工具。

仅为了执行此任务而永久打开诸如 wireshark 之类的网络嗅探器似乎有些小题大做。

答案1

如果某个进程建立了一个短暂的连接然后终止它(例如,一个“打电话回家”的程序)

大多数此类程序都会创建 TCP 连接,以确保信息能够到达“家”。如果是这种情况,那么该netstat命令将是您最好的朋友,因为所有关闭的 TCP 连接都会在状态中保持一小段或更长的时间TIME_WAIT,并netstat --inet -n列出这些连接(以及当前打开的连接)。

如果你运气不好,那个偷偷摸摸的进程使用 UDP 连接,或者你想长时间监控流量,那么你必须使用 TCPDump 或 IPTraf 等工具监控机器的完整网络流量。IPTraf 更简单,因为它只记录 IP 地址和端口,TCPDump 是一个更高级的工具(尽管它的名字如此,但它也可以监控 UDP 和 ICMP 流量),它会记录所有网络流量。

答案2

我还没有尝试过,但是您是否考虑过LOG在输出链上使用带有目标的 iptables?

类似以下内容(未经测试,但可以表达要点)。

iptables -I OUTPUT ! -i lo -p tcp --syn -j LOG --log-prefix 'New TCP'
iptables -I OUTPUT ! -i lo -p udp -m state --state NEW -j LOG --log-prefix 'New UDP'

这将为每个 TCP 连接记录一次,为每个新的 UDP 会话记录一次(不包括环回接口),这似乎大致就是您所要求的。然后,您可以查看grep系统日志,以了解已建立哪些传出连接。

但是,它不会(而且我认为普通的 iptables 也不能)告诉您哪个应用程序发起了连接,您将得到从中得到的日志很可能大部分都是无用的(因为建立的合法连接的数量肯定会使任何打电话回家的数量相形见绌)。

答案3

您需要监听超过 65000 个端口。只有防火墙的网络嗅探器才能做到这一点。只需为嗅探器或防火墙日志规则配置正确的过滤器(用于新连接请求)。

相关内容