在 Linux 系统中,查看端口占用、监听状态等信息的常用命令有以下 8 个,涵盖不同场景需求:
最经典的网络状态命令,可查看端口监听、连接等信息(部分系统需单独安装)。常用参数:
-t:显示 TCP 端口
-u:显示 UDP 端口
-l:仅显示监听状态的端口
-n:以数字形式显示 IP 和端口(不解析域名)
-p:显示占用端口的进程 PID 和名称(需 root 权限)
示例:
ss 是 netstat 的替代工具,性能更好,支持更多过滤选项,推荐优先使用。常用参数:
-t/-u:同 netstat,分别对应 TCP/UDP
-l:监听状态
-n:数字形式显示
-p:显示进程信息
-a:显示所有连接(包括非监听状态)
示例:
lsof(list open files)可列出进程打开的文件,包括网络端口(Linux 中端口被视为特殊文件)。常用参数:
-i:仅显示网络相关的文件(即端口)
-i :端口号:过滤特定端口
-P:不解析端口名称(显示数字)
示例:
这是 netstat 的一个常用组合参数,直接显示所有监听的 TCP/UDP 端口及对应进程:
ss 的组合参数,-w 显示 RAW 协议端口,-n 数字形式,适合快速排查:
过滤出所有已建立的 TCP 连接(非监听状态,显示实际通信的端口):
netstat -antp | grep ESTABLISHED
ss 的高级过滤,查看与 80 端口相关的已建立连接(dport 目标端口,sport 源端口):
ss -o state established '( dport = :80 or sport = :80 )'
直接读取 Linux 内核维护的 TCP/UDP 连接信息(原始数据,需解析):
- 日常快速查看监听端口:优先用
ss -tlnp 或 sudo netstat -tlnp
- 查看特定端口的占用进程:
sudo lsof -i :端口号 或 ss -tlnp | grep 端口号
- 查看已建立的连接:
ss -tna 或 netstat -tna
根据系统版本和需求选择合适的命令,ss 和 lsof 功能更强大,是现代 Linux 系统的首选。
----------------------------------------------------------------------------
nmap(Network Mapper)是一款强大的网络扫描工具,不仅可以探测主机存活状态,还能详细扫描目标主机开放的端口、服务版本、操作系统等信息,是网络安全和端口排查的常用工具。
nmap 对端口的扫描能力非常灵活,支持多种扫描方式,可精准探测端口的开放状态(开放、关闭、过滤等),并识别端口上运行的服务。
- 示例:扫描
192.168.1.100 的常用端口
输出会显示开放的端口、协议(TCP/UDP)、服务名称(如 ssh、http)等。
通过 -p 参数指定单个或多个端口(TCP 端口默认,UDP 需加 -u):
使用 -T4 参数指定扫描速度(T0 最慢,T5 最快,T4 适合常规快速扫描):
nmap -T4 -p 1-1000 192.168.1.100
通过 -sV 参数探测开放端口上运行的服务版本(如 nginx 1.21.0、ssh OpenSSH 8.2):
nmap -sV -p 80,443 192.168.1.100
对某个网段(如 192.168.1.0/24)内所有主机的常用端口进行扫描:
nmap -p 80,22 192.168.1.0/24
使用 -sS(TCP SYN 扫描,半开放扫描),不建立完整连接,更隐蔽(需 root 权限):
sudo nmap -sS -p 1-1000 192.168.1.100
通过 -sA(TCP ACK 扫描)判断端口是否被防火墙过滤(开放 / 关闭 / 过滤):
sudo nmap -sA -p 80 192.168.1.100
通过 -v(详细)或 -vv(更详细)参数查看扫描过程和结果:
nmap -v -p 80-443 192.168.1.100
nmap 扫描后会返回端口的 6 种状态,核心状态如下:
- open:端口开放,有服务在监听并接受连接。
- closed:端口关闭,目标主机可达,但无服务监听该端口。
- filtered:端口被过滤,通常是防火墙阻止了扫描请求,无法确定是否开放。
- unfiltered:端口未被过滤,但无法确定是否开放(仅在特定扫描类型中出现)。
大部分 Linux 发行版可通过包管理器安装:
nmap 是端口扫描的 “瑞士军刀”,通过灵活的参数组合可满足不同场景需求:
- 快速查看目标端口开放状态:
nmap -T4 目标IP
- 精准探测服务版本:
nmap -sV -p 端口 目标IP
- 隐蔽扫描:
sudo nmap -sS 目标IP
使用时需注意:扫描非授权网络可能涉及法律风险,仅限合法授权的网络环境使用
----------------------------------------------------------------------------
nc(Netcat)是 Linux 系统中一款功能强大的网络工具,被称为 “网络瑞士军刀”,除了用于网络连接、文件传输外,也可实现简单的端口扫描功能。虽然其扫描能力不如 nmap 专业,但在没有 nmap 的环境下,nc 是一个便捷的替代方案。
nc 通过尝试与目标主机的指定端口建立连接,根据连接结果判断端口是否开放:
- 若连接成功(返回 0 状态码),说明端口开放。
- 若连接失败(返回非 0 状态码),说明端口关闭或被防火墙过滤。
- 参数说明:
-z:仅扫描端口,不发送数据(扫描模式)。
-v:显示详细输出(verbose 模式)。
- 示例:扫描
192.168.1.100 的 80 端口
- 成功输出(端口开放):
Connection to 192.168.1.100 80 port [tcp/http] succeeded!
- 失败输出(端口关闭):
nc: connect to 192.168.1.100 port 80 (tcp) failed: Connection refused
指定端口范围(用 - 分隔)或逗号分隔的多个端口:
添加 -u 参数扫描 UDP 端口(UDP 无连接,扫描速度较慢):
nc -zvu 192.168.1.100 53-161
结合 grep 过滤仅显示开放的端口,适合批量扫描:
nc -zv 192.168.1.100 1-1000 2>&1 | grep succeeded
2>&1:将错误输出重定向到标准输出,确保所有结果可被 grep 捕获。
grep succeeded:仅显示连接成功(端口开放)的结果。
结合 shell 循环扫描网段内所有主机的特定端口(如扫描 192.168.1.1-254 的 22 端口):
for ip in 192.168.1.{1..254}; do
nc -zv $ip 22 2>&1 | grep -q "succeeded" && echo "$ip: 22 端口开放"
done
- 脚本说明:遍历网段内的 IP,对每个 IP 的 22 端口进行扫描,若开放则输出提示。
添加 -w 参数设置超时时间(单位:秒),避免因目标无响应导致扫描卡顿:
nc -zv -w 2 192.168.1.100 1-1000
- 权限问题:部分端口(如 1-1024 特权端口)的扫描可能需要 root 权限(
sudo)。
- 防火墙影响:若目标主机开启防火墙,可能导致扫描结果显示为 “过滤”(无明确开放 / 关闭状态)。
- 合法性:扫描非授权网络或主机可能违反法律法规,仅限在自己管理的网络中使用。
nc 作为一款轻量网络工具,能满足基本的端口扫描需求,尤其适合临时快速检测端口开放状态。常用命令组合:
- 单个端口:
nc -zv 目标IP 端口
- 端口范围:
nc -zv 目标IP 起始端口-结束端口
- 过滤开放端口:
nc -zv 目标IP 端口范围 2>&1 | grep succeeded
对于复杂扫描场景(如服务版本识别、隐蔽扫描),仍推荐使用专业工具 nmap。
----------------------------------------------------------------------------
iptables 是 Linux 系统中用于配置 IPv4 防火墙规则的命令行工具,通过定义规则链(chain)和规则(rule)来控制网络数据包的进出。以下是 iptables 常用的查询和管理命令,帮助查看当前防火墙规则配置:
- 参数说明:
-L:列出指定链的规则(默认列出所有链)。
-n:以数字形式显示 IP 和端口(不解析域名和服务名,速度更快)。
-v:显示详细信息(包括数据包计数、字节数、接口等)。
Linux 防火墙有 5 个默认表(功能不同),常用的有:
filter:默认表,用于过滤数据包(最常用)。
nat:用于网络地址转换(如端口映射)。
mangle:用于修改数据包标记。
指定表查看:
每个表包含多个预定义链(chain),filter 表常用链:
INPUT:控制进入本机的数据包。
OUTPUT:控制本机发出的数据包。
FORWARD:控制经过本机转发的数据包(如路由器)。
查看指定链:
规则编号从 1 开始,删除或修改规则时需要用到:
使用 -S 参数以 “规则语句” 形式显示(更适合复制或修改规则):
规则中的 pkts(数据包数)和 bytes(字节数)表示该规则匹配到的流量,可用于排查规则是否生效:
sudo iptables-restore < /etc/iptables/rules.v4
-
查看所有开放的端口(允许进入的规则):
sudo iptables -t filter -L INPUT -n -v | grep ACCEPT
-
查看端口映射规则(nat 表):
sudo iptables -t nat -L PREROUTING -n -v
-
查看针对特定 IP 的规则:
sudo iptables -L -n -v | grep 192.168.1.100
-
查看针对特定端口的规则:
sudo iptables -L -n -v | grep 80
- 权限:
iptables 命令需要 root 权限,必须加 sudo 执行。
- 临时生效:直接执行
iptables 命令添加的规则在重启后会丢失,需用 iptables-save 保存。
- 默认策略:每个链有默认策略(
ACCEPT 或 DROP),表示未匹配任何规则时的处理方式,查询时会显示在链的顶部(如 Chain INPUT (policy ACCEPT))。
- 新版本工具:部分 Linux 发行版(如 CentOS 7+、Ubuntu 20.04+)默认使用
firewalld 或 ufw 管理防火墙,但若手动切换到 iptables,上述命令仍适用。
iptables 查询命令的核心是通过 -L(列出规则)、-t(指定表)、-n(数字显示)、-v(详细信息)等参数组合,快速定位所需规则。常用基础命令:
- 查看所有规则:
sudo iptables -L -n -v
- 查看 nat 表端口映射:
sudo iptables -t nat -L -n -v
- 查看规则编号:
sudo iptables -L INPUT --line-numbers -n
通过这些命令可以清晰了解当前防火墙的配置,为规则调整和网络排查提供依据。
----------------------------------------------------------------------------
ufw(Uncomplicated Firewall)是 Linux 系统中一款简化的防火墙管理工具,基于 iptables 封装,提供更简洁的命令行命令来管理防火墙规则。以下是使用 ufw 查看端口相关规则的常用命令:
- 输出示例(显示已启用的规则,包括端口、允许 / 拒绝状态、协议等):
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
- 若防火墙未启用,会显示
Status: inactive。
- 输出会增加更多细节,如规则编号、接口限制等:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
- 显示所有曾添加过的规则(无论是否启用),适合查看历史配置:
ufw allow 22/tcp
ufw allow 80/tcp
ufw deny 3306/tcp # 已添加但未启用的规则
结合 grep 过滤特定端口(如 80 端口):
sudo ufw status | grep 80
- 输出示例:
80/tcp ALLOW Anywhere
8080/tcp DENY Anywhere
指定协议类型过滤(如仅查看 TCP 端口):
sudo ufw status | grep tcp
每条规则都有唯一编号,修改或删除规则时需要用到:
- 输出示例(规则前的数字即为编号):
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
默认策略决定了未被明确规则匹配的流量如何处理(允许 / 拒绝):
- 输出中包含默认策略,例如:
*filter
:INPUT DROP [0:0] # 入站默认拒绝
:FORWARD DROP [0:0] # 转发默认拒绝
:OUTPUT ACCEPT [0:0] # 出站默认允许
...
-
检查 22 端口(SSH)是否允许访问:
sudo ufw status | grep 22
-
查看所有允许外部访问的端口:
sudo ufw status | grep ALLOW
-
确认防火墙是否阻止了某个端口(如 3306 MySQL):
sudo ufw status | grep 3306
ufw 查看端口规则的核心命令是 sudo ufw status,通过添加参数或结合 grep 实现更精准的查询:
- 基础状态:
sudo ufw status
- 详细信息:
sudo ufw status verbose
- 规则编号:
sudo ufw status numbered
- 过滤端口:
sudo ufw status | grep 端口号
ufw 命令简洁直观,适合快速查看和管理防火墙端口规则,尤其适合对 iptables 不熟悉的用户。
----------------------------------------------------------------------------
firewalld 是 Linux 系统(如 CentOS 7+、Fedora、RHEL 7+)默认的动态防火墙管理工具,替代了传统的 iptables 服务,支持网络区域(zone)、服务(service)和端口的动态管理,无需重启服务即可使规则生效。以下是 firewalld 常用命令:
sudo firewall-cmd --state
- 输出:
running(运行中)或 not running(未运行)。
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --list-all
- 输出包含默认区域的允许端口、服务、源地址等信息,例如:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http
ports: 8080/tcp 3306/udp
protocols:
forward: no
masquerade: no
...
sudo firewall-cmd --list-all-zones
sudo firewall-cmd --zone=public --list-all
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-services
在临时命令基础上添加 --permanent 参数:
sudo firewall-cmd --add-port=8080/tcp --permanent
服务是预定义的端口集合(如 ssh 对应 22/tcp,http 对应 80/tcp),方便批量管理。
sudo firewall-cmd --get-services
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
firewalld 通过 “区域” 对不同网络环境(如公共网络、家庭网络)设置不同规则,默认区域为 public。
sudo firewall-cmd --get-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --set-default-zone=home
sudo firewall-cmd --zone=public --add-interface=eth0 --permanent
sudo firewall-cmd --reload
将外部端口转发到内部端口(如将 80 端口转发到 8080):
firewalld 命令的核心是通过区域管理端口和服务,常用操作:
- 查看状态与规则:
sudo firewall-cmd --list-all
- 开放端口:
sudo firewall-cmd --add-port=端口/协议 --permanent && sudo firewall-cmd --reload
- 允许服务:
sudo firewall-cmd --add-service=服务名 --permanent && sudo firewall-cmd --reload
相比传统 iptables,firewalld 更易用,适合动态调整防火墙规则,无需重启服务即可生效。
----------------------------------------------------------------------------