Итерация 2: сканирование сети
- Phinx миграции: network_ranges, scan_jobs, discovered_hosts, audit_log - Models: NetworkRange, ScanJob, DiscoveredHost - Repositories с CRUD для всех сущностей - NetworkScanner: ping sweep + TCP connect + ARP table + reverse DNS - PingScanner, TcpPortScanner (curl_multi для параллелизма), ArpTableReader - HostFingerprintService: vendor detection + confidence scoring - ScanJobRunner + CLI worker (bin/run-scan-worker.php) - Discovery UI: управление диапазонами, запуск скана, таблица находок - NetworkRangeController с валидацией CIDR - Обновлён public/index.php с DI конфигурацией для новых сервисов
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Domovoy\Services\Discovery;
|
||||
|
||||
class PingScanner
|
||||
{
|
||||
/**
|
||||
* Check if host is alive via ICMP ping.
|
||||
* Requires ping command in container.
|
||||
*/
|
||||
public function ping(string $ip, int $timeoutMs = 500): bool
|
||||
{
|
||||
// Use ping with timeout (Linux: -W in seconds)
|
||||
$timeoutSec = max(1, (int)ceil($timeoutMs / 1000));
|
||||
$output = [];
|
||||
$exitCode = 0;
|
||||
exec(sprintf('ping -c 1 -W %d %s 2>/dev/null', $timeoutSec, escapeshellarg($ip)), $output, $exitCode);
|
||||
return $exitCode === 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user