Linux 查看监听端口的方法

================================================================= 
如果只想查特定端口的监听如80端口,则 

netstat -anp|grep 80 


================================================================= 

配置了网络服务之后,关注一下哪些端口在监听系统的网络接口这一点很重要。任何打开的端口都可能是入侵的证明。 

要列举正在监听网络的端口,有两种基本方法。一种不太可靠的方法是通过键入 netstat -an 或 lsof -i 之类的命令来查询网络堆栈。这种方法之所以不太可靠是因为这些程序不连接网络上的机器,而是查看系统上在运行什么。因此,它们频繁成为攻击者的替换目标。怪客在打开了未经授权的网络端口后,就以这种方法来企图掩盖他们的踪迹。 

更可靠的方法是使用 nmap 之类的端口扫描器来检查哪些端口正在监听网络。 

以下从控制台发出的命令会判定哪些端口在监听来自网络上的 TCP 连接: 

    nmap -sT -O localhost 

该命令的输出和以下相似: 

    Starting nmap V. 3.00 ( www.insecure.org/nmap/ ) Interesting ports on localhost.localdomain (127.0.0.1): (The 1596 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 515/tcp open printer 834/tcp open unknown 6000/tcp open X11 Remote OS guesses: Linux Kernel 2.4.0 or Gentoo 1.2 Linux 2.4.19 rc1-rc7) 

    Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds 


该输出显示了由于 sunrpc 服务的存在,系统正在运行 portmap。然而,端口834上还有一个神秘服务。要查看一下该端口是否和任何已知服务相关,键入: 

    cat /etc/services | grep 834 

该命令没有返回任何输出。这表明虽然该端口是在保留范围内(即从0到1023内),并且需要根权限才能打开,它并没有关联任何已知服务。 

下一步,检查使用 netstat 或 lsof 的端口的信息。要使用 netstat 检查端口834,使用以下命令: 

    netstat -anp | grep 834 

该命令返回以下输出: 

    tcp 0 0 0.0.0.0:834 0.0.0.0:* LISTEN 653/ypbind 

这个开放端口在 netstat 中存在,这一点比较令人安慰,因为如果怪客在被攻击的系统上暗中打开一个端口,他们很可能不会让这个端口使用该命令被暴露出来。还有,[p] 选项揭示了打开这个端口的进程 id(PID)。在这个例子中,被打开的端口属于 ypbind(NIS),这是和 portmap 服务一起进行的 RPC 服务。 

lsof 命令揭示了相似的信息,因为它也能够链接开放端口和服务: 

    lsof -i | grep 834 

以下是这个命令中和讨论有关的输出部分: 

ypbind 653 0 7u IPv4 1319 TCP *:834 (LISTEN) 
ypbind 655 0 7u IPv4 1319 TCP *:834 (LISTEN) 
ypbind 656 0 7u IPv4 1319 TCP *:834 (LISTEN) 
ypbind 657 0 7u IPv4 1319 TCP *:834 (LISTEN) 

这些工具揭示了大量关于运行在机器上的服务状态的信息。它们很灵活,能够提供关于网络服务和配置的许多信息。强烈推荐你阅读 lsof、netstat、nmap 和 services 的说明书页。 

-The End- 
===================================== 


netstat 的常用参数: - t、- u、- w和- x分别表示TCP、UDP、RAW和UNIX套接字连接。-a标记,还会显示出等待连接(也就是说处于监听模式)的套接字。-l 显示正在被监听(listen)的端口, -n表示直接显示端口数字而不是通过察看/etc/service来转换为端口名,-p选项表示列出监听的程序 

1) netstat -tl 
查看当前tcp监听端口 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 *:rrac                  *:*                     LISTEN     
tcp        0      0 *:34006                 *:*                     LISTEN     
...... 

2) netstat -tlp 
查看当前tcp监听端口, 需要显示监听的程序名,当不清楚mysql的监听端口时比较好用 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 *:rrac                  *:*                     LISTEN      -                         
tcp        0      0 *:34006                 *:*                     LISTEN      23425/mysqld  
...... 


3) netstat -tl | grep 34006 
    只查看mysql的监听端口,当前启动的mysql端口为34006,明确知道mysql监听端口时使用 
4) netstat -ta | grep 34006 
tcp        0      0 *:34006                 *:*                     LISTEN     
tcp        0      0 linux.local:34006       linux.local:41485       ESTABLISHED 
tcp        0      0 linux.local:34006       linux.local:41486       ESTABLISHED 
... 
tcp        0      0 10.3.2.35:41488         10.3.2.35:34006         ESTABLISHED 
tcp        0      0 10.3.2.35:41489         10.3.2.35:34006         ESTABLISHED 
tcp        0      0 10.3.2.35:41490         10.3.2.35:34006         ESTABLISHED 

由于数据库和运用程序都放在同一台机器了,因此这里连接被显示了两次. 可以使用-p参数来显示PID,然后grep PID.


5) netstat -tap | grep 34006 | grep 23425 
    23425是当前mysql的PID 
tcp        0      0 *:34006                 *:*                     LISTEN      23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41510       ESTABLISHED 23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41511       ESTABLISHED 23425/mysqld       
tcp        0      0 linux.local:34006       linux.local:41516       ESTABLISHED 23425/mysqld 

你可能感兴趣的:(Linux)