惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
D
Docker
美团技术团队
N
Netflix TechBlog - Medium
罗磊的独立博客
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
腾讯CDC
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
V
V2EX
L
LangChain Blog
博客园 - 【当耐特】
B
Blog RSS Feed
量子位
U
Unit 42
Engineering at Meta
Engineering at Meta
小众软件
小众软件
宝玉的分享
宝玉的分享
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
博客园 - 司徒正美
The Cloudflare Blog
The GitHub Blog
The GitHub Blog
T
Tailwind CSS Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
TaoSecurity Blog
TaoSecurity Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
Security @ Cisco Blogs

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis 业务规则引擎演变过程简述 微服务中的熔断算法 漏桶算法和令牌桶算法 jsonparser 为什么比标准库的 encoding/json 快 10 倍 ? zap 高性能设计与实现 HTTP Router 算法演进 fastcache 高性能设计与实现 Web 常见的三个安全问题 ants Code Reading Go 线程安全 map 方案选型 布隆过滤器 死锁、活锁、饥饿、自旋锁 sync.Pool Code Reading Go 内存管理概述 Go netpoll Code Reading goroutine 泄漏与检测 time/Timer Code Reading GMP Scheduler Code Reading Go channel 的 15 条规则和底层实现 为什么 Linux “一切皆文件” context.Context Code Reading runtime/HACKING.md Goland 最佳实践 互联网开发与金庸武学 为什么 Redis 6.0 引入多线程模型? Kubernetes 应用最佳实践 - 金丝雀发布 容器中如何正确配置 GOMAXPROCS ? singleflight Code Reading sync.Map Code Reading sync.Cond Code Reading sync.WaitGroup Code Reading sync.RWMutex Code Reading sync.Mutex Code Reading sync.Once Code Reading Go 无锁编程 sync/atomic Code Reading goroutine 交替打印奇偶数 GODEBUG Go 并发模式 Go 汇编 UUID 通用技术选型 Kubernetes 应用最佳实践 - 水平自动伸缩 Go 高性能 Tips fasthttp 为什么比标准库 net/http 快 10 倍 ? 技术文章配图指南 ChatGPT 初体验 Docker 网络原理概览 iptables 的五表五链 Kubernetes 应用最佳实践 - 亲和性和污点容忍度 Go 的反射与三大定律 Docker 官方提供的最佳实践 Go 语言内置的设计模式 HTTP1 到 HTTP3 的工程优化 Kubernetes 应用最佳实践 - Sidecar 模式 Kubernetes 应用最佳实践 - init 容器和钩子函数 为什么 recover 必须在 defer 中调用? 为什么 defer 的执行顺序和注册顺序不同? Go map 设计与实现 Go 切片扩容底层实现 Go 语言中的零拷贝 Go Delve 云原生和边缘计算简介 Kubernetes Pod 服务质量等级 Kubernetes 应用最佳实践 - 探针 Kubernetes 应用最佳实践 - 资源请求和限制 CDN 原理 Kubernetes 应用最佳实践 - 开篇 缓存策略和模式 Go 内存模型 Kubernetes 核心概念
ping 命令常用操作
2017-01-23 · via 蛮荆

2017-01-23 计算机网络 Linux 命令

ping 命令作用

ping 命令是网络管理中最常用的工具之一,用于测试网络连接的可达性。 通过向目标主机发送 ICMP请求,并等待目标主机的响应,判断目标主机是否在线以及网络的延迟情况。

ping 基于 ICMP 协议,通过计算 ICMP 回显响应报文与 ICMP 回显请求报文的时间差,来获得往返延时。这个过程并不需要特殊认证,常被很多网络攻击利用,比如端口扫描工具 nmap、组包工具 hping3 等等。为了避免这些问题,很多网络服务会把 ICMP 禁止掉,这种情况下就无法用 ping 测试网络服务的可用性和往返延时。

本文展示一些 ping 命令的常用操作。


基础用法

1. 基本 ping

测试目标主机的连通性:

$ ping dbwu.tech

# 输出如下
# 第一部分,是每个 ICMP 请求的信息,包括 ICMP 序列号(icmp_seq)、TTL(生存时间,或者跳数)以及往返延时(RTT)
ping dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=220.515 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=215.660 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=223.046 ms
^C

# 第二部分,则是 ICMP 请求的汇总
--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.660/219.740/223.046/3.065 ms

