linux常用网络工具汇总
-
- [7. 路由相关(查看)](#7. 路由相关(查看))
-
- [7.1 ip route show](#7.1 ip route show)
- [7.2 route](#7.2 route)
- [8. 路由追踪](#8. 路由追踪)
-
- [8.1 ping](#8.1 ping)
- [8.2 traceroute/tracert](#8.2 traceroute/tracert)
7. 路由相关(查看)
本节主要涉及查看路由
相关指令或工具。对于路由的增删改查 ,详细内容可以参考 https://blog.csdn.net/u010230019/article/details/138188515
7.1 ip route show
ip route
指配置路由器静态路由的命令,主要命令是在全局配置模式下。该命令选项较多,不过一般使用默认选项(即不填选项)就可以了
sh
[root@node-252 ~]# yum provides ip
iproute-4.11.0-30.el7.x86_64 : Advanced IP routing and network device configuration tools
ip
命令包含在iproute
工具包中,一般由linux系统默认安装
- 选项
json
option:
to SELECTOR (default):仅从给定的目的地范围内选择路线。 SELECTOR由一个可选的修饰符(root 、match、exact)和一个前缀组成。 root PREFIX选择前缀不小于PREFIX的路由。 F.e. 根0/0选择整个路由表。 match PREFIX选择前缀不超过PREFIX的路由。 比如: 匹配10.0/16选择10.0/16、10/8和0/0,但不选择10.1/16和10.0.0/24。 精确的PREFIX(或仅PREFIX)选择具有此精确前缀的路由。 如果这两个选项都不存在,则ip假定根目录为0/0,即列出整个表。
tos TOS:仅选择具有给定TOS的路线
table TABLEID:显示此表中的路由。默认设置是显示主表。TABLEID可以是实表的ID,也可以是特殊值之一:
all:列出所有表
cache:转储路由缓存
cloned:缓存列表克隆的路由,即由于某些路由属性(例如MTU)已更新而从其他路由动态分叉的路由。 实际上,它等效于表缓存。
from SELECTOR:与to的语法相同,但它绑定的是源地址范围而不是目的地。请注意,from选项仅适用于克隆路由
protocol RTPROTO:只列出该协议的路由
scope SCOPE_VAL:仅列出具有此范围的路由
type TYPE:仅列出该类型的路由
dev NAME:仅列出通过此设备的路由
via PREFIX:仅列出通过前缀选择的nexthop路由器的路由
src PREFIX:仅列出具有按前缀选择的首选源地址的路由
realms FROMREALM/TOREALM/REALMID:仅列出具有这些领域的路由。
常用命令示例
命令 | 说明 |
---|---|
ip route 或:ip r 或:ip route show 或:ip route list | 显示系统路由 |
ip route show [exact] 169.254.0.0/16 | 精准查看具体某一条路由 |
ip route show match 172.18 | 模糊匹配某一条路由 |
ip route show src 172.18.16.0/20 | 仅列出源地址前缀为172.18.16.0/20的路由 |
ip route show via 172.18.31.253 | 仅列出通过前缀选择的为该ip的路由 |
ip -s route show cache 192.168.100.17 | 显示来自路由缓存的统计信息 |
ip route show table local 或:ip route list table local | 查看本地路由表 |
示例
sh
ip route show|column -t
default via 192.168.202.2 dev ens33 proto dhcp metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-0c2fb3c8973f proto kernel scope link src 172.18.0.1
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
192.168.202.0/24 dev ens33 proto kernel scope link src 192.168.202.128 metric 100
可以看到笔者的虚拟机的默认路由是
sh
default via 192.168.202.2 dev ens33 proto dhcp metric 100
以下是一个典型的 ip route show 命令返回的输出示例:
sh
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100
解析这个输出,我们可以关注以下几个部分:
- 默认网关:
default via 192.168.1.1 dev eth0
表示默认的网关地址是192.168.1.1
,通过的网络接口是eth0
。 - 目的网络:
192.168.1.0/24
表示目的网络是192.168.1.0 到 192.168.1.255
,子网掩码为255.255.255.0
。 - 网络接口:
dev eth0
表示使用的网络接口是eth0
。 - 路由协议:
proto dhcp
表示路由是通过DHCP
协议学习的,如果是proto kernel
则表示是由内核直接配置的。 - 路由范围:
scope link
表示路由的范围是链路内的,scope global
则表示是全局有效的。 - 源地址:
src 192.168.1.10
表示发送数据包时使用的源 IP 地址是192.168.1.10
。 - 接口指标:
metric 100
表示路由的度量值是100
。
7.2 route
route
命令是Linux系统中的一个网络管理工具,用于显示和操作IP路由表。它可以用来查看当前系统的路由表信息,添加、删除或修改路由表项,以及显示路由表中的详细信息。route命令可以帮助用户诊断和解决网络连接问题,以及进行网络规划和优化。
该命令包含在net-tools
工具包中
bash
[root@node-252 ~]# yum provides route
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
- 命令格式
sh
route [-nNvee] [-FC] [<AF>] List kernel routing tables
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.
- 常用参数
sh
-n 直接使用 IP 地址,不进行 DNS 解析主机
-ee 显示更详细的路由信息
add 添加路由信息
del 删除路由信息
target 指定目标网络或主机。可以用 IP 地址或主机/网络名
-net 到一个网络的路由,后面接的是一个网络号地址
-host 到一个主机的路由,后面接的是一个主机地址
netmask NM 为添加的路由指定网络掩码,NM表示掩码地址,如255.255.255.0
gw GW 为发往目标网络/主机的任何分组指定网关
dev lf 指定由哪个网络设备出去,后面接网络设备名,如 etho 等
- 示例
bash
[root@node-252 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0c2fb3c8973f
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.202.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@node-252 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.202.2 0.0.0.0 UG 100 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0c2fb3c8973f
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.202.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
输出信息可以参考ip route show
分析,大致相似。
8. 路由追踪
8.1 ping
ping
(Packet Internet Groper
),中文名称因特网包探索器,是一种计算机网络管理应用,该程序通常被用于确认因特网上的一台主机是否可达 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 其原理是向特定的目的主机发送 ICMP
(Internet Control Message Protocol
因特网报文控制协议)Echo回显请求(Echo Request
)报文,并根据回复的ICMP回显应答消息(Echo Reply
),测试目的站是否可达并获取连接的丢包率和平均往返时间等有关状态信息。
严格意义讲,ping
并不算是路由追踪,但是可以探测到指定主机是否可达。
- 命令格式
sh
ping [option] destination
- 常用参数
sh
-c: 指定发送回显请求的次数。
-i: 设定发送请求的间隔时间。
-s: 指定发送的数据包大小。
-t: 设置TTL值。
TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。
- 示例
无参数,linux中需要手动中断
bash
[root@node-252 ~]# ping www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=128 time=23.8 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=128 time=23.6 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=3 ttl=128 time=23.1 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=4 ttl=128 time=23.1 ms
...
请求3
次,间隔4
秒,数据包32
b,ttl的值为64
。
sh
[root@node-252 ~]# ping -c 3 -i 4 -s 32 -t 64 www.baidu.com
PING www.a.shifen.com (220.181.38.150) 32(60) bytes of data.
40 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=128 time=23.9 ms
40 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=128 time=23.7 ms
40 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=3 ttl=128 time=23.8 ms
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 8016ms
rtt min/avg/max/mdev = 23.739/23.851/23.981/0.160 ms
8.2 traceroute/tracert
traceroute
和tracert
是用于网络故障诊断的工具,它们在功能上相似,但存在一些差异。
- 功能相似:两者都是用于诊断网络连接问题的工具,通过发送一系列的数据包并分析返回的信息,帮助用户了解数据从源地址到目标地址经过的路径、每一段的延迟等信息。这些信息对于网络管理员在排查网络故障、优化网络性能等方面非常有用。
- 实现协议不同 :
traceroute
主要基于ICMP
(Internet Control Message Protocol)协议实现,通过操纵ICMP请求报文的TTL(Time To Live)值和观察该报文被抛弃的返回信息,来遍历到数据包传输路径上的所有路由器。而tracert
(Windows系统下的tracert命令)则主要基于UDP
协议实现,通过向目标发送不同IP生存时间(TTL)值的UDP数据包,并分析返回的ICMP超时消息来确定路由路径。 - 命令参数和用法:虽然两者在功能上相似,但在具体的命令参数和用法上可能存在差异。例如,traceroute命令可能提供更多的选项和参数,以便用户根据需要进行更详细的网络诊断。
- 平台差异 :traceroute命令在类Unix系统(如Linux)中更为常见,而tracert命令则在Windows系统中更为常见。这反映了不同操作系统对网络诊断工具的选择和偏好。
traceroute(linux)
traceroute
命令利用ICMP
协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP 呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。
- 安装
sh
[root@node-252 ~]# yum provides traceroute
3:traceroute-2.0.22-2.el7.x86_64 : Traces the route taken by packets over an IPv4/IPv6 network
- 常用选项
sh
-I:使用ICMP Echo模式发送数据包。这是traceroute命令的默认模式。
-U:使用UDP模式发送数据包。该模式下的traceroute命令需要以root权限运行。
-T:使用TCP模式发送数据包。同样,该模式下的traceroute命令需要以root权限运行。
-n:不要解析IP地址为主机名,以IP地址形式显示主机名。
-s 源地址:指定源地址,可以是主机名或IP地址。
-p 端口号:指定源端口,以查找防火墙规则或过滤器的规则对目标主机的响应是否过滤。默认端口号通常为33434(UDP模式)。
-q 查询次数:设置查询次数,默认值为3。每次查询会增加TTL值,直到到达目标主机或达到最大的TTL值。
-m 跳数:设置最大的TTL值,默认值为30。该值指定了数据包能经过的最大路由器数量。当数据包的TTL值达到该值时,数据包会被丢弃。
-w 等待时间:指定每个数据包的超时时间。
- 示例
无参数
sh
[root@dbc-server-554 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets
1 gateway (192.168.5.1) 0.969 ms 1.646 ms 2.341 ms
2 172.16.12.3 (172.16.12.3) 1.616 ms 1.609 ms 1.600 ms
3 59.46.19.1 (59.46.19.1) 1.636 ms 2.556 ms 2.608 ms
4 219.148.240.197 (219.148.240.197) 4.602 ms 4.595 ms 4.587 ms
5 219.148.212.129 (219.148.212.129) 3.471 ms 219.148.213.65 (219.148.213.65) 8.469 ms 219.148.212.137 (219.148.212.137) 8.445 ms
6 * 202.97.30.209 (202.97.30.209) 14.345 ms 202.97.56.229 (202.97.56.229) 12.656 ms
7 36.110.245.110 (36.110.245.110) 14.580 ms 36.110.246.130 (36.110.246.130) 14.554 ms 36.110.248.238 (36.110.248.238) 15.565 ms
8 * * *
9 106.38.212.142 (106.38.212.142) 15.516 ms 18.466 ms 15.496 ms
10 106.38.212.146 (106.38.212.146) 19.506 ms * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
最大跳跃数为10
,查询2
次,间隔3
秒,不解析域名
sh
[root@dbc-server-554 ~]# traceroute -m 10 -q 2 -w 3 -n www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 10 hops max, 60 byte packets
1 * 192.168.5.1 1.858 ms
2 172.16.12.3 1.505 ms 1.502 ms
3 59.46.19.1 3.618 ms 2.581 ms
4 219.148.240.197 3.591 ms 3.585 ms
5 219.148.213.37 3.579 ms 219.148.213.25 7.487 ms
6 202.97.56.229 21.519 ms 202.97.56.237 11.403 ms
7 36.110.247.58 16.362 ms 36.110.245.214 20.441 ms
8 36.110.253.101 18.325 ms 36.110.245.77 15.306 ms
9 106.38.212.142 17.979 ms 17.958 ms
10 106.38.212.146 17.599 ms *
到达的案例
sh
[root@dbc-server-554 ~]# traceroute -m 50 -q 2 -w 3 -n www.jd.com
traceroute to www.jd.com (42.202.211.129), 50 hops max, 60 byte packets
1 192.168.5.1 2.222 ms 2.978 ms
2 172.16.12.3 1.667 ms 2.662 ms
3 59.46.19.1 2.643 ms 2.619 ms
4 219.148.254.229 11.533 ms 11.525 ms
5 219.148.213.37 2.606 ms 219.148.220.77 14.528 ms
6 219.148.213.82 7.739 ms 219.148.213.74 7.606 ms
7 * *
8 * *
9 * *
10 * *
11 42.202.211.129 7.989 ms 7.986 ms
[root@dbc-server-554 ~]# dig www.jd.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> www.jd.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14378
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.jd.com. IN A
;; ANSWER SECTION:
www.jd.com. 120 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 56 IN CNAME www.jd.com.s.galileo.jcloud-cdn.com.
www.jd.com.s.galileo.jcloud-cdn.com. 6 IN CNAME wwwv6.jcloudimg.com.
wwwv6.jcloudimg.com. 6 IN A 42.202.211.129
;; Query time: 63 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Aug 20 14:49:14 CST 2024
;; MSG SIZE rcvd: 169
注意
:如果使用虚拟机 ,并且网络模式是NAT ,那么使用traceroute一般都找不到路由路线路。切换到桥接模式就没有这个问题了。可能是因为网络地址转换出现的问题,具体不详。
bash
[root@node-252 ~]# traceroute www.jd.com -m 50 -w 2 -q 2
traceroute to www.jd.com (42.202.211.129), 50 hops max, 60 byte packets
1 gateway (192.168.202.2) 0.047 ms 0.027 ms
2 * *
3 * *
4 * *
5 * *
6 * *
7 * *
8 * *
...
[root@node-252 ~]# dig www.jd.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> www.jd.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57792
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;www.jd.com. IN A
;; ANSWER SECTION:
www.jd.com. 5 IN CNAME www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com. 5 IN CNAME www.jd.com.s.galileo.jcloud-cdn.com.
www.jd.com.s.galileo.jcloud-cdn.com. 5 IN CNAME wwwv6.jcloudimg.com.
wwwv6.jcloudimg.com. 5 IN A 42.202.211.129
;; Query time: 22 msec
;; SERVER: 192.168.202.2#53(192.168.202.2)
;; WHEN: Tue Aug 20 14:57:40 CST 2024
;; MSG SIZE rcvd: 169
[root@node-252 ~]# ping www.jd.com
PING wwwv6.jcloudimg.com (42.202.211.129) 56(84) bytes of data.
64 bytes from 42.202.211.129 (42.202.211.129): icmp_seq=1 ttl=128 time=23.3 ms
64 bytes from 42.202.211.129 (42.202.211.129): icmp_seq=2 ttl=128 time=13.7 ms
实际是通的。
tracert(windows)
tracert 是一个 Windows 系统自带的命令行工具,用于追踪网络数据包从本机到目标主机所经过的路由路径。如果你的系统中没有 tracert 命令,可能是因为系统环境变量中的路径没有包含该工具的位置,或者该工具被意外删除。
通常情况下,tracert 命令会随着系统安装自动安装。如果你无法使用,可以尝试以下步骤来解决:
- 打开"控制面板" -> "系统和安全" -> "系统" -> "高级系统设置"。
- 在"系统属性"窗口中,点击"环境变量"按钮。
- 在"环境变量"窗口,检查"系统变量"中的"Path"变量,确保它包含 C:\Windows\System32 路径。
- 如果路径不存在,点击"新建",然后输入 C:\Windows\System32,点击"确定"。
- 确认更改后,重新打开命令提示符窗口,尝试运行 tracert 命令。
如果上述步骤无法解决问题,可能是因为系统文件损坏或被恶意软件影响。
- 常用参数
dos
-d 不将节点主机名解析为 IP 地址,直接进行路由跟踪。当路由器不支持 ICMP/UDP/ICMPv6 数据包时,建议使用该选项。
-h maximum_hops 指定最多经过多少个节点进行路由跟踪,默认值为 30。
-j host-list 枚举一个节点列表,并在路由跟踪过程中只走该列表中的节点。
-w timeout 设置等待每个回复消息的超时时间,默认值为 4000 毫秒。
-R 跟踪路由时,使用"参考路由"而不是"严格源路由"。如果启用了该选项,则可以跨越某些无法到达但能够到达目标的路由器。
-S srcaddr 指定源地址。如果电脑上安装了多个网卡,该选项可以指定网卡发出路由跟踪请求。
-4 强制使用 IPv4 进行路由跟踪。
-6 强制使用 IPv6 进行路由跟踪。
target_name 要查询的目标 IP 地址或主机名。
- 常用组合
dos
racert -d target_name:不将节点主机名转换为 IP 地址。
tracert -h 20 target_name:设置最多经过 20 个节点进行路由追踪。
tracert -R target_name:使用"参考路由"而不是"严格源路由"。
- 示例
dos
C:\Users\Administrator>tracert www.jd.com
通过最多 30 个跃点跟踪
到 wwwv6.jcloudimg.com [42.202.211.129] 的路由:
1 1 ms <1 毫秒 <1 毫秒 10.0.82.1
2 1 ms 1 ms 1 ms 172.16.12.3
3 2 ms 1 ms 1 ms 59.46.19.1
4 * * * 请求超时。
5 2 ms * * 219.148.213.37
6 7 ms * * 219.148.214.210
7 * * * 请求超时。
8 154 ms 10 ms 9 ms 42.202.138.150
9 * * * 请求超时。
10 * * * 请求超时。
11 8 ms 7 ms 7 ms 42.202.211.129
跟踪完成。
在进行路由追踪时,请注意以下几点:
- 在进行路由跟踪时,可能会遇到一些无法到达的节点,此时 tracert 会结束追踪过程并返回报告信息。
- 在进行路由跟踪时,可能因为某些网络节点的安全限制而导致 tracert 命令无法收到反馈,但是不代表此节点不通。在这种情况下,可以尝试使用其他一些网络工具,例如 Ping 命令。