netstat命令查看和检查系统端口

netstat命令使用介绍

netstat 命令通常是用来监控 TCP/IP 网络的工具,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。如果需要了解当前系统开放了哪些端口,及这些端口的关联进程和用户,可以通过 netstat 命令进行查询。此处介绍了 netstat 命令的语法和参数,步骤如下。

命令参数

参数说明如下。

  • -a--all:显示所有连接中的Socket。
  • -A:列出该网络类型连接中的相关地址。
  • -c--continuous:持续列出网络状态。
  • -C--cache:显示路由器配置的缓存信息。
  • -e--extend:显示额外的网络相关信息。
  • -t:仅显示TCP端口。
  • -u:仅显示UDP端口。
  • -l:仅显示监听套接字。
  • -p:显示进程标识符和程序名称,每一个套接字或端口都属于一个程序。
  • -n:不进行DNS轮显示IP,可以加速操作。
  • --help:命令用法帮助。

    netstat 命令常用的命令组合

    通常结合 grepwcsort 等命令来分析系统连接情况和连接数状态,可以判断服务器是否被攻击,命令组合使用介绍参考如下。
    显示所有活动的网络连接:
    1. $ netstat -na
    显示所有指定端口的网络连接并排序。如果该指定端口被 Web 服务进程监听,就可以通过查看该指定端口监控 Web 服务。如果看到同一个 IP 有大量连接,则判定该 IP 疑似存在单点流量攻击行为:
    1. $ netstat -an | grep :[$Port] | sort

    注:[$Port]为 Linux 系统指定的端口号。

统计当前服务器有多少个活动的指定服务连接数。正常来说这会很小,一般小于 5。在遭受 DDoS 攻击时,会造成该值会很高,但是该值并不能用来判断是否遭受 DDoS 攻击,因为在高并发服务器上,该值也会很高:

  1. $ netstat -n -p|grep [$Server] | wc -l

注:[$Server]指需要查看的服务名或进程名。

列出所有与指定服务,连接点连接过的IP地址:

  1. $ netstat -n -p | grep [$Server] | sort -u

列出所有发送指定服务连接点的IP地址:

  1. $ netstat -n -p | grep [$Server] | awk '{print $5}' | awk -F: '{print $1}'

统计所有连接到本机的IP地址:

  1. $ netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

统计所有 TCP 和 UDP 连接到本机的 IP 和连接次数:

  1. $ netstat -anp | egrep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

检查 ESTABLISHED 连接并且统计出每个 IP 地址的连接次数:

  1. $ netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

统计出连接到指定端口的 IP 地址连接次数,并列出排名前 10 的 IP 地址信息和该 IP 地址的连接次数。如果有单个 IP 地址存在大量连接,则判断为该 IP 地址是单点流量攻击行为:

  1. $ netstat -antp |awk '/ {print $4" "$5}'|awk '{print $2}'|awk -F : {'print $1'}|uniq -c|sort -nr|head -n 10

netstat 命令处理端口占用

根据对应的端口号,查找出对应端口号占用的进程信息:

  1. $ netstat -antp | grep [$Port]

根据以上步骤获取的进程 ID 号,结束指定进程,解决端口占用问题:

注:[$PID]为上一步获取到的指定端口 PID 进程号。

  1. $ kill -9 [$PID]