#####netstat命令在面试以及日常开发使用中都会经常出现,所以特地小结一波;首先要知道Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 ,连接,多播成员等等。
####常见参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
####例出当前所有的tcp链接
#####(所有的信息为参数-a,关于tcp的链接信息为-t)
root@ubuntu:/home/suhw# netstat -a
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ubuntu:domain *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 192.168.101.137:ssh 192.168.101.1:9139 ESTABLISHED
tcp 0 0 192.168.101.137:ssh 192.168.101.1:10056 ESTABLISHED
tcp 0 0 192.168.101.144:ssh 192.168.101.1:11414 ESTABLISHED
tcp6 0 0 [::]:mysql [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
......
####例出所有的udp链接,并且禁止反向域名解析
#####想查看tcp相关的就将u更改为t即可
root@ubuntu:/home/suhw# netstat -aun
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:42000 0.0.0.0:*
udp 0 0 0.0.0.0:38453 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:631 0.0.0.0:*
udp6 0 0 :::5353 :::*
udp6 0 0 :::60305 :::*
####列出正在监听的连接
root@ubuntu:/home/suhw# 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:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
####获取正在连接的进程名、进程号
root@ubuntu:/home/suhw# netstat -tlnp
激活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 2759/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 945/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2118/cupsd
tcp6 0 0 :::3306 :::* LISTEN 967/mysqld
tcp6 0 0 :::22 :::* LISTEN 945/sshd
tcp6 0 0 ::1:631 :::* LISTEN 2118/cupsd
(主要的是要加上-p参数,即可打印出对应的PID以及进程名,再加上-e选项还可查看对应的用户名)
####查看每个协议的统计信息:
root@ubuntu:/home/suhw# netstat -s
Ip:
80713 total packets received
7 with invalid addresses
0 forwarded
0 incoming packets discarded
80706 incoming packets delivered
83232 requests sent out
4043 outgoing packets dropped
9 dropped because of missing route
Icmp:
10635 ICMP messages received
0 input ICMP message failed.
ICMP接收历史
destination unreachable: 10633
echo requests: 2
10635 ICMP messages sent
0 ICMP messages failed
ICMP发出历史
destination unreachable: 10633
echo replies: 2
......
#####若查询tcp协议相关的信息,加上-t即可。
####每隔n秒输出一次netstat信息:
root@ubuntu:/home/suhw# netstat -c 3
激活Internet连接 (w/o 服务器)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.101.137:ssh 192.168.101.1:6334 ESTABLISHED
tcp 0 0 192.168.101.137:ssh 192.168.101.1:9139 ESTABLISHED
tcp 0 0 192.168.101.137:ssh 192.168.101.1:10056 ESTABLISHED
活跃的UNIX域套接字 (w/o 服务器)
Proto RefCnt Flags Type State I-Node 路径
unix 7 [ ] 数据报 14849 /run/systemd/journal/socket
unix 2 [ ] 数据报 23699 /run/user/1000/systemd/notify
unix 3 [ ] 数据报 14830 /run/systemd/notify
unix 2 [ ] 数据报 14840 /run/systemd/journal/syslog
unix 22 [ ] 数据报 14845 /run/systemd/journal/dev-log
......
####查出对应进程的端口号
#####过滤信息就需要配合grep,假设我们要查看mysqld的端口号:
root@ubuntu:/home/suhw# netstat -apn | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 967/mysqld
unix 2 [ ACC ] 流 LISTENING 20960 967/mysqld /var/run/mysqld/mysqld.sock
root@ubuntu:/home/suhw# netstat -apn | head -n2
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
#####通过grep过滤后可以看出mysqld所占用的端口号为3306
####查出对应端口号的进程
#####和上一个例子相同,这次我们查看3306端口被哪个进程所占用:注意筛选条件为grep ‘:xxx’
root@ubuntu:/home/suhw# netstat -apn | grep ':3306'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN 967/mysqld
####显示内核路由表信息
root@ubuntu:/home/suhw# netstat -r
内核 IP 路由表
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.101.2 0.0.0.0 UG 0 0 0 ens33
link-local * 255.255.0.0 U 0 0 0 ens33
192.168.101.0 * 255.255.255.0 U 0 0 0 ens33
#####还有一些其他的参数可通过netstat --help查看并自己尝试,需要注意的就是在使用中常常是伴随着grep的使用以及多个参数 之间的配合最终才能筛选出符合条件的信息。