【网络】每天掌握一个Linux命令 - netstat

目录

【网络】每天掌握一个Linux命令 - netstat

在网络管理和故障排查中,我们常常需要了解系统的网络连接状态、路由表信息以及网络接口统计数据等。netstat就是一款强大的工具,它能帮我们轻松获取这些信息,让网络问题无所遁形。无论是查看当前有哪些网络连接正在进行,还是分析网络服务的运行状态,netstat都能发挥重要作用。

工具概述

netstat是Linux系统中一个非常实用的网络工具,全称为network statistics(网络统计)。它用于显示各种网络相关信息,如网络连接、路由表、接口统计数据、伪装连接、多播成员等。通过netstat,用户可以了解网络的整体使用情况,诊断网络问题,监控网络性能,是系统管理员和网络工程师常用的工具之一。

安装方式

在大多数Linux发行版中,netstat工具通常包含在net-tools软件包中。不过,需要注意的是,net-tools包在较新的Linux发行版中可能不再是默认安装的,取而代之的是更现代的iproute2工具集。但为了兼容性,许多系统仍然提供net-tools包。

  • Debian/Ubuntu系统

    bash 复制代码
    sudo apt-get update
    sudo apt-get install net-tools
  • CentOS/RHEL系统

    bash 复制代码
    sudo yum install net-tools
  • Arch Linux系统

    bash 复制代码
    sudo pacman -S net-tools

如果您使用的是较新的Linux发行版,可能已经预装了netstat。您可以通过以下命令检查是否已安装:

bash 复制代码
netstat --version

核心功能

功能分类 描述
显示网络连接 列出所有活动的网络连接,包括TCP、UDP、UNIX域套接字等,可区分本地和远程连接。
查看路由表 显示内核中的路由表信息,包括网络目的地、网关、接口等。
显示网络接口统计 提供网络接口的统计数据,如接收和发送的数据包数量、错误信息等。
显示多播组信息 列出系统当前参与的多播组。
显示网络协议统计 提供各种网络协议的统计信息,如TCP、UDP、IP等协议的使用情况。
监控网络状态 通过持续刷新显示,实时监控网络连接和状态的变化。

基础用法

netstat命令的基本语法如下:

bash 复制代码
netstat [选项]

下面是一些常用的选项及其说明:

选项 长格式 描述
-a --all 显示所有连接和监听端口,包括TCP和UDP的连接以及监听状态的套接字。
-t --tcp 仅显示TCP连接。
-u --udp 仅显示UDP连接。
-n --numeric 以数字形式显示地址和端口号,而不是尝试解析主机名、端口名或用户名,可加快命令执行速度。
-p --programs 显示建立相关连接的程序名和进程ID,需要root权限才能查看所有进程信息。
-l --listening 仅显示监听状态的套接字,用于查看哪些服务正在监听端口。
-r --route 显示内核路由表,相当于执行route命令。
-i --interfaces 显示网络接口列表及其统计信息,类似于ifconfig命令的简化版。
-s --statistics 显示每个协议的统计信息,如TCP、UDP等协议的连接数、错误数等。
-c --continuous 每隔指定时间(秒)重复显示网络状态,用于监控网络活动。
-e --extend 显示扩展信息,如用户、Inode等。
-v --verbose 显示详细的网络状态信息。
-x --unix 仅显示UNIX域套接字连接。
-F --fib 显示FIB(转发信息库)路由表,与-r类似但更详细。
-C --cache 显示路由缓存信息。
--ip --inet 仅显示IP协议的连接(包括TCP、UDP等)。

进阶和实战案例

查看所有监听的TCP端口
bash 复制代码
netstat -tlpn

输出示例:

复制代码
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:22              0.0.0.0:*               LISTEN      1234/sshd           
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      5678/named           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9012/httpd           
tcp6       0      0 :::22                   :::*                    LISTEN      1234/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      9012/httpd

标题含义:

  • Proto:协议类型(tcp或tcp6表示IPv4或IPv6的TCP协议)
  • Recv-Q:接收队列中的字节数
  • Send-Q:发送队列中的字节数
  • Local Address:本地地址和端口
  • Foreign Address:远程地址和端口
  • State:连接状态(LISTEN表示监听状态)
  • PID/Program name:进程ID和对应的程序名
查看所有已建立的TCP连接
bash 复制代码
netstat -tnpa | grep ESTABLISHED

输出示例:

