Linux技术——netstat命令详解
简介:
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。
netstat - 打印网络连接、路由表、连接的数据统计、伪装连接以及广播域成员。
常见参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
1、列出所有的连接
netstat -a
-a选项会列出tcp,udp和unix协议下所有套接字的连接。但是我们一般只是想查找某个协议或某个端口的具体连接情况。
-a选项会列出tcp,udp和unix协议下所有套接字的连接。但是我们一般只是想查找某个协议或某个端口的具体连接情况。
2、只列出TCP或UDP协议的连接
用-t选项列出TCP协议的连接
- [email protected]_ever:~# netstat -at
- **Internet连接 (服务器和已建立连接的)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 yxk:domain *:* LISTEN
- tcp 0 0 *:ftp *:* LISTEN
- tcp 0 0 *:ssh *:* LISTEN
- tcp 0 0 localhost:ipp *:* LISTEN
- tcp 0 0 *:telnet *:* LISTEN
- tcp 0 0 *:echo *:* LISTEN
- tcp 0 0 localhost:mysql *:* LISTEN
- tcp 0 0 *:daytime *:* LISTEN
- tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
- tcp6 0 0 [::]:ssh [::]:* LISTEN
- tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
- tcp6 0 0 [::]:3128 [::]:* LISTEN
- tcp6 0 0 [::]:http [::]:* LISTEN
- tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
- tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
用-u选项列出UDP协议的连接
- [email protected]_ever:~# netstat -au
- **Internet连接 (服务器和已建立连接的)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- udp 0 0 *:ipp *:*
- udp 0 0 *:mdns *:*
- udp 0 0 *:46678 *:*
- udp 0 0 *:51196 *:*
- udp 0 0 yxk:domain *:*
- udp 0 0 *:bootpc *:*
- udp 0 0 *:59784 *:*
- udp6 0 0 [::]:49703 [::]:*
- udp6 0 0 [::]:56256 [::]:*
- udp6 0 0 ip6-localhost:56355 ip6-localhost:42658 ESTABLISHED
- udp6 0 0 [::]:mdns [::]:*
- udp6 0 0 ip6-localhost:42658 ip6-localhost:56355 ESTABLISHED
- udp6 0 0 [::]:36927 [::]:*
3. 禁用反向域名解析,加快查询速度
默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能。- [email protected]_ever:~# netstat -ant
- **Internet连接 (服务器和已建立连接的)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN
- tcp 0 0 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED
- tcp6 0 0 :::22 :::* LISTEN
- tcp6 0 0 ::1:631 :::* LISTEN
- tcp6 0 0 :::3128 :::* LISTEN
- tcp6 0 0 :::80 :::* LISTEN
- tcp6 1 0 ::1:53757 ::1:631 CLOSE_WAIT
- tcp6 1 0 ::1:53820 ::1:631 CLOSE_WAIT
tcp 0 0 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED 是用ssh协议登录到主机的,所以可以看到这是建立的一条tcp连接。
- [email protected]_ever:~# netstat -tnl
- **Internet连接 (仅服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
- tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN
- tcp6 0 0 :::22 :::* LISTEN
- tcp6 0 0 ::1:631 :::* LISTEN
- tcp6 0 0 :::3128 :::* LISTEN
- tcp6 0 0 :::80 :::* LISTEN
现在我们可以看到处于监听状态的 TCP 端口和连接。如果你查看所有监听端口,去掉 -t 选项。如果你只想查看 UDP 端口,使用 -u 选项,代替 -t 选项。
- [email protected]_ever:~# netstat -unl
- **Internet连接 (仅服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- udp 0 0 0.0.0.0:631 0.0.0.0:*
- udp 0 0 0.0.0.0:5353 0.0.0.0:*
- udp 0 0 0.0.0.0:46678 0.0.0.0:*
- udp 0 0 0.0.0.0:51196 0.0.0.0:*
- udp 0 0 127.0.1.1:53 0.0.0.0:*
- udp 0 0 0.0.0.0:68 0.0.0.0:*
- udp 0 0 0.0.0.0:59784 0.0.0.0:*
- udp6 0 0 :::49703 :::*
- udp6 0 0 :::56256 :::*
- udp6 0 0 :::5353 :::*
- udp6 0 0 :::36927 :::*
5. 获取进程名、进程号以及用户ID
查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个例子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。使用 -p 选项查看进程信息。
- [email protected]_ever:~# netstat -tnlp
- **Internet连接 (仅服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1112/dnsmasq
- tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 826/vsftpd
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 813/sshd
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3517/cupsd
- tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 815/xinetd
- tcp 0 0 0.0.0.0:7 0.0.0.0:* LISTEN 815/xinetd
- tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 933/mysqld
- tcp 0 0 0.0.0.0:13 0.0.0.0:* LISTEN 815/xinetd
- tcp6 0 0 :::22 :::* LISTEN 813/sshd
- tcp6 0 0 ::1:631 :::* LISTEN 3517/cupsd
- tcp6 0 0 :::3128 :::* LISTEN 945/squid3
- tcp6 0 0 :::80 :::* LISTEN 1158/apache2
相比进程名和进程号而言,查看进程的拥有者会更有用。使用 -ep 选项可以同时查看进程名和用户名。
- [email protected]_ever:~# netstat -ltep
- **Internet连接 (仅服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
- tcp 0 0 yxk:domain *:* LISTEN root 10511 1112/dnsmasq
- tcp 0 0 *:ftp *:* LISTEN root 8890 826/vsftpd
- tcp 0 0 *:ssh *:* LISTEN root 9398 813/sshd
- tcp 0 0 localhost:ipp *:* LISTEN root 19363 3517/cupsd
- tcp 0 0 *:telnet *:* LISTEN root 9559 815/xinetd
- tcp 0 0 *:echo *:* LISTEN root 9558 815/xinetd
- tcp 0 0 localhost:mysql *:* LISTEN mysql 10645 933/mysqld
- tcp 0 0 *:daytime *:* LISTEN root 9557 815/xinetd
- tcp6 0 0 [::]:ssh [::]:* LISTEN root 9400 813/sshd
- tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 19362 3517/cupsd
- tcp6 0 0 [::]:3128 [::]:* LISTEN root 200066 945/squid3
- tcp6 0 0 [::]:http [::]:* LISTEN root 10582 1158/apache2
上面列出 TCP 协议下的监听套接字,同时显示进程信息和一些额外信息。这些额外的信息包括用户名和进程的索引节点号。这个命令对网管来说很有用。
- [email protected]_ever:~# netstat -s
- Ip:
- 共计收到421162个数据包
- 0 已转发
- 0 incoming packets discarded
- 419945 incoming packets delivered
- 245868请求已发出
- 436 发出的报被抛弃
- 127 被抛弃,因为没有路由
- Icmp:
- 6202 ICMP messages received
- 18 input ICMP message failed.
- InCsumErrors: 18
- ICMP接收历史
- 目的地址不可达:6117
- echo requests: 36
- echo replies: 31
- 6296 ICMP messages sent
- 0 ICMP messages failed
- ICMP发出历史
- 目的地址不可达:6229
- echo request: 31
- echo replies: 36
比如:
- [email protected]_ever:~# netstat -su
- IcmpMsg:
- InType0: 31
- InType3: 6117
- InType8: 36
- OutType0: 36
- OutType3: 6229
- OutType8: 31
- Udp:
- 22928 packets received
- 6226 packets to unknown port received.
- 0 packet receive errors
- 24063 packets sent
- UdpLite:
- IpExt:
- InNoRoutes: 107
- InMcastPkts: 17763
- OutMcastPkts: 1007
- InBcastPkts: 181400
- InOctets: 87091549
- OutOctets: 93256156
- InMcastOctets: 1948386
- OutMcastOctets: 129620
- InBcastOctets: 15828501
- InNoECTPkts: 443329
7. 显示内核路由信息
使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 -n 选项禁止域名解析。- [email protected]_ever:~# netstat -rn
- 内核 IP 路由表
- Destination Gateway Genmask Flags MSS Window irtt Iface
- 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8. 打印网络接口
netstat 也能打印网络接口信息,-i 选项就是为这个功能而生。- [email protected]_ever:~# 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
- eth0 1500 0 434501 0 0 0 222915 0 0 0 BMRU
- lo 65536 0 36530 0 0 0 36530 0 0 0 LRU
- [email protected]_ever:~# netstat -ie
- Kernel Interface table
- eth0 Link encap:以太网 硬件地址 08:00:27:23:9c:b4
- inet 地址:192.168.56.101 广播:192.168.56.255 掩码:255.255.255.0
- inet6 地址: fe80::a00:27ff:fe23:9cb4/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
- 接收数据包:434595 错误:0 丢弃:0 过载:0 帧数:0
- 发送数据包:222934 错误:0 丢弃:0 过载:0 载波:0
- 碰撞:0 发送队列长度:1000
- 接收字节:93754320 (93.7 MB) 发送字节:95995756 (95.9 MB)
- lo Link encap:本地环回
- inet 地址:127.0.0.1 掩码:255.0.0.0
- inet6 地址: ::1/128 Scope:Host
- UP LOOPBACK RUNNING MTU:65536 跃点数:1
- 接收数据包:36536 错误:0 丢弃:0 过载:0 帧数:0
- 发送数据包:36536 错误:0 丢弃:0 过载:0 载波:0
- 碰撞:0 发送队列长度:0
- 接收字节:2911517 (2.9 MB) 发送字节:2911517 (2.9 MB)
9. netstat 持续输出
我们可以使用 netstat 的 -c 选项持续输出信息。比如 netstat -ct 这个命令可持续输出 TCP 协议信息。会持续输出下面的内容。
- [email protected]_ever:~# netstat -ct
- **Internet连接 (w/o 服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
- tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
- tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
- **Internet连接 (w/o 服务器)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 192.168.56.101:ssh 192.168.56.1:46119 ESTABLISHED
- tcp6 1 0 ip6-localhost:53757 ip6-localhost:ipp CLOSE_WAIT
- tcp6 1 0 ip6-localhost:53820 ip6-localhost:ipp CLOSE_WAIT
10. 显示多播组信息
选项 -g 会输出 IPv4 和 IPv6 的多播组信息。
- [email protected]_ever:~# netstat -g
- IPv6/IPv4 Group Memberships
- Interface RefCnt Group
- --------------- ------ ---------------------
- lo 1 224.0.0.1
- eth0 1 224.0.0.251
- eth0 1 224.0.0.1
- lo 1 ip6-allnodes
- getnameinfo failed
- lo 1 [未知]
- getnameinfo failed
- eth0 1 [未知]
- getnameinfo failed
- eth0 1 [未知]
- eth0 1 ip6-allnodes
- getnameinfo failed
- eth0 1 [未知]
11、打印 active 状态的连接
active 状态的套接字连接用 "ESTABLISHED" 字段表示,所以我们可以使用 grep 命令获得 active 状态的连接:- [email protected]_ever:~# netstat -atnp | grep ESTA
- tcp 0 52 192.168.56.101:22 192.168.56.1:46119 ESTABLISHED 10964/1
$ watch -d -n0 "netstat -atnp | grep ESTA"
- [email protected]_ever:~# netstat -aple | grep http
- tcp6 0 0 [::]:http [::]:* LISTEN root 10582 1158/apache2
相关推荐
- 第五章 Linux 基础命令(带图详解)
- linux TOP命令各参数详解【转载】
- linux TOP命令各参数详解【转载】
- Linux TOP各参数命令详解(转载)
- Linux常用命令之文件压缩与解压缩命令详解
- 【Linux基础】VIM编辑器常用命令详解(基础篇)
- LinuxStudyNote(31)-Linux常用命令(7)-网络命令(2)traceroute、netstat
- linux 网络检测命令详解 ping nslookup tracert mtr
- Linux命令详解:ping 和 traceroute命令
- Linux管理输入输出及vim命令详解
- Linux内核编译——Uboot
- linux的netstat命令详解