netstat 命令详解

news/2024/5/18 16:36:51 标签: 网络, tcp/ip, udp

文章目录

    • 简介
    • 命令格式
    • 常用选项
    • 常用命令
      • 查询进程所占用的端口号
      • 查看端口号的使用情况
      • 显示所有连接和监听端口并显示每个连接相关的进程ID
      • 显示UDP、TCP协议的连接的统计信息并显示每个连接相关的进程 ID
      • 显示所有已建立的连接
      • 显示每个进程的连接数
      • 显示每个IP地址的连接数
      • 显示每种类型TCP/UDP的连接数
      • 显示每种网络状态的数量
      • 显示指定进程ID网络状态的数量
      • 显示端口占用数量
    • 网络状态

简介

netstat 命令是 Linux 系统中一个非常常用的网络工具,用于查询和统计网络连接的状态和数据传输情况。在网络故障排除和性能调优中,netstat 命令是必不可少的工具之一。本文将详细介绍 netstat 命令的常用参数及其用法。

命令格式

netstat [-a] [-c] [-e] [-f] [-i] [-n] [-o] [-p protocol] [-r] [-s] [-t] [-u] [interval]

常用选项

netstat 命令的常用选项如下:

  • -a(all):显示所有连接状态,包括 TCP、UDP 和 Unix 域套接字;
    • -t(tcp):显示 TCP 连接状态;
    • -uudp):显示 UDP 连接状态;
    • -x:列出所有unix端口
  • -c(continuous):连续显示网络状态信息。按 Ctrl + C 结束。
  • -e(extend):显示网络统计信息。包括网络接口、协议等。
  • -f:显示外部地址的完全限定域名(FQDN)。
  • -i:显示网络接口信息。
  • -n:以数字形式显示地址和端口号。
  • -o:显示与每个连接相关的进程 ID。
  • -p protocol:显示特定协议(tcp、udp 或 icmp)的连接。
  • -r:显示路由表。
  • -s:显示网络统计信息。包括网络接口、协议等。
  • -t:显示 TCP 协议的连接。
  • -u:显示 UDP 协议的连接。
  • interval:指定连续显示网络状态信息的时间间隔(单位为秒)。

常用命令

查询进程所占用的端口号

 netstat -ano | grep 进程ID

查看端口号的使用情况

 netstat -ano | grep 端口号

显示所有连接和监听端口并显示每个连接相关的进程ID

netstat -ano

显示UDP、TCP协议的连接的统计信息并显示每个连接相关的进程 ID

netstat -so -p udp

netstat -so -p tcp
IPv4 的 TCP 统计信息

  主动开放                        = 8055
  被动开放                       = 1136
  失败的连接尝试          = 2469
  重置连接                   = 1712
  当前连接                 = 67
  接收的分段                   = 2473796
  发送的分段                       = 454254
  重新传输的分段              = 10493

活动连接

  协议  本地地址          外部地址        状态           PID
  TCP    127.0.0.1:6000         kubernetes:51683       ESTABLISHED     16460
  TCP    127.0.0.1:6000         kubernetes:51684       ESTABLISHED     16460

显示所有已建立的连接

netstat -ano | grep ESTABLISHED
TCP    127.0.0.1:6000         127.0.0.1:51684        ESTABLISHED     16460
TCP    127.0.0.1:6000         127.0.0.1:51685        ESTABLISHED     16460

显示每个进程的连接数

netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -10

netstat -ano: 显示所有连接和监听端口,以数字形式显示地址和端口号,并显示与每个连接相关的进程 ID

  TCP    0.0.0.0:47001          0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       1044
  TCP    127.0.0.1:4244         0.0.0.0:0              LISTENING       15104
  TCP    127.0.0.1:6000         127.0.0.1:51683        ESTABLISHED     16460
  TCP    127.0.0.1:6000         127.0.0.1:51685        ESTABLISHED     16460
  ...
  UDP    192.168.2.226:1900     *:*                                    10428
  UDP    192.168.2.226:61395    *:*                                    10428
  UDP    [::]:3702              *:*                                    15956
  UDP    [::]:57584             *:*                                    15956
  UDP    [::1]:1900             *:*                                    10428
  UDP    [::1]:61392            *:*                                    10428
  UDP    [fe80::b131:35eb:14b3:8958%50]:1900  *:*                                    10428

grep ESTABLISHED :过滤出已建立的连接。

  TCP    127.0.0.1:6000         127.0.0.1:51683        ESTABLISHED     16460
  TCP    127.0.0.1:6000         127.0.0.1:51685        ESTABLISHED     16460
  TCP    127.0.0.1:49671        127.0.0.1:62522        ESTABLISHED     8244
  TCP    127.0.0.1:49672        127.0.0.1:49673        ESTABLISHED     6952
  TCP    127.0.0.1:49673        127.0.0.1:49672        ESTABLISHED     6952
  TCP    127.0.0.1:51058        127.0.0.1:51059        ESTABLISHED     4612
  TCP    127.0.0.1:51059        127.0.0.1:51058        ESTABLISHED     4612
  TCP    127.0.0.1:51061        127.0.0.1:51062        ESTABLISHED     4612

awk '{print $5}' :提取出第5列进程ID。

16460
16460
8244
6952
6952
4612
4612
4612