复制代码
tcp        0      0 192.168.1.100:22        192.168.1.200:56789     ESTABLISHED 1234/sshd: user [priv
tcp        0      0 192.168.1.100:443       104.28.32.210:5678      ESTABLISHED 9012/httpd

标题含义:

  • State:ESTABLISHED表示已建立的连接
查找占用特定端口的进程

要查找哪个进程正在占用8080端口,可以使用以下命令:

bash 复制代码
netstat -tulpn | grep :8080

输出示例:

复制代码
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      12345/java

这表明Java进程(PID为12345)正在监听8080端口。

显示网络接口统计信息
bash 复制代码
netstat -i

输出示例:

复制代码
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0     12345    0     0     0     6789    0     0     0 BMRU
lo        65536 0      4321    0     0     0     4321    0     0     0 LRU

标题含义:

  • Iface:接口名称
  • MTU:最大传输单元
  • RX-OK:接收的正确数据包数
  • RX-ERR:接收的错误数据包数
  • RX-DRP:接收的丢弃数据包数
  • TX-OK:发送的正确数据包数
  • TX-ERR:发送的错误数据包数
  • Flg:接口标志(B=广播,M=多播,R=运行,U=可用)
显示路由表
bash 复制代码
netstat -r

输出示例:

复制代码
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

标题含义:

  • Destination:目标网络或主机
  • Gateway:网关地址(0.0.0.0表示直接连接)
  • Genmask:网络掩码
  • Flags:路由标志(U=启用,G=使用网关,H=主机路由)
  • Iface:输出接口
实时监控网络连接
bash 复制代码
netstat -ctn

这将每2秒(默认间隔)刷新一次,显示所有TCP连接的实时状态。

显示UDP监听端口
bash 复制代码
netstat -ulpn

输出示例:

复制代码
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           1234/avahi-daemon    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           5678/dhclient        
udp6       0      0 :::5353                 :::*                                1234/avahi-daemon
显示UNIX域套接字连接
bash 复制代码
netstat -xap

输出示例:

复制代码
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     12345    1/init               /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     67890    1234/dbus-daemon    /var/run/dbus/system_bus_socket
unix  3      [ ]         DGRAM                    54321    5678/rsyslogd        /run/systemd/journal/syslog
显示详细的网络统计信息
bash 复制代码
netstat -s

部分输出示例:

复制代码
Ip:
    Forwarding: 1
    12345 total packets received
    0 forwarded
    0 incoming packets discarded
    12345 incoming packets delivered
    67890 requests sent out
Icmp:
    1234 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        echo reply: 1000
        destination unreachable: 234
    1234 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        echo request: 1000
        destination unreachable: 234
Tcp:
    1234 active connections openings
    5678 passive connection openings
    234 failed connection attempts
    123 connection resets received
    456 connections established
    12345 segments received
    67890 segments sent out
    1234 segments retransmitted
    567 TCP sockets finished time wait in fast timer
    0 other TCP timeouts
Udp:
    12345 datagrams received
    0 input datagrams incomplete.
    67890 datagrams sent
    0 receive buffer errors
    0 send buffer errors

注意事项

  1. 权限问题:使用-p选项显示进程信息时,需要root权限才能查看所有进程的详细信息。普通用户只能看到自己的进程。
  2. 替代工具:netstat虽然功能强大,但在较新的Linux系统中,推荐使用ss命令替代,它功能更强大且速度更快。例如,ss -tulpn与netstat -tulpn功能类似。
  3. 性能影响:在大型服务器上,使用netstat -a或netstat -p可能会消耗较多系统资源,尤其是在网络连接非常多的情况下。
  4. 端口解析:不使用-n选项时,netstat会尝试将IP地址和端口号解析为主机名和服务名,这可能会导致命令执行速度变慢,特别是在网络连接不良的情况下。
  5. 路由表变化:路由表可能会因为网络配置的变化而动态更新,因此查看路由表时应注意当前的网络状态。
  6. 防火墙影响:防火墙可能会阻止某些连接的建立或显示,因此netstat显示的连接信息可能不完整。
相关推荐
乔旭伟10 分钟前
Linux 服务器安全加固实战:SSH、防火墙、补丁与入侵排查
linux·服务器·安全
cpolar技术支持11 分钟前
把配置发出去怕带出密钥?先把含凭据配置转成脱敏只读快照,用 cpolar 给同事核对差异
运维·python·内网穿透·cpolar·配置脱敏
我不会起名字32230 分钟前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
workflower1 小时前
Agentic AI 时代的企业ICT 基础设施运维
运维·人工智能·机器学习·重构·云计算·汽车
裕晟资质规划1 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
szxinmai主板定制专家1 小时前
ZYNQ 数据采集方案踩坑总结:电力强电磁干扰、工业现场多协议适配优化
运维·人工智能·fpga开发·机器人·zynq
猫咪很可爱1 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
刘胡子大叔1 小时前
备份包只有 1.5K?
linux·服务器·网络
无足鸟ICT1 小时前
【RHCA+】RPM包验证和数字证书
linux·运维·服务器
yunfengzhineng1 小时前
天津立体库货架配套厂家
大数据·运维·人工智能·python