我想知道我的服务器是否与远程服务器建立了连接,或者远程服务器是否尝试访问我的服务器。我尝试读取输出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)
我想知道此信息是否意味着我的服务器尝试连接,spe.cif.ic.IP
或者是否相反。
该标志是否->
相关,或者我应该使用不同的命令?
答案1
我认为线索就在端口号中,获取这两个条目
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 在端口 smtp(25) 上收到来自高端口号的连接,而 smtp 连接到远程端口 smtp(25) 并具有本地高端口号。
所以->
意味着连接到
答案2
至少在 Linux 上,无法告诉您哪一端发起了连接,因为它从无法获得该信息的位置lsof
获取列表。/proc/net/tcp
第一个地址总是指当地的端点。
该实用程序的最新版本ss
(使用不同的内核 API 来检索连接信息)-e
将为您提供指导,但不幸的是不适用于 TCP 连接。
作为@XTian 说,对于 TCP/SCTP/UDP,您通常可以猜测它是哪一个,因为连接发起方通常会使用高端口,而目标通常会是众所周知的低端口。但并不能保证。看机器还有或者没有倾听同一端口上的套接字也可以让您了解它的方向。例如,在您的情况下,您可能有一个进程在 port 上监听smtp/25
,但没有监听 port unknown/34434
。它不太可能fake.VVVVV.fr
启动到您计算机上端口 34434 的连接,尤其是使用源端口 25/smtp(不太可能,但完全有可能)。
为了更可靠,您可以查询连接跟踪器。
系统的防火墙连接跟踪器将跟踪发起连接的一端(或为无连接传输协议(如 UDP)发送第一个数据包)。您可以使用conntrack
命令行实用程序或类似 top 的命令来查询连接跟踪表iptstate
。
在那里,每行的第一个地址将是发起连接的地址。
请注意,它将包括所有跟踪的连接,因此也可能包括通过系统转发的连接,例如在路由器上。