Linux网络命令

一、Linux网络命令概述

1.1 Linux网络命令概述

Linux系统在网络管理中占据重要地位。无论是服务器管理、网络诊断还是安全维护,Linux网络命令都能提供强大的支持。

Linux网络命令用于诊断和测试网络连接、服务可达性以及应用之间的通信。

Linux 常用的网络命令有:pingnetstatssnctelnettcpdumpdignslookupiptablesarproutetracerouteipifconfigcurl等等。

二、Linux 网络命令功能用法

2.1 ping - 检查网络主机连通性测试

ping 命令用于测试网络主机之间的连通性。

基本用法

1
ping [Options] host/ip

2.2 traceroute - 网络诊断命令

traceroute 是一个网络诊断工具,用于跟踪数据包从你的计算机到目标主机(通常是一个网站或IP地址)所经过的路由路径。它可以帮助你了解网络中的哪些部分可能存在问题,例如延迟或丢包。

traceroute 命令的一些基本用法和参数:

1
traceroute [Options] host/ip [packetlen]

Options:

  • -A:使用AS(自治系统)路径,显示每个跳转点的自治系统号码。
  • -d:使用SO_DEBUG选项,启用调试输出。
  • -I:使用ICMP ECHO请求来追踪路径。
  • -4:使用IPv4地址。
  • -6:使用IPv6地址。
  • -m:设置最大跳数,默认是30。
  • -n:不解析主机名,仅显示IP地址。
  • -p:指定要使用的端口号。(默认是33434)
  • -t:设置数据包的TTL(Time to Live)值。
  • -q:设置发送的查询数量,默认是3。nqueries
  • -T:使用TCP SYN包进行追踪。
  • -U:使用UDP数据包进行追踪。
  • -V:显示程序的版本信息
  • -w:设置等待每次回复的时间(wait time),单位是秒,默认是5秒。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@m ~]# traceroute www.baidu.com
traceroute to www.baidu.com (183.240.98.198), 30 hops max, 60 byte packets
 1  192.168.0.1 (192.168.0.1)  0.989 ms  2.408 ms  2.394 ms
 2  192.168.1.1 (192.168.1.1)  1.676 ms  1.904 ms  1.899 ms
 3  10.68.0.1 (10.68.0.1)  5.133 ms  5.352 ms  6.192 ms
 4  183.224.90.37 (183.224.90.37)  7.160 ms  7.395 ms  7.386 ms
 5  221.183.49.69 (221.183.49.69)  8.355 ms  8.346 ms 221.183.78.45 (221.183.78.45)  7.895 ms
 6  221.183.41.29 (221.183.41.29)  45.490 ms 221.183.41.113 (221.183.41.113)  38.399 ms  33.005 ms
 7  * * 221.183.79.146 (221.183.79.146)  32.953 ms
 8  120.241.249.6 (120.241.249.6)  43.480 ms 120.241.249.22 (120.241.249.22)  44.842 ms *
 9  * * *
...
29  * * *
30  * * *

traceroute命令输出解释:

  • 第一列:跳数(Hop Number)。
    • 每个跳数代表数据包在到达目标主机途中经过的一个路由器或网络设备。
  • 第二列:IP 地址。
    • 这是数据包在该跳数到达的路由器或网络设备的 IP 地址。
    • 如果能够解析 IP 地址,也可能会显示相应的主机名。
  • 接下来的三列:往返时间(RTT,Round-Trip Time)。
    • 这显示了数据包从发送到接收到返回的时间,单位通常是毫秒(ms)。
    • 通常会有三组 RTT 值,这是因为 traceroute 默认发送三个探测数据包到每个跳数。
    • 如果 RTT 显示为星号(* * *),这通常表示在该跳点发生了数据包丢失或超时,或者网络设备配置为不响应探测包。

使用场景:

  • 确定网络延迟的原因。(观察 traceroute 输出中跳数的增加、识别延迟峰值RTT等)
  • 识别网络中可能的瓶颈。
  • 了解数据包的路由路径。
  • 诊断网络连接问题。

注意事项:

  • 某些网络设备可能会阻止或限制traceroute请求,导致结果不完整。
  • 使用traceroute可能会受到网络安全策略的限制。

