3-linux命令-网络工具

50 阅读12分钟

大纲

命令功能常用示例
ping测试网络连通性ping -c 4 google.com
netstat网络连接统计netstat -tulnp(监听端口)
ss网络连接统计ss -tnlp
traceroute跟踪数据包路径traceroute -n 8.8.8.8
scp安全远程拷贝scp file user@remote:/path/
tcpdump网络抓包分析tcpdump -i eth0 port 80
ipip及路由相关`ip aip route show`
hostname主机名配置hostname
curl请求下载urlcurl 域名

ping

检查网络是否通畅或网络连接速度

  • 参数

    参数作用示例
    -c <次数>指定发送请求包的数量ping -c 5 192.168.1.1(发送5次请求)
    -i <间隔秒数>设置包发送间隔(默认1秒)ping -i 0.5 www.baidu.com (每0.5秒发送1个包)
    -s <字节数>自定义数据包大小(默认56字节,总64字节含ICMP头)ping -s 1024 172.17.0.254(发送1024字节数据包)
    -fFlood模式(快速发送包,仅root可用)ping -f example.com (每秒最多发送100个包,用于压力测试)
    -n仅显示IP地址,不解析主机名ping -n www.csdn.net (避免DNS查询延迟)
  • 示例

    • 指定 0.4秒一个包, 每包大小18字节, 默认64

      [root@localhost cc]# ping -i 0.4 -c 3 www.baidu.com
      PING www.baidu.com (183.2.172.17) 56(84) bytes of data.
      64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=1 ttl=128 time=43.4 ms
      64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=2 ttl=128 time=38.6 ms
      64 bytes from 183.2.172.17 (183.2.172.17): icmp_seq=3 ttl=128 time=65.8 ms
      
    • ping 3次

      # 过程跟上面一样,但如果不通可能就要很长时间,加上-i更方便一些
      [root@localhost cc]# ping -c 3 www.baidu.com
      
    • Flood模式(快速发送包,仅root可用) 如果不ctrl+c会一直ping

      # Flood模式(快速发送包,仅root可用) 如果不ctrl+c会一直ping
      # 压测时使用
      cc]# ping -f -c3 www.baidu.com
      PING www.baidu.com (183.2.172.177) 56(84) bytes of data.
      
    • 只显示最终的结果, 需要跟上 -c 这个参数,不加-c就需要手动 ctrl+c

      [root@localhost cc]# ping -c 2 -q www.baidu.com
      PING www.baidu.com (183.2.172.17) 56(84) bytes of data.
      ​
      --- www.baidu.com ping statistics ---
      2 packets transmitted, 2 received, 0% packet loss, time 1002ms
      rtt min/avg/max/mdev = 33.335/34.682/36.030/1.360 ms
      # 仅显示最终的结果,不会有打印过程 
      

netstat

netstat 是监控 TCP/IP 网络的控制台命令,能提供网络连接、路由表、接口状态等关键信息,常用于网络问题诊断和连接监控

  • cenos7已废弃, 推荐使用ss , 需要使用 yum -y install net-tools

  • 参数

    参数组合功能描述典型用途
    netstat -a显示所有网络连接(含 LISTEN 状态)全面了解系统网络活动
    netstat -t / -u仅显示 TCP / UDP 连接过滤特定协议连接
    netstat -l显示监听状态的端口检查服务器端口是否正常开放
    netstat -p显示连接关联的进程 ID 和名称定位占用端口的进程
    netstat -r显示系统路由表分析网络数据包转发路径
    netstat -tlpn组合参数:TCP + 监听 + 进程 + 数字IP快速排查服务端口占用
    netstat -c 3
  • 示例

    • 以数字形式显示建立tcp的连接

      [root@localhost cc]# netstat -tn
      Proto Recv-Q Send-Q Local Address           Foreign Address         State
      tcp        0     36 192.168.189.129:22      192.168.189.1:3185  ESTABLISHED
      tcp        0      0 192.168.189.129:22      192.168.189.1:3199  ESTABLISHED
      
    • 显示本地监听以及建立tcp连接

      [root@localhost cc]# netstat -tna
      Proto Recv-Q Send-Q Local Address           Foreign Address      State
      tcp        0      0 0.0.0.0:22              0.0.0.0:*            LISTEN
      ...
      tcp6       0      0 :::22                   :::*            LISTEN
      tcp6       0      0 ::1:25                  :::*            LISTEN  
      
    • 上面的都有,只是多了个pid跟程序名

      [root@localhost cc]# netstat -tnap
      Proto Recv-Q Send-Q Local Address      ..  PID/Program name    
      tcp        0      0 0.0.0.0:22         ..  9275/sshd           
      tcp        0      0 127.0.0.1:25       ..  9422/master         
      tcp        0     36 192.168.189.129:22 ..  9534/sshd: root@pts 
      tcp        0      0 192.168.189.129:22 ..  9540/sshd: root@not 
      tcp6       0      0 :::22              ..  9275/sshd           
      tcp6       0      0 ::1:25             ..  9422/master         
      
    • 列出所有端口的统计信息

      ~]# netstat -s
      Ip:
          29993749 total packets received
          0 forwarded
          0 incoming packets discarded
          29993749 incoming packets delivered
          30489738 requests sent out
          7 outgoing packets dropped
      Icmp:
          283312 ICMP messages received
          53210 input ICMP message failed.
          ICMP input histogram:
              destination unreachable: 264212
              echo requests: 735
              echo replies: 18365
      
    • 显示核心路由信息

      [root@localhost cc]# netstat -rn
      Kernel IP routing table
      Destination     Gateway         Genmask    Flags   MSS Window  irtt Iface
      0.0.0.0         192.168.189.2   0.0.0.0    UG        0 0          0 ens33
      192.168.189.0   0.0.0.0    255.255.255.0   U         0 0          0 ens33
      
    • 统计连接的状态

       ~]# netstat -nat |awk '{print $6}' |sort| uniq -c
            1 established)
            1 ESTABLISHED
            1 Foreign
            9 LISTEN
            
       ~]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn  # 倒序查看
            9 LISTEN
            5 TIME_WAIT
            1 Foreign
            1 ESTABLISHED
            1 established)
      

