我运行了这个命令netstat -apne --inet
除了 smtp、https、http 之外,我还打开了这些端口
tcp 0 0 xx.xx.xx.xx:48641 yyy.yyy.yyy.yyy:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:48643 yyy.yyy.yyy.yyy:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:49910 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:49911 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:49899 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:49902 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:49900 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
tcp 0 0 zzz.zzz.zzz.zzz:51950 zzz.zzz.zzz.zzz:80 TIME_WAIT 0 0 -
tcp 0 0 xx.xx.xx.xx:33003 zzz1.zzz1.zzz1.zzz1:80 TIME_WAIT 0 0 -
(服务器 ip = xx.xx.xx.xx,其他 ip 为 y、z)。
这些端口开放的目的是什么?
答案1
您没有将搜索限制在“监听”状态的端口/套接字上。请使用“-l”开关进行过滤。否则,netstat 还会列出您的计算机连接到另一台计算机的监听端口的连接。
tcp 0 0 xx.xx.xx.xx:49899 xx.xx.xx.xx:80 TIME_WAIT 0 0 -
其内容为:xx.xx.xx.xx:49899 (本地) 已连接到 xx.xx.xx.xx:80 (远程),并且连接处于 状态TIME_WAIT
。您关注的“开放”端口是处于 状态的端口LISTEN
,因此进程正在该端口上等待传入连接。
如果您以 root 身份运行 netstat 并使用-p
开关,它还将显示打开该连接的每个进程的进程 ID (PID) 和名称(除非,如您的示例中所示,连接处于状态TIME_WAIT
,因为在这种情况下它实际上已经关闭)。
答案2
这些端口只是与各种 Web 服务器(连接到远程端口 80)的连接的残留,这些连接已关闭,但会停留一段时间,以便它们能够响应远程服务器的通知,即它已成功关闭连接(如果它选择发送这样的响应)。请参阅http://developerweb.net/viewtopic.php?id=2941如果你关心血腥细节。
正如 barbaz 所说,这里最重要的是这些端口不处于侦听状态。它们不等待接受传入的连接请求,而是用于发起传出连接,并且将拒绝接受来自除它们打开连接的主机之外的任何远程主机的数据。