写点什么

Linux 命令 netstat 详解

用户头像
Dnnn
关注
发布于: 2020 年 09 月 10 日

今天来学习一个命令[netstat](https://linux.die.net/man/8/netstat),官方文档 https://linux.die.net/man/8/netstat

简介

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

参数

-r : 显示内核路由表。
-g : 显示IPv4和IPv6的多播组成员信息。
-i : 显示所有网络接口的表。
-M : 显示伪装连接的列表。
-s : 显示每个协议的统计信息。
-v : 详细地告诉用户发生了什么。
-n : 显示数字地址(ip),而不是主机名.
-c : 每个一个指定时间执行以下netstat
-e : 显示扩展信息
-o : 显示与网络相关的时间
-p : 显示每个socket的 PID 和 程序name
-l : 只显示在侦听中的socket
-a : 显示在侦听中和不在侦听中的socket
--numeric-hosts : 输出host
--numeric-ports : 输出端口
--numeric-users : 输出用户id

输出

Proto : socket使用的协议。
Recv-Q : 表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走。
Send-Q :对方没有收到的数据或者说没有Ack的,还是本地缓冲区。
Recv-Q Send-Q分别表示网络接收队列,发送队列。Q是Queue的缩写。
这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。短暂的Send-Q队列发送pakets非0是正常状态。
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Local Address : 本地地址
Foreign Address : 目标地址
State :socket的状态。 UDP连接没有状态为空
[State](https://www.jianshu.com/p/a546cd27f96e) 详解(详细解释戳:https://www.jianshu.com/p/a546cd27f96e):
  • ESTABLISHED : socket已建立连接 (三次握手中的第三次)

  • SYN_SENT : TCP主动打开,发送SYN (三次握手中的第一次)

  • SYN_RECV : 接受到SYN,并且发送SYN,ACK(SYN+1)(三次握手中第二次的状态)

  • FIN_WAIT1 : 应用主动关闭连接状态 (四次握手第一次的状态 )

  • FIN_WAIT2 : 对方响应关闭请求后的状态(ACK=FIN+1)四次握手第二次的状态 )

  • TIME_WAIT : 接收到对方已经关闭连接的响应后进入的状态。(四次握手的第三次)

  • CLOSED :连接已经关闭

  • CLOSE_WAIT : 远端接到被动关闭请求,发送ack。

  • LAST_ACK : 远端传输已经关闭,发送已关闭信息。

  • LISTEN : socket正在监听传入的连接。这些socket不包括在输出中,除非 --listening (-l) or --all (-a)

  • CLOSING :连接已经关闭时的状态,但是socket四次握手中的数据还没有发送完。

  • UNKNOWN : 未知状态。

User : 用户名或者uid


Pid :进程id



使用方法

netstat -a 显示所有socket

Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 10.222.69.194.52290 111.202.100.40.http ESTABLISHED
tcp4 0 0 10.222.69.194.52289 10.210.97.18.https ESTABLISHED
tcp4 0 0 10.222.69.194.52281 10.210.97.18.https ESTABLISHED
tcp4 0 0 10.222.69.194.52278 10.81.254.21.ndl-aas ESTABLISHED
tcp4 31 0 10.222.69.194.52277 202.108.23.152.https CLOSE_WAIT
tcp4 0 0 10.222.69.194.52276 124.67.215.8.https ESTABLISHED
tcp4 0 0 10.222.69.194.52242 10.81.254.21.ndl-aas ESTABLISHED
tcp4 0 0 10.222.69.194.51973 17.252.156.36.5223 ESTABLISHED
tcp6 0 0 *.51538 *.* LISTEN
tcp4 0 0 *.51538 *.* LISTEN
tcp4 0 0 10.222.69.194.49809 223.167.84.139.http-al ESTABLISHED
tcp4 0 0 10.222.69.194.49765 172.16.78.199.ssh ESTABLISHED
tcp4 0 0 10.222.69.194.49738 10.210.97.118.http CLOSE_WAIT
tcp4 0 0 *.* *.* CLOSED
tcp4 0 0 localhost.15292 *.* LISTEN
tcp46 0 0 *.11300 *.* LISTEN
tcp46 0 0 *.49937 *.* LISTEN
tcp4 0 0 *.49937 *.* LISTEN
tcp4 0 0 10.222.69.194.52291 13.107.5.88.https TIME_WAIT

netstat -t 显示所有tcp

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:cslistener localhost:59022 TIME_WAIT
...



找出运行程序的端口 netstat -ap | grep ssh


tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1153/sshd

tcp 0 0 10.13.2.215:22 172.16.78.199:1628 ESTABLISHED 10746/sshd:---

tcp 0 0 10.13.2.215:22 10.55.21.253:27749 ESTABLISHED 6017/sshd:---

tcp 0 0 10.13.2.215:22 172.16.78.199:11353 ESTABLISHED 4387/sshd:---

查找某个端口是否被占用 netstat -ap | grep ':80'

查看连接80端口最多的的IP地址 netstat -tn | grep '127.0.0.1:80' |awk '{print $5}' |awk -F ':' '{print $1}'| sort | uniq -c | sort -nr | less


2796 10.41.1.103

2746 10.41.1.64

2712 10.41.1.65

2684 10.41.1.104

查看TCP连接最多状态 netstat -t |awk '{print $6}' | sort | uniq -c | sort -rn


64342 TIME_WAIT

192 FIN_WAIT2

88 ESTABLISHED

7 FIN_WAIT1

3 SYN_RECV

1 LAST_ACK

1 Foreign

netstat 命令非常的好用,非常适合查看网络连接的状态。为了更好使用这个命令,最好了解一下TCP的三次握手和四次握手。

用户头像

Dnnn

关注

还未添加个人签名 2019.07.09 加入

还未添加个人简介

评论

发布
暂无评论
Linux命令netstat详解