惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
D
Docker
M
MIT News - Artificial intelligence
L
LangChain Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
博客园_首页
MongoDB | Blog
MongoDB | Blog
美团技术团队
S
Schneier on Security
G
GRAHAM CLULEY
月光博客
月光博客
有赞技术团队
有赞技术团队
Vercel News
Vercel News
Scott Helme
Scott Helme
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
量子位
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Visual Studio Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security Affairs
Cloudbric
Cloudbric
爱范儿
爱范儿
H
Heimdal Security Blog
PCI Perspectives
PCI Perspectives

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis 业务规则引擎演变过程简述 微服务中的熔断算法 漏桶算法和令牌桶算法 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? zap 高性能设计与实现 HTTP Router 算法演进 fastcache 高性能设计与实现 Web 常见的三个安全问题 ants Code Reading Go 线程安全 map 方案选型 布隆过滤器 死锁、活锁、饥饿、自旋锁 sync.Pool Code Reading Go 内存管理概述 Go netpoll Code Reading goroutine 泄漏与检测 time/Timer Code Reading GMP Scheduler Code Reading Go channel 的 15 条规则和底层实现 为什么 Linux “一切皆文件” context.Context Code Reading runtime/HACKING.md Goland 最佳实践 互联网开发与金庸武学 为什么 Redis 6.0 引入多线程模型? Kubernetes 应用最佳实践 - 金丝雀发布 容器中如何正确配置 GOMAXPROCS ? singleflight Code Reading sync.Map Code Reading sync.Cond Code Reading sync.WaitGroup Code Reading sync.RWMutex Code Reading sync.Mutex Code Reading sync.Once Code Reading Go 无锁编程 sync/atomic Code Reading goroutine 交替打印奇偶数 GODEBUG Go 并发模式 Go 汇编 UUID 通用技术选型 Kubernetes 应用最佳实践 - 水平自动伸缩 Go 高性能 Tips fasthttp 为什么比标准库 net/http 快 10 倍 ? 技术文章配图指南 ChatGPT 初体验 Docker 网络原理概览 iptables 的五表五链 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 Go 的反射与三大定律 Docker 官方提供的最佳实践 Go 语言内置的设计模式 HTTP1 到 HTTP3 的工程优化 Kubernetes 应用最佳实践 - Sidecar 模式 Kubernetes 应用最佳实践 - init 容器和钩子函数 为什么 recover 必须在 defer 中调用? 为什么 defer 的执行顺序和注册顺序不同? Go map 设计与实现 Go 切片扩容底层实现 Go 语言中的零拷贝 Go Delve 云原生和边缘计算简介 Kubernetes Pod 服务质量等级 Kubernetes 应用最佳实践 - 探针 Kubernetes 应用最佳实践 - 资源请求和限制 CDN 原理 Kubernetes 应用最佳实践 - 开篇 缓存策略和模式 Go 内存模型 Kubernetes 核心概念
netstat 命令常用操作
2017-01-26 · via 蛮荆

2017-01-26 计算机网络 Linux 命令

netstat 命令作用

netstat 是一个网络管理命令行工具,用于监控和排查网络连接状态及统计信息,可以显示网络连接、路由表、接口统计等数据。


常用方法

本文代码运行环境:

$ cat /etc/os-release 

# 输出如下
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
...

1. 显示所有连接和监听端口

输出当前主机上所有的网络连接和监听端口。

$ netstat -a

# 输出如下
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:900             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ssh           localhost:57876         ESTABLISHED
tcp        0      0 cs-100667547897-d:41352 sf-in-f101.1e100.:https ESTABLISHED
tcp        0      0 cs-100667547897-d:55234 metadata.googl:http-alt TIME_WAIT  
tcp        0      0 localhost:3000          localhost:49822         ESTABLISHED
tcp        0      0 localhost:57878         localhost:ssh           TIME_WAIT  
tcp        0      0 localhost:900           cs-100667547897-d:45530 TIME_WAIT  
tcp        0      0 localhost:55890         localhost:970           ESTABLISHED
tcp        0      0 cs-100667547897-d:55302 sl-in-f95.1e100.n:https ESTABLISHED
...

显示 IP 地址和端口号:

2. 显示 TCP 连接

$ netstat -t

# 输出如下
tcp        0      0 localhost:ssh           localhost:57876         ESTABLISHED
tcp        0      0 localhost:3000          localhost:49822         ESTABLISHED
tcp        0      0 localhost:48078         localhost:970           ESTABLISHED
tcp        0      0 localhost:48888         localhost:ssh           TIME_WAIT  
tcp6       0      0 10.88.0.4:980           10.95.150.2:57362       ESTABLISHED

3. 显示 UDP 连接

4. 显示监听的服务及其进程 PID

图片来源: 网络是怎样连接的(户根勤)

$ netstat -lp

# 输出如下
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      384/node            
tcp        0      0 0.0.0.0:900             0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      61/sshd: /usr/sbin/ 
tcp        0      0 localhost:8998          0.0.0.0:*               LISTEN      -                   
tcp        0      0 localhost:45439         0.0.0.0:*               LISTEN      385/sshd: codean_ne 

...

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     21343    193/dockerd          /var/run/docker.sock

...

5. 显示网络接口统计信息

输出每个网络接口的统计信息,包括本地环回网络和虚拟/容器网络,通过输出结果可以查看网卡的丢包记录。