ss

ss(Socket Statistics)用于显示系统套接字统计信息,相较于传统的 netstat,它能提供更详细的 TCP 状态信息,且因直接读取内核 tcp_diag 模块数据,在高并发场景下速度更快.

  • 参数

    选项组合功能描述示例命令
    -t -a显示所有 TCP 连接(监听+非监听)ss -t -a
    -u -a显示所有 UDP 连接ss -u -a
    -l -p显示监听状态的套接字及对应进程ss -l -p
    -n -a -s以数字格式显示所有连接及统计摘要ss -n -a -s
    -o显示套接字内存使用信息ss -o
    -r解析服务名为主机名ss -r
  • 示例-netstat差不多

  • 与netstat对比

    特性ss 命令netstat 命令
    数据来源内核 tcp_diag 模块(直接高效)/proc 文件系统(开销较大)
    TCP 状态细节支持显示更丰富的状态(如 SYN-RECV)状态展示较基础
    高并发表现处理大量连接时速度更快连接数多时卡顿明显

traceroute

traceroute 是网络诊断工具,通过发送不同协议的数据包,记录途经路由器的 IP 地址和响应时间,帮助定位网络延迟或故障节点其主要协议及对应选项如下:

  • 参数

    协议类型选项端口/说明适用场景
    UDP(默认)30000 以上随机端口常规路径追踪,多数场景适用
    TCP-T -p <端口>指定端口(如 80、443)需穿透防火墙或检测特定服务端口可达性
    ICMP-I使用 ICMP 回显请求(类似 ping)需模拟 ping 路径追踪,部分网络仅允许 ICMP
  • 示例: 使用前需要先安装:yum -y install traceroute

    • 默认 UDP 追踪(带域名解析)

       ~]# traceroute www.badui.com
      traceroute to www.badui.com (67.23.129.4), 30 hops max, 60 byte packets
       1  gateway (网关)  4.951 ms  5.575 ms  6.347 ms
       2  路由器 (路由器)  0.217 ms  0.217 ms  0.206 ms
       3  外网出口地址 (外网出口地址)  76.053 ms  76.996 ms  77.922 ms
       4  172.30.20.1 (172.30.20.1)  2.323 ms  2.624 ms  2.893 ms
       ....
      10  202.127.113.253 (202.127.113.253)  48.204 ms  48.171 ms  47.916 ms
       ....
       
      # 我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用 traceroute -q 4 www.baidu.com ,表示向每个网关发送4个数据包
      ~]# traceroute -q 4 www.badui.com
      traceroute to www.badui.com (67.23.129.4), 30 hops max, 60 byte packets
       1  gateway (网关) 6.338 ms  7.019 ms  7.697 ms  8.370 ms
       2  路由器 (路由器)   0.179 ms  0.412 ms  0.398 ms  0.383 ms
       3  外网出口地址 (外网出口地址) 8.532 ms  9.393 ms  11.872 ms  12.895 ms
       。。。。
      
    • 禁用 DNS 解析(仅显示 IP)

       ~]# traceroute -n www.jd.com  
      # 直接输出 IP 地址,减少 DNS 查询耗时,适合快速定位网络节点
      
    • ICMP 协议追踪

       ~]# traceroute -I -n www.jd.com  
      # 使用 ICMP 协议,结果与 ping 路径更接近,部分网络中响应更稳定
      
    • TCP 协议追踪(指定端口 80)

      traceroute -T -p 80 -n www.jd.com  
      # 模拟 TCP 连接请求,可检测目标服务器 80 端口的可达性,中间节点可能因防火墙显示 ***(超时)
      
    • 跳数设置

      ~]# traceroute -m 4 www.baidu.com  # 只显示4跳
      traceroute to www.badui.com (67.23.129.4), 4 hops max, 60 byte packets
       1  gateway (网关)  4.951 ms  5.575 ms  6.347 ms
       2  路由器 (路由器)  0.217 ms  0.217 ms  0.206 ms
       3  外网出口地址 (外网出口地址)  76.053 ms  76.996 ms  77.922 ms
       4  172.30.20.1 (172.30.20.1)  2.323 ms  2.624 ms  2.893 ms
      
    • 把对外发探测包的等待响应时间设置为3秒

      # 超过3秒就直接返回  ***
      ~]# traceroute -w 3 www.baidu.com 
      