通过输出结果的统计数据,可以得到本机和目标主机的网络延迟 (最小值/平均值/最大值) 以及丢包情况。

除了使用 域名 作为参数之外,也可以使用 IP 地址作为参数:

$ ping 8.8.8.8

# 输出如下
ping 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=52 time=60.760 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=75.570 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=52 time=60.359 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 60.359/65.563/75.570/7.078 ms

2. 限制 ping 次数

默认情况下,ping 会一直发送请求,直到 (Ctrl + C) 手动停止,这时可以使用 -c 选项限制 ping 的次数:

# 指定发送 3 个 ping 请求,然后停止
$ ping -c 3 dbwu.tech

# 输出省略 ...

3. 指定 ping 请求时间的间隔

使用 -i 选项可以指定 ping 请求之间的间隔时间(以秒为单位):

$ ping -i 3 dbwu.tech

# 输出省略 ...
# 每两个 ping 请求之间等待 2 秒

4. 设置 ping 请求超时时间

使用 -W 选项可以设置等待响应的超时时间(以秒为单位):

# 设置超时的时间为 3 秒
# 3 秒之后,输出请求超时
$ ping -W 3 google.com

PING google.com (142.251.8.100): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
^C
--- google.com ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

5. 修改数据包大小

使用 -s 选项可以设置 ICMP 数据包的大小(以字节为单位):

$ ping -s 0 dbwu.tech

# 输出如下
PING dbwu.tech (172.67.147.110): 0 data bytes
8 bytes from 172.67.147.110: icmp_seq=0 ttl=50
8 bytes from 172.67.147.110: icmp_seq=1 ttl=50
8 bytes from 172.67.147.110: icmp_seq=2 ttl=50
...

6. 使用 IPv6

使用 ping6(在某些操作系统上为 ping -6)来 ping IPv6 地址:

7. 持续 ping

在 Windows 上,可以使用 -t 选项来持续 ping 目标,直到手动停止(Ctrl+C):

Linux 和 Mac 默认情况下 ping 会持续运行,直到手动停止,所以不需要设置该参数。

8. 显示 ping 统计信息

使用 -q 选项可以使 ping 只在开始和结束时显示统计信息,减少屏幕输出:

$ ping -c 3 -q dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes

--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.278/235.462/286.484/29.647 ms

9. ping 广播地址

ping 广播地址来测试局域网内所有主机的联通性:

注意:ping 广播地址可能被网络管理员禁用,防止网络滥用。

$ ping -b 192.168.31.255

# ping 广播被禁用
# 输出如下
ping: bad interface name

高级用法

1. 设置 ping 的 TTL 值

使用 -t 选项(Windows), -TTL 选项(Linux), -m 选项 (Mac) 来设置 TTL(生存时间)值:

# Mac
# 设置 TTL 为 1, 显然会触发 ICMP Time to live exceeded
$ ping -m 1 dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
92 bytes from 192.168.31.1: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 8544   0 0000  01  01 a477 192.168.31.138  104.21.71.166

Request timeout for icmp_seq 0

# 设置 TTL 为 64
$ ping -m 64 dbwu.tech

# 正常工作
# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=313.260 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=216.286 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=215.767 ms
^C
--- dbwu.tech ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 215.767/248.438/313.260/45.837 ms

2. 强制不进行 DNS 解析

使用 -n 选项可以禁止 ping 进行 DNS 解析,仅显示 IP 地址:

$ ping -n -c 5 dbwu.tech

# 输出如下
PING dbwu.tech (104.21.71.166): 56 data bytes
64 bytes from 104.21.71.166: icmp_seq=0 ttl=51 time=222.654 ms
64 bytes from 104.21.71.166: icmp_seq=1 ttl=51 time=246.398 ms
64 bytes from 104.21.71.166: icmp_seq=2 ttl=51 time=267.387 ms
64 bytes from 104.21.71.166: icmp_seq=3 ttl=51 time=288.952 ms
64 bytes from 104.21.71.166: icmp_seq=4 ttl=51 time=310.073 ms

--- dbwu.tech ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 222.654/267.093/310.073/30.752 ms

3. 指定网卡

在运行多个网卡的主机中,可以使用 -I 选项(Linux)指定网卡进行 ping 操作:

$ ping -I eth0 dbwu.tech

# 输出省略 ...

4. 改变数据包的时间戳格式

使用 -D 选项(Linux)可以在每个 ping 的输出中显示时间戳:

$ ping -D dbwu.tech

# 输出省略 ...