$ netstat -i

# 输出如下
# RX-OK、RX-ERR、RX-DRP、RX-OVR 分别表示
# 接收时的总包数、总错误数、进入 Ring Buffer 后因其他原因(如内存不足)导致的丢包数、 Ring Buffer 溢出导致的丢包数
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0   1460        0      0      0 0             0      0      0      0 BMU
eth0      1500     7678      0      0 0          5705      0      0      0 BMRU
lo       65536     6585      0      0 0          6585      0      0      0 LRU

6. 显示路由表

$ netstat -r

# 输出如下
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.88.0.1       0.0.0.0         UG        0 0          0 eth0
10.88.0.0       0.0.0.0         255.255.0.0     U         0 0          0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0

7. 显示详细的统计信息

输出详细的网络协议统计信息。

$ netstat -s

# 输出如下
# 不同的协议之间使用空行进行分割
Ip:
Forwarding: 1 # 开启转发
31 total packets received # 总收包数
0 forwarded # 转发包数
0 incoming packets discarded  # 接收丢包数
25 incoming packets delivered # 接收的数据包数
15 requests sent out # 发出的数据包数

Icmp:
0 ICMP messages received # 收到的ICMP包数
0 input ICMP message failed # 收到ICMP失败数
ICMP input histogram:
0 ICMP messages sent #  ICMP 发送数
0 ICMP messages failed # ICMP 失败数
ICMP output histogram:

Tcp:
57 active connection openings # 主动连接数
165 passive connection openings # 被动连接数
1 failed connection attempts # 失败连接尝试数
28 connection resets received # 接收的连接重置数
16 connections established # 建立连接数
16660 segments received # 已接收报文数
25630 segments sent out # 已发送报文数
25 segments retransmitted # 重传报文数
0 bad segments received # 错误报文数
35 resets sent # 发出的连接重置数
407 SYNs to LISTEN sockets dropped # 半连接队列溢出次数
14 times the listen queue of a socket overflow  # 全连接队列溢出次数

Udp:
65 packets received
0 packets to unknown port received
0 packet receive errors
65 packets sent
0 receive buffer errors
0 send buffer errors

...

TcpExt:
11 resets received for embryonic SYN_RECV sockets # 半连接重置数
0 packet headers predicted
TCPTimeouts: 7   # 超时数
TCPSynRetrans: 4 # SYN 重传数
...

如果希望输出指定协议的结果,可以使用指定协议名称的简称作为参数即可 (例如 {-t|–tcp} {-u|–udp} )。

# 指定输出 TCP 协议统计数据
$ netstat -s -t

8. 持续显示网络状态

结合 watch 命令可以实时监控网络状态:

# 监听 TCP 链接状态变化
# 每秒刷新 1 次
$ watch -n 1 netstat -ant

# 输出省略 ...

9. 查看网络协议栈中的套接字信息

$ netstat -nltp

# 输出展示了套接字的状态、接收队列、发送队列、本地地址、远端地址、进程 PID 和进程名称
# -l 表示只显示监听套接字
# -n 表示显示 IP 地址和端口
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:9061            0.0.0.0:*               LISTEN      1414/java
tcp        0      0 0.0.0.0:9062            0.0.0.0:*               LISTEN      1413/java
tcp        0      0 0.0.0.0:9191            0.0.0.0:*               LISTEN      11357/WorkerMan: wo

...

结合其他命令使用

1. 显示与某个端口相关的连接

使用 netstat + grep 筛选出符合条件的连接:

# 查找所有 80 端口的连接
$ netstat -an | grep :80

# 输出省略 ...


# 查找所有 TIME_WAIT 状态的连接
$ netstat -an | grep TIME_WAIT

# 输出省略 ...

2. 查看某个进程的网络连接

# 查看 Docker 进程 ID 
$ pidof dockerd

8275

# 查看进程 ID 为 Docker 的网络连接
$ netstat -anp | grep 8275

# 输出如下
tcp        0      0 127.0.0.1:47976         127.0.0.1:1514          ESTABLISHED 8275/dockerd
unix  2      [ ]         DGRAM                    1372463816 8275/dockerd

...

3. 统计 TCP 连接各类状态的数量

# 在 netstat 命令的输出基础上,使用 awk 进行统计
$ netstat -t | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

# 输出如下
ESTABLISHED 8
FIN_WAIT2 3
TIME_WAIT 14

在统计结果的基础上再进行排序。

$ netstat -nat | awk  '{print  $6}'  |  sort  |  uniq  -c  |  sort  -n
# MySQL 数据库的连接数暴涨,想查到连接来源
$ netstat -tpn|grep 3306|grep -i estab|awk '{print $4}'|cut -d ':' -f 1|awk '{a[0]=a[0]=a[0] + 1} END {for (i in a) print i " " a[i]}' 

替代工具

需要注意的是,在一些较新的 Linux 发行版中,netstat 已经不再是默认安装了,用户可以使用 ssip 命令进行替代。

1. ss (Socket Statistics)

# 显示所有 TCP 连接
$ ss -t

# 显示所有 UDP 连接
$ ss -u

# 显示所有监听端口
$ ss -l

# 显示监听端口及其进程信息
$ ss -lp

2. ip (iproute2 工具集的一个子命令)

# 显示路由表
$ ip route

# 显示接口信息
$ ip addr

# 显示链路信息
$ ip link