sort | uniq -c | sort -nr :排序统计每个进程ID的连接数量,并按照连接数量从高到低排序;

  • sort:排序。
  • uniq -c:用于在文本中查找并计数唯一行,有点像count - group by
  • sort -nr:用于对文本进行排序。
    • -n 选项表示按照数值大小排序,而不是按照字典序排序;
    • -r 选项表示按照逆序排序,即从大到小排序。
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort
16460
16460
4612
4612
4612
6952
6952
8244

netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c
2 16460
3 4612
2 6952
1 8244

netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr
3 4612
2 16460
2 6952
1 8244

head : 显示前面的若干行。

netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -2
3 4612
2 16460

显示每个IP地址的连接数

netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn

cut -d: -f1 :用于从文本中剪切文本并打印出指定字段。目的是从连接信息中提取远程 IP 地址,剔除掉冒号和端口号。

  • -d: 表示使用冒号作为分隔符
  • -f1 表示提取分隔符左边的第一个字段
netstat -ano | grep ESTABLISHED | awk '{print $3}'
127.0.0.1:51240
10.2.3.411:443
110.236.32.1:443

netstat -ano | awk '{print $3}' | cut -d: -f1
127.0.0.1
10.2.3.411
110.236.32.1

其他命令跟上面一样单步调试即可。

显示每种类型TCP/UDP的连接数

netstat -ano | awk '{print $1}' | sort | uniq -c
120 TCP
82 UDP

显示每种网络状态的数量

// TCP 网络状态的数量
netstat -ano |grep TCP | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
 2 TIME_WAIT

显示指定进程ID网络状态的数量

// TCP 网络状态的数量
netstat -ano |grep 进程ID | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
 2 TIME_WAIT

显示端口占用数量

netstat -ano | grep -c :
或者
netstat -a -n | grep -c "TCP"
netstat -a -n | grep -c "UDP"
netstat -a -n | grep -w "TCP" | wc -l
netstat -ano | awk 'NR>2{print $1}' | sort | uniq -c | awk '{print $2 "占用了"$1"个端口"}'
上面的都有重复
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn

grep -c : : grep 命令用于在文件或输出中查找与指定模式匹配的行,并将匹配的行打印出来。

  • 其中 -c 选项用于统计匹配到的行数
  • : : 表示匹配冒号字符。
    因此,grep -c : 命令会统计输出或文件中包含冒号字符的行数。

网络状态

State状态
LISTENING监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求
ESTABLISHED已连接,代表一个打开的连接,双方可以进行或已经在数据交互了
SYN_SENT客户端通过应用程序调用connect发送一个SYN以请求建立一个连接。在收到ACK后,状态转为ESTABLIHSED。
CLOSE_WAIT被动关闭端接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序)
TIME_WAIT主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态
LAST_ACK等待对方回应一个ACK(这是准备关闭连接的一个步骤,意味着这个连接正在关闭)

http://www.niftyadmin.cn/n/135701.html

相关文章

Linux内核移植

内核移植半导体厂商会从linux内核官网下载某个版本,将其移植到自己的CPU上,测试成功后就会将其开放给该半导体的厂商的CPU开发者,开发者下载其提供的linux内核,然后将其移植到自己的 产品上。1、NXP官方开发板Linux内核编译测试编…

数字化服务环境下高校成人教育图书馆服务工作的发展方向

1.利用高校成人教育图书馆的整体化优势进行图书馆网络的优化组织与协调,使数字化信息服务功能在图书馆数字化服务中得以充分实现,促使数字电子信息资源成为图书馆信息服务的有机组成部分。2.高校成人教育应该从宏观上有计划有组织地协调高校成人教育图书…

Python 协程详解,都在这里了

什么是协程 协程(co-routine,又称微线程、纤程) 是一种多方协同的工作方式。 协程不是进程或线程, 其执行过程类似于 Python 函数调用, Python 的 asyncio 模块实现的异步IO编程框架中, 协程是对使用 asy…

单例模式(设计模式详解)

单例模式 描述 单例模式是一种创建型模式,它的目的是确保一个类只有一个实例,并提供全局访问点。这个实例可以被多个客户端共享,从而避免创建多个实例所带来的资源浪费和不必要的复杂性。 实现 懒汉模式 public class LasySingleton {priv…

使用JProfiler分析java oom dump文件

1、安装JProfiler(本文使用JProfiler11) 链接:https://pan.baidu.com/s/1VBHLIo8hIVGeeLjaBVjcIg 提取码:q5wl 在JProfiler的堆遍历器(Heap Walker)中,你可以对堆的状况进行快照并且可以通过选择步骤下寻找感兴趣的对…

卷麻了,00后Jmeter用的比我还熟练,简直没脸见人......

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对测试工具的使用感到困扰?前言性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性…

关于指针运算的一道题

目录 刚看到这道题的时候我也和大多数小白一样感到无从下手,但是在我写这篇博客的前几分钟开始我对这道题有了一点点的理解。所以我就想着趁热打铁,写一篇博客来记录一下我的想法。 题目如下: 画图: 逐一解答: 题一…

我们的理性何处安放

每天工作压力和各种人相处都让我们非常忙碌,我们上大学,努力工作,都是想获得更好的人生场景,素养,提升自身的认知,这样就是对我们大多数人生最负责任。如何让自己理性与人为善,并能被人温柔以待…