PHP如何通过ICMP协议构建原始套接字实现ping功能?

2026-04-06 09:330阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1218个文字,预计阅读时间需要5分钟。

PHP如何通过ICMP协议构建原始套接字实现ping功能?

推荐学习:PHP视频教程- PHP通过ICMP协议实现ping(原始套接字)- 最近想实现一个检测目标主机是否在线的功能,用百度查了查,大多是使用打开到某个端口的连接来判断目标主机是否在线。

推荐学习:《PHP视频教程》

PHP通过ICMP协议实现ping(原始套接字)

最近想实现一个检测目标主机是否在线的功能,用百度查了查,多是使用打开到某个端口的连接来判断目标主机是否在线的。如Windows系统3389端口(RDP)和*nix系统的22端口(SSH)。

但这样会出现一个问题,目标主机如果没有开放这些端口,则会导致判断上的错误。某个端口不开放并不代表目标主机离线。

由于大多数设备都会回应ping,由此想到了使用ping来实现这个功能。再次查询百度,发现大多数教程都使用exec()函数调用系统ping命令来实现,这显然很不安全。

所以最终决定使用PHP提供的原始套接字,自己构建ICMP包来实现ping。

PHP如何通过ICMP协议构建原始套接字实现ping功能?

要构建一个ICMP包,首先我们要了解ICMP包的结构。

可以看到,一个标准的ICMP包由8位类型,8位代码,16位校验和,16位ID,16位序列号和数据组成。接下来,我们就通过PHP构建一个这样的数据包。

阅读全文

本文共计1218个文字,预计阅读时间需要5分钟。

PHP如何通过ICMP协议构建原始套接字实现ping功能?

推荐学习:PHP视频教程- PHP通过ICMP协议实现ping(原始套接字)- 最近想实现一个检测目标主机是否在线的功能,用百度查了查,大多是使用打开到某个端口的连接来判断目标主机是否在线。

推荐学习:《PHP视频教程》

PHP通过ICMP协议实现ping(原始套接字)

最近想实现一个检测目标主机是否在线的功能,用百度查了查,多是使用打开到某个端口的连接来判断目标主机是否在线的。如Windows系统3389端口(RDP)和*nix系统的22端口(SSH)。

但这样会出现一个问题,目标主机如果没有开放这些端口,则会导致判断上的错误。某个端口不开放并不代表目标主机离线。

由于大多数设备都会回应ping,由此想到了使用ping来实现这个功能。再次查询百度,发现大多数教程都使用exec()函数调用系统ping命令来实现,这显然很不安全。

所以最终决定使用PHP提供的原始套接字,自己构建ICMP包来实现ping。

PHP如何通过ICMP协议构建原始套接字实现ping功能?

要构建一个ICMP包,首先我们要了解ICMP包的结构。

可以看到,一个标准的ICMP包由8位类型,8位代码,16位校验和,16位ID,16位序列号和数据组成。接下来,我们就通过PHP构建一个这样的数据包。

阅读全文