我想知道我的服务器是否与远程服务器建立了连接,或者远程服务器是否尝试访问我的服务器。我试图阅读输出lsof
并获取以下信息:
lsof -i TCP:25
USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 2657 root 12u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 9u IPv4 35762406 0t0 TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp 13007 postfix 13u IPv4 35762309 0t0 TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
smtpd 14188 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 14188 postfix 9u IPv4 35748921 0t0 TCP hostname:smtp->XX.XX.XX.XX:55912 (ESTABLISHED)
smtpd 14897 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
Run Code Online (Sandbox Code Playgroud)
我想知道此信息是否意味着我的服务器尝试连接,spe.cif.ic.IP
或者是否相反。
符号是否->
相关,还是我应该使用不同的命令?
我认为线索在端口号中,取这两个条目
smtpd 12950 postfix 9u IPv4 35762406 0t0 TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp 13007 postfix 13u IPv4 35762309 0t0 TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
Run Code Online (Sandbox Code Playgroud)
smtpd 已在端口 smtp(25) 上收到来自高端口号的连接,而 smtp 连接到远程端口 smtp(25) 并具有本地高端口号。
所以->
意味着连接到
至少在 Linux 上,lsof
无法告诉您哪一端发起了连接,因为它从/proc/net/tcp
该信息不可用的地方获取列表。第一个地址总是指本地端点。
该ss
实用程序的最新版本(使用不同的内核 API 来检索连接信息),带有-e
,将为您提供指导,但不幸的是不适用于 TCP 连接。
正如@XTian 所说,对于 TCP/SCTP/UDP,您通常可以猜测它是哪个,因为连接发起者通常会使用高端口,而目标通常是众所周知的低端口。然而,没有任何保证。看到机器在同一端口上也有或没有侦听套接字也可以让您确定它是哪个方向。例如,在您的情况下,您可能有一个进程侦听 portsmtp/25
但没有侦听port unknown/34434
。不太可能fake.VVVVV.fr
在您的机器上启动到端口 34434 的连接,尤其是使用源端口 25/smtp(不太可能但完全可能)。
对于更可靠的东西,您可以查询连接跟踪器。
系统的防火墙连接跟踪器将跟踪发起连接的一端(或为无连接传输协议(如 UDP)发送第一个数据包)。您可以使用conntrack
命令行实用程序或iptstate
类似 top 的命令查询连接跟踪表。
在那里,每行的第一个地址将是发起连接的地址。
请注意,它将包括所有跟踪的连接,因此可能还包括通过系统转发的连接,例如在路由器上。