Linux的netstat命令使用(一)

如何查看占用某个端口的程序的pid?

netstat -tunlp
netstat -tunlp | grep 80
netstat -anp
​
# -t 显示tcp相关选项
# -u 显示udp相关选项
# -n 能显示数字的全部显示数字,ip地址
# -p 显示建立链接的程序名

TCP连接状态详解

  • LISTEN:侦听来自远方的TCP端口的连接请求
  • SYN-SENT:再发送连接请求后等待匹配的连接请求
  • SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
  • ESTABLISHED:代表一个打开的连接
  • FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
  • FIN-WAIT-2:从远程TCP等待连接中断请求
  • CLOSE-WAIT:等待从本地用户发来的连接中断请求
  • CLOSING:等待远程TCP对连接中断的确认
  • LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
  • TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
  • CLOSED:没有任何连接状态
  • SYN_RECV表示正在等待处理的请求数;
  • ESTABLISHED表示正常数据传输状态;
  • TIME_WAIT表示处理完毕,等待超时结束的请求数。

扩展


# 找出程序运行的端口
netstat -ap | grep ssh
# 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

# 找出运行在指定端口的进程
netstat -an | grep ':80'

# 统计80端口连接数 :
netstat -nat | grep -i "80" | wc -l

# 统计已连接上的,状态为“established
netstat -anp | grep ESTABLISHED | wc -l

常用1

# 查出哪个IP地址连接最多
netstat -anp | grep ESTABLISHED | awk {print $5}|awk -F: {print $1} | sort | uniq -c | sort -r +0n

# 对连接的IP按连接数量进行排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

# 查看80端口连接数最多的20个IP
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

# 哪些IP连接到服务器连接多
netstat -an|awk -F: '{print $2}'|sort|uniq -c|sort -nr|head

# 列出所有连接到本机80端口的IP地址和其连接数
netstat -plan|grep :80|awk '{print $5}'|cut -d: -f 1|sort|uniq -c|sort -nk 1

# 显示连接80 端口前10的ip,并显示每个IP的连接数
netstat -antp | awk '$4 ~ /:80$/ {print $4" "$5}' | awk '{print $2}'|awk -F : {'print $1'} | uniq -c | sort -nr | head -n 10

# web服务器并发连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(key in S) print key,"\t",S[key]}'

常用2

 查询访问最频繁的IP
netstat -n | awk '{print $1}' access-2020-04-06.log | sort | uniq -c | sort -n -k 1 -r | more

# 如根据访问IP统计UV
netstat -n | awk '{print $1}' access-2020-04-06.log | sort | uniq -c | wc -l

发表评论

后才能评论