tcpdump

参考: Linux抓包工具tcpdump详解linux ip命令和ifconfig命令

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

  • 关键字&选项

    • 指定地址

      参数说明
      hosthost 210.27.48.2, 指明 210.27.48.2是一台主机
      netnet 202.0.0.0指明202.0.0.0是一个网络地址
      portport 23 指明端口号是23, 如果没有指定类型,缺省的类型是host
    • 指定源或目标

      参数说明
      src指定IP包的源地址
      dst指定IP包的目标地址
      dst or src源地址或目标地址中的其中一个, 不指定默认就是这种
      dst and src源地址或目标地址 需要同时满足
    • 协议类型

      参数说明
      ip指定ip地址
      arparp协议
      tcp指定协议为tcp
      udp指定协议为udp
    • 常用表达式

      逻辑关系符号形式英文形式功能说明使用示例
      (不等于)!not排除指定条件的数据包tcpdump not port 22 tcpdump ! host 192.168.1.1
      (同时满足)&&and需同时满足两个条件的数据包tcpdump port 80 and src 10.0.0.1 tcpdump udp && dst port 53
      (满足其一)``or满足任一条件的数据包tcpdump port 443 or port 80 `tcpdump icmparp`
  • 基本语法

    • 过滤主机

      # 抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
      ~]# tcpdump  -i ens160 host 192.168.2.22# 指定源地址  host可不要 默认
      ~]# tcpdump  -i ens160 src host 192.168.2.22# 指定目标地址
      ~]# tcpdump  -i ens160 dst 192.168.2.22
      
    • 过滤端口

      # 抓取经过ens160, 目的或源端口是10050 并源地址是192.168.2.18的地址
      ~]# tcpdump  -i ens160 port 22 and src 192.168.2.18# 指定源端口是22的包,  源=自已
      ~]# tcpdump  -i ens160 src port 22# 抓取目标端口是22的包   目标=谁在连接
      ~]# tcpdump  -i ens160 dst port 22
      
    • 网络过滤

      # 过滤源或目标是 192.168的网络段
      ~]# tcpdump -i eth1 net 192.168     # 过滤源的网段是192.168的
      ~]# tcpdump -i eth1 src net 192.168# 过滤目标的网段是192.168的
      ~]# tcpdump -i eth1 dst net 192.168
      
    • 协议过滤

      tcpdump -i eth1 arp
      tcpdump -i eth1 ip
      tcpdump -i eth1 tcp
      tcpdump -i eth1 udp
      tcpdump -i eth1 icmp
      
    • 运算符过滤

      # 过滤 tcp 端口为999  并且目标是 2.18或2.22的主机, 注意括号 
      ~]# tcpdump -i ens160 '(tcp and port 999 and (dst host 192.168.9.18 or dst host 192.168.2.22))'
      

scp

本地文件传送至远程主机,或从远程主机拉取至本地

  • 参数

    参数说明
    -P指定远程连接端口
    -q把进度参数关闭
    -r递归地复制整个文件夹
    -V冗余模式,打印排错信息定位
  • 示例

    • 从本地发到对端

      # 固定格式: -P:指定端口   文件1    用户@地址:地址
      ~]# scp -P 22 test.txt root@192.168.9.25:/tmp/
          root@192.168.9.25's password: 
          test.txt        100%    0     0.0KB/s   00:00    
      
    • 从本地将远端文件拉回来

      # 拉取远端文件回本地
       ~]# scp -P 22 root@192.168.9.25:/tmp/test.txt /tmp/
          root@192.168.9.25's password: 
          test.txt        100%    0     0.0KB/s   00:00    
      

IP

