ping命令原理

ping命令是用来探测本机与网络中另一主机之间是否可通的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。
ping命令位于7层协议的网络层。
ping 命令是基于 ICMP 协议来工作的,ICMP为 Internet 控制报文协议。ping 命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。

对方服务器禁用ping 命令的原因

出于安全因素或避免网络拥堵等原因,禁用了ping。ping除了用在网络诊断上,还为网络攻击者查找潜在攻击目标提供了方便;不响应ping可以降低系统的安全风险。

操作方法
Linux系统可以通过系统内核参数或防火墙来禁止ping。

  • 内核参数禁用ping
    如果你想禁用ping,只需要设置内核参数icmp_echo_ignore_all,此参数如果设置为非0,Linux会忽略所有ICMP_ECHO请求包。
[root@ljh2020 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这个命令会立即生效,如果需要启用ping命令,将这个参数设置为0即可。

[root@ljh2020 ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

当然,这个设置只对当前环境生效,如果服务器重启时,这个设置就会失效。如果要永久生效,那么可以在配置文件/etc/sysctl.conf 增加参数net.ipv4.icmp_echo_ignore_all = 1,然后使用sysctl -p使之生效。当然,你也可以使用下面命令实现:

禁止ICMP包通行   echo net.ipv4.icmp_echo_ignore_all=1 >>/etc/sysctl.conf
允许ICMP包通行   echo net.ipv4.icmp_echo_ignore_all=0 >>/etc/sysctl.con
  • 防火墙禁用ping
    通过防火墙层面禁用ping,可以使用下面命令
 # iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP 

执行上面命令后,就会在/etc/sysconfig/iptables里面多了下面专业这样一条规则。然后使用命令service iptables restart重启防火墙服务,就不能ping了

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited   

个人在测试时,发现如果/etc/sysconfig/iptables里面如果还有下面这样一条规则,那么上面命令就不会生效。所以在使用命令时,最后检查一下配置文件。

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT  

当然,你可以直接设置iptables的配置文件,在/etc/sysconfig/iptables里面,直接修改

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT   #允许ping
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j DROP     #禁止ping   

注意,可能不同版本的防火墙设置有所区别,这里只在RHEL 5下面测试过,并没有测试其它平台。

ICMP协议

简述
ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了想Ping和Tracert这样的诊断程序。

格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。

各字段说明
类型:占一字节,标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。
代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。
校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与在我们介绍IP报头中的校验和计算方法是一样的。
标识:占两字节,用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0。

ping用法

1、用来检测网络的连通情况和分析网络速度
2、根据域名得到服务器 IP
3、根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量。

命令参数:

  • -d 使用Socket的SO_DEBUG功能。
  • -f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
  • -n 只输出数值。
  • -q 不显示任何传送封包的信息,只显示最后的结果。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
  • -R 记录路由过程。
  • -v 详细显示指令的执行过程。
  • -c 数目:在发送指定数目的包后停止。
  • -i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
  • -I 网络界面:使用指定的网络界面送出数据包。
  • -l 前置载入:设置在送出要求信息之前,先行发出的数据包。
  • -p 范本样式:设置填满数据包的范本样式。
  • -s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
  • -t 存活数值:设置存活数值TTL的大小。

使用示例

1、我们通常会用它来直接 ping ip地址,来测试网络的连通情况。

[root@ljh2020 ~]# ping 127.0.0.1
PING 127.0.01 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.022 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.023 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.034 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.029 ms

参数说明:

  • bytes 值:数据包大小,也就是字节。
  • time 值:响应时间,这个时间越小,说明你连接这个地址速度越快。
  • TTL 值:Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。可以通过 Ping 返回的 TTL 值大小,粗略地判断目标系统类型是 Windows 系列还是 UNIX/Linux 系列。
    注:
  • 默认情况下,Linux 系统的 TTL 值为 64 或 255,WindowsNT/2000/XP 系统的 TTL 值为 128,Windows98 系统的 TTL 值为 32,UNIX 主机的 TTL 值为 255。
  • 因此一般 TTL 值:100~130ms 之间为Windows 系统 ;240~255ms 之间为UNIX/Linux 系统。

2、Linux中需要手动终止命令ctrl+c,也可以使用-c 来指定次数

[root@ljh2020 ~]# ping -c 2 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.021 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.013/0.017/0.021/0.004 ms

3、ping域名,获取ip

[root@ljh2020 ~]# 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=51 time=12.4 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=51 time=12.4 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 12.427/12.456/12.486/0.115 ms

4、-t 指定ttl(TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。)

[root@ljh2020 ~]# ping  -t 255 baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=51 time=12.4 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=51 time=12.4 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=51 time=12.4 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=51 time=12.4 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 12.461/12.477/12.497/0.137 ms   

5、-i 指定间隔时间
每2秒ping下百度

[root@ljh2020 ~]# ping  -i 2  baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=50 time=9.17 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=50 time=9.02 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 9.022/9.098/9.174/0.076 ms

6、-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。

[root@ljh2020 ~]# ping -f baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
.^C
--- baidu.com ping statistics ---
2062 packets transmitted, 2061 received, 0% packet loss, time 25232ms
rtt min/avg/max/mdev = 12.374/12.482/22.003/0.405 ms, pipe 2, ipg/ewma 12.242/12.465 ms

7、-s 设置发送包的大小

[root@ljh2020 ~]# ping -s 500  220.181.38.148
PING 220.181.38.148 (220.181.38.148) 500(528) bytes of data.
508 bytes from 220.181.38.148: icmp_seq=1 ttl=51 time=12.5 ms
508 bytes from 220.181.38.148: icmp_seq=2 ttl=51 time=12.5 ms
508 bytes from 220.181.38.148: icmp_seq=3 ttl=51 time=12.5 ms
508 bytes from 220.181.38.148: icmp_seq=4 ttl=51 time=12.5 ms
^C
--- 220.181.38.148 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 12.506/12.517/12.526/0.079 ms

8、多参数使用
-i 3 发送周期为 3秒 -s 设置发送包的大小为1024 -t 设置TTL值为 255

[root@ljh2020 ~]# ping -i 3 -s 1024 -t 255 220.181.38.148
PING 220.181.38.148 (220.181.38.148) 1024(1052) bytes of data.
1032 bytes from 220.181.38.148: icmp_seq=1 ttl=51 time=12.5 ms
1032 bytes from 220.181.38.148: icmp_seq=2 ttl=51 time=12.4 ms
^C
--- 220.181.38.148 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 12.476/12.497/12.518/0.021 ms

9、在pc端运行ping命令:

上图显示的内容包括目标ip地址、ping的包大小(btyes)、数据往返一次的用时(time)、发送的包数(Sent)、接收(Received)和丢失的包数(Lost:网络丢包多,tcp 协议会自动重发(tcp 三次握手,连接成功
连接成功后,开始数据交换,如果丢包了,重发一次),甚至重连),以及TTL值等。TTL值:是IP数据包在计算机网络中可以转发的最大跳数,根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量,也就是时长

3.什么情况下用这个命令

比如客户端程序在 pc 上运行,连接阿里云服务器程序不通, ping 一下阿里云主机IP,查看网络是否是通的。如果丢包次数过多,就说明服务端的网络不好

ping命令基本使用详解相关推荐

  1. 计算机网络ping用法,Ping命令及用法详解

    Ping命令的原理与作用 Ping命令可以测试计算机名和计算机的IP地址,验证与远程计算机的连接,通过向计算机发送ICMP( Internet Control and Message Protocal ...

  2. MAC OS 命令行使用详解

    MAC OS 命令行使用详解:https://blog.csdn.net/sun375867463/article/details/9812317 1 为什么要使用命令行/如何开启命令行? 许多功能在 ...

  3. 离线调用linux命令,GitHub - rinetd/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  4. 实验楼linux命令,GitHub - encorechow/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  5. spark常用的linux命令,GitHub - Sparkinzy/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  6. telnet 命令使用方法详解,telnet命令怎么用

    telnet 命令使用方法详解,telnet命令怎么用? 文章类型:电脑教程 原创:天诺时空   什么是Telnet? 对于Telnet的认识,不同的人持有不同的观点,可以把Telnet当成一种通信协 ...

  7. Linux系统常用命令及其使用详解大全

    Linux系统常用命令及其使用详解大全 整理了linux常用的命令,最长常用的也就几十个,cd,ls ,vi等等,有些容易忘记,经常拿出来看看. 其他的可以推荐一个网站,https://www.lin ...

  8. tail是Linux命令吗,linux系统中tail命令的使用详解

    Linux系统中tail命令是查看文件末尾内容的主要功能,下面由学习啦小编为大家整理了linux系统中tail命令的使用详解,希望对大家有帮助! linux系统中tail命令的使用详解 1 命令功能 ...

  9. Linux命令ip addr详解

    Linux命令ip addr详解 熟悉Linux操作系统的同学对于ip addr命令应该不陌生,知道它是用来查看本地IP地址的,除了IP地址,其它额外的信息有必要了解一下. root@test:~# ...

最新文章

  1. 创业冲突的五种解决方法是_当创业合伙人发生冲突时,最好的解决办法看这5招...
  2. dotnet pack 打包文件版本号引起 Could not load file or assembly 问题
  3. vc如何打开plt图像_opencv_python从zero到hero————之图像基本操作01
  4. Atitit layout art 布局的艺术目录1. SpringLayout 类 弹簧布局管理器 12. BoxLayout( html默认布局) 11.SpringLayout
  5. ARC094F Normalization
  6. 《Linux/UNIX系统编程手册(上、下册)》
  7. 零基础学习CAD机械软件:02课CAD软件的启动和退出
  8. 页面关键词密度 和布局 ,内页
  9. access specifier
  10. WGCLOUD和ZABBIX有什么不一样
  11. Markdown排版微信公众号文章
  12. UBUNTU使用RTL8811CU网卡(包含树莓派)
  13. Arduino测试一块5路带自锁开关输入模块
  14. php从气象局获取天气预报并保存到服务器
  15. 几种常用图像处理开源库简介及使用总结
  16. 2022-2027年中国纪录片行业市场全景评估及发展战略规划报告
  17. 编写优质嵌入式C代码
  18. swift新手进阶30天一 自定义上图片下文字的UIButton的几种方式
  19. mall4j的小程序商城(java)
  20. 升级版Conflux Studio,来了!

热门文章

  1. YTU 2451: 股市风云
  2. 基于51单片机16*32点阵显示屏的设计与实现
  3. 使用Vscode调试vue代码
  4. Python入门如何给自己写一个文字小游戏?一只小白的Python游戏
  5. 计算机网络发展及相关概念
  6. 升级 Mellanox ConnectX-3 EN 10/40 Gbps 网卡固件
  7. OpenGLES(八)GPUImage滤镜链与将滤镜修改后的图片保存到相册
  8. 算法设计与分析:分治法输出数字旋转方阵
  9. TI公司示例下载方式
  10. 基于Android NFC传感器读取身份证信息demo