常见问题

  • 部分跳数显示为星号(* * *):
    • 这可能是由于中间路由器配置了防火墙,禁止ICMP或者UDP探测包的返回。
  • 到达某一跳后停止:
    • 可能是由于中间某个路由器配置了防火墙,导致后续探测包无法通过。
  • 不同的操作系统可能有不同的实现:
    • traceroute 在不同操作系统上的实现可能有所差异,例如在Windows上对应的工具是 tracert。

2.3 mtr - 结合了ping 和 traceroute功能的命令

mtr(My Traceroute)结合了ping和traceroute的功能,提供实时更新的网络路径信息。

基本用法: 使用mtr跟踪到某个主机的路径

1
mtr host/ip
  • -c: 设置显示次数
  • -r: 生成报告

2.4 ifconfig 命令

ifconfig是一个网络管理工具,用于配置、控制和查询网络接口。在许多旧的Linux发行版中,ifconfig是查看和配置网络接口的主要工具。要查看IP地址,只需在终端中输入 ifconfig 命令。这将显示系统中所有网络接口的详细信息,包括IP地址、子网掩码和MAC地址。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@ ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:68:8d:60  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe68:8d60/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24890 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15457 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:36589294 (34.8 MiB)  TX bytes:2070249 (1.9 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

ifconfig 命令的输出包含多个字段,每个字段提供不同的网络信息。在上面输出中,可以看到两个网络接口:eth0 和 lo。

  • eth0: 这是一个以太网接口。

    • Link encap:Ethernet: 链路封装类型,以太网。
    • HWaddr 00:0c:29:68:8d:60: 硬件地址(MAC地址)。
    • inet addr:192.168.1.100: IPv4地址。
    • Bcast:192.168.1.255: 广播地址。
    • Mask:255.255.255.0: 子网掩码。
    • inet6 addr: fe80::20c:29ff:fe68:8d60/64 Scope:Link: IPv6地址。
    • UP BROADCAST RUNNING MULTICAST: 接口状态。
    • MTU:1500: 最大传输单元。
    • RX packets:24890: 接收到的数据包数量。
    • TX packets:15457: 发送的数据包数量。
    • RX bytes:36589294 (34.8 MiB): 接收到的字节数。
    • TX bytes:2070249 (1.9 MiB): 发送的字节数。
  • lo: 这是一个本地回环接口。

    • inet addr:127.0.0.1: IPv4地址。
    • Mask:255.0.0.0: 子网掩码。
    • inet6 addr: ::1/128 Scope:Host: IPv6地址。
    • UP LOOPBACK RUNNING: 接口状态。
    • MTU:65536: 最大传输单元。
    • RX packets:8: 接收到的数据包数量。
    • TX packets:8: 发送的数据包数量。
    • RX bytes:560 (560.0 B): 接收到的字节数。
    • TX bytes:560 (560.0 B): 发送的字节数。

ss - Socket Statistics

ss 命令是一个功能强大的工具,它提供了对 Linux 系统中网络套接字的深入洞察。通过灵活使用各种选项和过滤器,可以快速获取所需的网络信息,从而更有效地管理和调试网络连接。

ss 命令是 socket statistics 的缩写,是一个用于显示套接字(socket)统计信息的工具。它提供了比 netstat 更快、更详细的网络连接、监听端口等信息。它是 iproute2 包的一部分,大多数现代 Linux 发行版默认已经安装了这个包。如果系统中没有 ss 命令,可以通过包管理器安装:

1
2
3
4
5
# 对于基于 Debian 的系统(如 Ubuntu),使用:
apt-get install iproute2

# 对于基于 Red Hat 的系统(如 CentOS),使用:
yum install iproute

ss 命令的基本语法如下:

1
ss [options] [filter]

options 是命令行选项,filter 是用来过滤输出的表达式。

常用的选项包括:

  • -n, –numeric:以数字格式显示地址和端口。
  • -t, –tcp:仅显示 TCP 套接字信息。
  • -u, –udp:仅显示 UDP 套接字信息。
  • -l, –listening:仅显示处于监听状态的套接字。
  • -a, –all:显示所有套接字信息,包括监听和非监听状态的套接字。
  • -r, –resolve:尝试解析服务名为主机名。
  • -p, –processes:显示与每个套接字相关联的进程信息,包括进程 ID 和进程名称。
  • -e, –extended:显示详细的 TCP 套接字信息。
  • -s, –summary:显示套接字统计摘要信息。

ss 命令的常见用法:

  1. 不带任何选项的情况下,ss 将显示所有类型的套接字。

  2. 使用 -t(TCP)、-u(UDP)或 -a(所有套接字)来过滤特定类型的套接字。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
ss -t    # 只显示 TCP 套接字
ss -u    # 只显示 UDP 套接字
ss -a    # 显示所有类型的套接字

# 示例
[root@mubei ~]# ss -t
State      Recv-Q Send-Q             Local Address:Port                              Peer Address:Port                
ESTAB      0      0                   172.16.16.63:47464                             169.254.0.55:lsi-bobcat           
ESTAB      0      0                   172.16.16.63:37298                            169.254.0.138:8186                 
ESTAB      0      28                  172.16.16.63:ssh                                39.128.6.43:8158                 
ESTAB      0      0                   172.16.16.63:47466                             169.254.0.55:lsi-bobcat           
ESTAB      0      0          [::ffff:172.16.16.63]:6022                   [::ffff:122.226.147.98]:52556                
ESTAB      0      0          [::ffff:172.16.16.63]:6022                   [::ffff:122.226.147.98]:55352                
ESTAB      0      239        [::ffff:172.16.16.63]:afs3-fileserver           [::ffff:39.128.6.43]:19130                
ESTAB      0      0          [::ffff:172.16.16.63]:6022                   [::ffff:122.226.147.98]:58140                
ESTAB      0      0          [::ffff:172.16.16.63]:6022                      [::ffff:80.94.92.86]:56212                
ESTAB      0      0          [::ffff:172.16.16.63]:6022                   [::ffff:122.226.147.98]:60930  
  1. 使用 -l 选项可以查看所有监听状态的套接字:
1
ss -l
  1. 通过 -p 选项查看特定进程的套接字:
1
ss -lnp | grep :8080 # 查看端口号为 8080的套接字
  • -l:显示监听状态的套接字。
  • -n:不解析服务名称,直接显示数字。
  • -p:显示进程信息。
  1. -o 选项可以显示每个套接字的详细信息,如状态、接收/发送缓冲区大小等:
1
2
3
[root@mubei ~]# ss -o state established '( dport = :22 or sport = :22 )'
Netid  Recv-Q Send-Q               Local Address:Port                                Peer Address:Port                
tcp    0      28                    172.16.16.63:ssh                                  39.128.6.43:8158                  timer:(on,298ms,0)
  1. 使用 state 选项可以过滤特定状态的套接字,如 established、listen 等。
1
ss state established
  1. 通过 -r 选项解析 IP 和端口号
1
2
# 显示 TCP 协议的 sockets 只显示处于监听状态的端口:
ss -tlr
  1. 本地和目标地址过滤
1
2
3
4
5
6
7
# 匹配本地地址和端口号
ss src 192.168.2.152

# 匹配远程地址和端口号
ss dst 192.168.2.152
ss dst 192.168.2.153:50460
ss dst 192.168.2.153:mysql
  1. 通过 TCP 的状态进行过滤

ss 命令还可以通过 TCP 连接的状态进行过滤,支持的 TCP 协议中的状态有:established、syn-sent、fin-wait-1、fin-wait-2、closed、close-wait、last-ack、listen、closing。

1
2
3
4
5
6
7
8
# 列举出处于 FIN-WAIT-1 状态的源端口为 80 或者 443,目标网络为 192.168.2/24 所有 tcp 套接字
ss -o state FIN-WAIT-1 dst 192.168.2/24

# 显示所有状态为 Established 的 HTTP 连接
ss state listening '( sport = :http or dport = :http )'

# 使用 ipv4 时的过滤语法
ss -4n state listening
  1. 列出所有连接到 2181 端口的连接和对 2181 端口的监听
1
ss -r state all dport = :2181