acamposm / ping
Ping 使用 ICMP 协议的强制 ECHO_REQUEST 数据报来从主机或网关获取 ICMP ECHO_RESPONSE。
Requires
- php: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.23
- phpunit/phpunit: ^9
README
此 ping 类允许从 Laravel 应用程序中发送 ping 请求,它基于 Linux iputils 包中的 PING 命令。
Ping 使用 ICMP 协议的强制 ECHO_REQUEST 数据报来从主机或网关获取 ICMP ECHO_RESPONSE。ECHO_REQUEST 数据报(ping)具有 IP 和 ICMP 报头,然后是一个 struct timeval,最后是任意数量的填充字节,用于填充数据包。
安装
您可以通过 composer 安装此包,然后发布资产
Ping 2.1.0 版本之前,您可以使用以下命令安装:
composer require acamposm/ping
php artisan vendor:publish --provider="Acamposm\Ping\PingServiceProvider"
从 Ping 2.1.0 版本开始,您可以使用以下命令安装:
composer require acamposm/ping php artisan ping:install
用法
对于基本用法,您只需要将 IP 地址作为第一个参数创建,然后运行...
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Create an instance of PingCommand $command = (new PingCommandBuilder('192.168.1.1')); // Pass the PingCommand instance to Ping and run... $ping = (new Ping($command))->run();
更改计数
在发送指定数量的 ECHO_REQUEST 数据包后停止。带有截止日期选项时,ping 等待指定数量的 ECHO_REPLY 数据包,直到超时。
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Change the number of packets to send to 10 $command = (new PingCommandBuilder('192.168.1.1'))->count(10); $ping = (new Ping($command))->run();
更改间隔
在发送每个数据包之间等待的秒数。默认情况下,通常在发送每个数据包之间等待一秒钟,或者在洪水模式中不等待。只有超级用户可以将间隔设置为小于 0.2 秒的值。
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Change interval to 0.5 seconds between each packet $command = (new PingCommandBuilder('192.168.1.1'))->interval(0.5); $ping = (new Ping($command))->run();
更改数据包大小
指定要发送的数据字节数。默认为 56,与 8 个字节的 ICMP 报头数据结合后,转换为 64 个 ICMP 数据字节。
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Change packet size to 128 $command = (new PingCommandBuilder('192.168.1.1'))->packetSize(128); $ping = (new Ping($command))->run();
更改超时
等待响应的时间(以秒为单位)。该选项仅影响没有响应时的超时,否则 ping 等待两个 RTT。
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Change timeout to 10 seconds $command = (new PingCommandBuilder('192.168.1.1'))->timeout(10); $ping = (new Ping($command))->run();
更改生存时间
ping 只用。设置 IP 生存时间。
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; // Change Time To Live to 128 $command = (new PingCommandBuilder('192.168.1.1'))->ttl(128); $ping = (new Ping($command))->run();
示例输出
在这里,您可以看到 ping 命令的三个输出示例...
- 第一个使用域名。
- 第二个使用 IPv4 地址
- 第三个使用 IPv6 地址
在基于 Windows 的服务器上针对 https://google.com 的示例输出
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; $command = (new PingCommandBuilder('https://google.com'))->count(10)->packetSize(200)->ttl(128); // Sample output from Windows based server $ping = (new Ping($command))->run(); dd($ping);
{
"host_status": "Ok",
"raw": [
"",
"Haciendo ping a google.com [216.58.213.142] con 200 bytes de datos:",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=37ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=37ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"",
"Estadísticas de ping para 216.58.213.142:",
" Paquetes: enviados = 10, recibidos = 10, perdidos = 0",
" (0% perdidos),",
"Tiempos aproximados de ida y vuelta en milisegundos:",
" Mínimo = 36ms, Máximo = 37ms, Media = 36ms",
],
"latency": 0.036,
"rtt": {
"avg": 0.036,
"min": 0.036,
"max": 0.037,
},
"sequence": {
"0": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"1": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"2": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"3": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=37ms TTL=115",
"4": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=37ms TTL=115",
"5": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"6": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"7": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"8": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
"9": "Respuesta desde 216.58.213.142: bytes=68 (enviados 200) tiempo=36ms TTL=115",
},
"statistics": {
"packets_transmitted": 10,
"packets_received": 10,
"packets_lost": 0,
"packet_loss": 0,
},
"options": {
"host": "google.com",
"count": 10,
"packet_size": 200,
"ttl": 120,
},
"time": {
"start": {
"as_float": 1596984650.5006,
"human_readable": "09-08-2020 14:50:50.500600",
},
"stop": {
"as_float": 1596984659.5802,
"human_readable": "09-08-2020 14:50:59.580200",
},
"time": 9.08,
},
}
从基于 Windows 的服务器到本地网关 IPv4 的示例输出
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; $command = (new PingCommandBuilder('192.168.10.254'))->count(10)->packetSize(200)->ttl(120); $ping = (new Ping($command))->run(); dd($ping);
{
"host_status": "Ok",
"raw": [
"",
"Haciendo ping a 192.168.10.254 con 200 bytes de datos:",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"",
"Estadísticas de ping para 192.168.10.254:",
" Paquetes: enviados = 10, recibidos = 10, perdidos = 0",
" (0% perdidos),",
"Tiempos aproximados de ida y vuelta en milisegundos:",
" Mínimo = 0ms, Máximo = 0ms, Media = 0ms",
],
"latency": 0.0,
"rtt": {
"avg": 0.0,
"min": 0.0,
"max": 0.0,
},
"sequence": {
"0": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"1": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"2": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"3": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"4": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"5": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"6": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"7": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"8": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
"9": "Respuesta desde 192.168.10.254: bytes=200 tiempo<1m TTL=255",
},
"statistics": {
"packets_transmitted": 10,
"packets_received": 10,
"packets_lost": 0,
"packet_loss": 0,
},
"options": {
"host": "192.168.10.254",
"count": 10,
"packet_size": 200,
"ttl": 120,
"version": 4,
},
"time": {
"start": {
"as_float": 1596985359.7592,
"human_readable": "09-08-2020 15:02:39.759200",
},
"stop": {
"as_float": 1596985368.7952,
"human_readable": "09-08-2020 15:02:48.795200",
},
"time": 9.036,
},
}
从基于 Windows 的服务器到链路本地 IPv6 地址的示例输出
use Acamposm\Ping\Ping; use Acamposm\Ping\PingCommandBuilder; $command = (new PingCommandBuilder('fe80::6c42:407d:af01:9567'))->count(10)->packetSize(200)->ttl(120); $ping = (new Ping($command))->run(); dd($ping);
{
"host_status": "Ok",
"raw": [
"",
"Haciendo ping a fe80::6c42:407d:af01:9567 con 200 bytes de datos:",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"",
"Estadísticas de ping para fe80::6c42:407d:af01:9567:",
" Paquetes: enviados = 10, recibidos = 10, perdidos = 0",
" (0% perdidos),",
"Tiempos aproximados de ida y vuelta en milisegundos:",
" Mínimo = 0ms, Máximo = 0ms, Media = 0ms",
],
"latency": 0.0,
"rtt": {
"avg": 0.0,
"min": 0.0,
"max": 0.0,
},
"sequence": {
"0": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"1": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"2": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"3": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"4": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"5": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"6": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"7": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"8": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
"9": "Respuesta desde fe80::6c42:407d:af01:9567: tiempo<1m",
},
"statistics": {
"packets_transmitted": 10,
"packets_received": 10,
"packets_lost": 0,
"packet_loss": 0,
},
"options": {
"host": "fe80::6c42:407d:af01:9567",
"count": 10,
"packet_size": 200,
"ttl": 120,
"version": 6,
},
"time": {
"start": {
"as_float": 1596985675.4344,
"human_readable": "09-08-2020 15:07:55.434400",
},
"stop": {
"as_float": 1596985684.4659,
"human_readable": "09-08-2020 15:08:04.465900",
},
"time": 9.032,
},
}
测试
要运行测试,请在控制台中运行
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
感谢您考虑为改进此包做出贡献。请参阅 CONTRIBUTING 了解详细信息。
安全与漏洞
如果您发现任何安全相关的问题,请通过 angel.campos.m@outlook.com 发送电子邮件给 Angel Campos,而不是使用问题跟踪器。所有安全漏洞都将得到及时解决。
标准
符合以下标准的 php 包 IPv4 地址转换器
鸣谢
许可证
ping是一个开源包,遵循MIT许可协议(MIT)。更多信息请参阅许可文件。