用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道, 替代netstat|ifconfig命令的工具

  • 语法: ip [ OPTIONS ] OBJECT { COMMAND | help }

  • 参数

    参数说明
    -v显示指令版本信息
    -s输出更详细的信息
    -h输出人类可读的统计信息和后缀
    -o将每条记录输出到一行,用‘\’字符替换换行符
  • 常用对象

    参数说明
    link网络设备
    address设备上的协议(IP或IPv6)地址
    addrlabel协议地址选择的标签配置
    route路由表条目
    rule路由策略数据库中的规则
  • ip 命令常用备忘

    ip-command

  • 示例

    • 添加|修改地址

      # 添加地址, 如果存在则是多地址,
      ~]# ip addr add 192.168.189.135/24 dev ens36
      ~]# ip a sh ens36
      3: ens36: <BROADCAST,MULTICAST> mtu 1500  group default qlen 1000
          link/ether 00:0c:29:fa:dc:09 brd ff:ff:ff:ff:ff:ff
          inet 192.168.189.134/24 scope global ens36
          inet 192.168.189.135/24 scope global secondary ens36
      ​
      # 删除地址后添加新配置
      ~]# ip addr del 192.168.189.135/24 dev ens36
      ~]# ip addr del 192.168.189.134/24 dev ens36
      ~]# ip addr del 192.168.189.133/24 dev ens36
      ~]# ip a sh ens36
      3: ens36: <BROADCAST,MULTICAST> mtu 1500  group default qlen 1000
          inet 192.168.189.133/24 scope global ens36
      
    • 设置网卡别名

      ~]# ip addr add 10.0.0.1 label ens36:1 dev ens36
      3: ens36: ---- group default qlen 1000
          inet 192.168.189.133/24 scope global ens36
          inet 10.0.0.1/32 scope global ens36:1 <-- 设置别名
      
    • 显示网卡流量

      ~]# ip -s link show ens33
      2: ens33: < ......  qlen 1000
          link/ether 00:0c:29:fa:dc:ff brd ff:ff:ff:ff:ff:ff
          RX: bytes  packets  errors  dropped overrun mcast   
          218002     2828     0       0       0       0       
          TX: bytes  packets  errors  dropped carrier collsns 
          195264     1598     0       0       0       0
      
    • 删除网卡地址

      # 先查看网卡地址
      ~]# ip -4 addr show dev ens33
      2: ens33: <....  1000
          inet 192.168.189.133/24 brd 192.168.189.133 scope global noprefixroute ens160
          inet 10.0.0.1/24 brd 10.0.0.255 scope global ens160:1# 删除别名以及地址
      ~]# ip addr del 10.0.0.1/24 dev ens33:1# 在次查看就已经删除了
      ~]# ip -4 addr show dev ens33
      2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
          inet 192.168.189.133/24 brd 192.168.189.133 scope global noprefixroute ens160
      ​
      # 一次性删除当前网络设备的所有地址,  慎用
      ~]# ip addr flush dev ens160
      
    • 激活或者停用网络接口

      ~]# ip link set ens33 down  # 禁用网卡
      ~]# ip link set ens33 up    # 启用网卡
      

hostname

  • 示例

    # 设置主机名
    ~]# vim /etc/hostname
    
    # 显示主机名
    ~]# hostname
    
    # 查看详细信息
    ~]# hostnamectl 
       Static hostname: localhost.localdomain
    Transient hostname: show
             Icon name: computer-vm
               Chassis: vm
            Machine ID: 8b96b8f3119f49eb8c867204b5a82ef2
               Boot ID: cc5712e82fe14c3c99ecf61e1b28571a
        Virtualization: vmware
      Operating System: CentOS Linux 7 (Core)
           CPE OS Name: cpe:/o:centos:centos:7
                Kernel: Linux 3.10.0-957.el7.x86_64
          Architecture: x86-64
          
    # 设置主机名立即生效
    ~]# hostnamectl set-hostname xiong
    

curl

  • 参数

    功能分类关键选项作用说明示例命令
    基础请求无选项发送 GET 请求,输出响应内容curl www.baidu.com
    -i显示响应头+内容curl -i www.baidu.com
    -I仅显示响应头(HEAD 请求)curl -I www.baidu.com
    文件操作-o <文件名>保存响应到指定文件curl -o baidu.html www.baidu.com
    -O以 URL 中文件名保存(需指向具体文件)curl -O https://example.com/file.zip
    -C -断点续传(恢复中断下载)curl -C - -o file.zip https://url
    请求方法-X POST指定 POST 请求curl -X POST https://api.example.com
    -d <数据>发送 POST 数据(如表单参数)curl -d "user=test&pass=123" https://url
    认证与代理-u <用户:密码>服务器认证(如 Basic Auth)curl -u admin:123456 https://secure.url
    -x <代理>通过代理服务器请求curl -x http://proxy:8080 www.baidu.com
    调试与跟踪-v输出详细通信过程(含 DNS 解析、请求头)curl -v www.baidu.com
    -s静默模式(不显示进度/错误,仅输出结果)curl -s www.baidu.com