Netstat是一个用于显示网络连接、路由表、接口统计等网络相关信息的命令。常用参数包括-a、-t、-u、-n、-l等,分别用于显示所有连接、TCP或UDP连接、不转换域名、只显示监听状态的服务。通过-PID和程序名可以查看哪个进程占用了特定端口,而-l选项则用于列出所有监听状态的Socket。
一、安装
yum install net-tools -y
二、netstat 参数
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
三、常用的netstat命令
1. 查询进程号所占用的端口号: netstat -anp | grep 进程号
2. 查看端口号对应的进程,用于排查端口号是否被占用:netstat -tunlp | grep 端口号
3. 查看端口号的使用情况:netstat -anp | grep 端口号
4. 显示pid和进程:netstat -pt
5. 列出所有处于监听状态的 Sockets:
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
6 列出所有端口 (包括监听和未监听的)
列出所有端口 netstat -a
列出所有 tcp 端口 netstat -at
列出所有 udp 端口 netstat -au
7 列出所有处于监听状态的 Sockets
只显示监听端口 netstat -l
只列出所有监听 tcp 端口 netstat -lt
只列出所有监听 udp 端口 netstat -lu
只列出所有监听 UNIX 端口 netstat -lx
8 显示每个协议的统计信息
显示所有端口的统计信息 netstat -s
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
9 在 netstat 输出中显示 PID 和进程名称 netstat-p
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中, 这样 debugging 的时候可以很方便的发现特定端口运行的程序。
10 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
# netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users
11 持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
# netstat -c
12 显示系统不支持的地址族 (Address Families)
netstat --verbose
13 显示核心路由信息 netstat -r
# netstat -r
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
14 统计tcp数量监听的数量
# netstat -ant | wc -l
15 找出程序运行的端口
# netstat -ap | grep ':80'
[root@localhost ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
80.80.80.0 0.0.0.0 255.255.255.0 U 0 0 0 eth8
10.228.90.0 0.0.0.0 255.255.255.0 U 0 0 0 eth9
1.1.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth8
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth9
10.0.0.0 10.228.90.1 255.0.0.0 UG 0 0 0 eth9
0.0.0.0 1.1.0.3 0.0.0.0 UG 0 0 0 tap0
表头说明:
Destination:目标网络或者主机。
Gateway:网关地址,如果没有设置则为*。
Genmask:目标网络掩码;如果默认路由则用"0.0.0.0"。
Flags标志说明:
U Up表示此路由当前为启动状态
H Host,表示此网关为一主机
G Gateway,表示此网关为一路由器
R Reinstate Route,使用动态路由重新初始化的路由
D Dynamically,此路由是动态性地写入
M Modified,此路由是由路由守护程序或导向器动态修改! 表示此路由当前为关闭状态
Iface:对于这个路由,数据包将要发送到那个接口(网卡)。
3.9 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh
找出运行在指定端口的进程
# netstat -an | grep ':80'
3.10 显示网络接口列表
# netstat -i
显示详细信息,像是ifconfig 使用 netstat-ie
[root@localhost ~]# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth8 1500 0 9150807 0 0 0 128 0 0 0 BMRU
eth9 1500 0 9297220 0 0 0 144187 0 0 0 BMRU
eth12 1500 0 294871 0 0 0 6 0 0 0 BMRU
eth13 1500 0 0 0 0 0 6 0 0 0 BMRU
lo 16436 0 95290843 0 0 0 95290843 0 0 0 LRU
tap0 1500 0 0 0 0 0 48 0 0 0 BRU
tap0:1 1500 0 - no statistics available - BRU
说明:
MTU和Met字段表示的是接口的MTU和度量值值;RX和TX这两列表示的是已经准确无误地收发了多少数据包( RX - OK / TX - OK)、产生了多少错误( RX-ERR/TX-ERR)、丢弃了多少包(RX-DRP/TX-DRP),由于误差而遗失了多少包(RX-OVR/TX-OVR);最后一列展示的是为这个接口设置的标记,在利用ifconfig显示接口配置时,这些标记都采用一个字母。它们的说明如下:
B 已经设置了一个广播地址。
L 该接口是一个回送设备。
M 接收所有数据包(混乱模式)。
N 避免跟踪。
O 在该接口上,禁用A R P。
P 这是一个点到点链接。
R 接口正在运行。
U 接口处于“活动”状态。