Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
exlends
Категории
  1. Home
  2. Categories
  3. Языки программирования
  4. JavaScript
  5. JavaScript: как сделать ping локального IP

JavaScript: как сделать ping локального IP

Scheduled Pinned Locked Moved JavaScript
1 Posts 1 Posters 18 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • kirilljsxK Offline
    kirilljsxK Offline
    kirilljsx
    js
    wrote on last edited by
    #1

    Всем дорого времени суток!
    Сейчас поделюсь как проверить доступность локального IP-адреса с помощью JavaScript.
    Для примера - это необходимо когда вы разрабатываете веб-интерфейс для домашней сети или IoT-устройств и хотите проверить их доступность.

    Отмечу!!! В браузере нет прямого доступа к ICMP-протоколу (на котором работает ping) из соображений безопасности. Но мы можем использовать обходные методы!
    Браузеры ограничивают низкоуровневые сетевые операции. Настоящий ping (ICMP) недоступен, но мы можем эмулировать его поведение с помощью HTTP-запросов.

    А вот как можно проверить доступность устройства в локальной сети через функция checkLocalDevice:

    /**
     * Проверяет доступность устройства в локальной сети
     * @param {string} ip - IP-адрес для проверки
     * @param {number} port - Порт для проверки (по умолчанию 80)
     * @param {number} timeout - Таймаут в миллисекундах (по умолчанию 3000)
     * @returns {Promise<boolean>} - Доступно ли устройство
     */
    
    async function checkLocalDevice(ip, port = 80, timeout = 3000) {
        const url = `http://${ip}:${port}`;
        
        try {
            const controller = new AbortController();
            const timeoutId = setTimeout(() => controller.abort(), timeout);
            
            const response = await fetch(url, {
                method: 'HEAD',
                mode: 'no-cors',
                signal: controller.signal
            });
            
            clearTimeout(timeoutId);
            return true;
        } catch (error) {
            return false;
        }
    }
    

    А проверить и вызвать ее мы можем вот так:

    // Пример проверки роутера
    checkLocalDevice('192.168.1.1')
        .then(available => {
            console.log(available ? 'Роутер доступен' : 'Роутер недоступен');
        });
    
    // Пример проверки кастомного устройства на порту 8080
    checkLocalDevice('192.168.1.100', 8080)
        .then(available => {
            console.log(available ? 'Устройство онлайн' : 'Устройство оффлайн');
        });
    

    Полный пример интерфейса

    <div id="network-scanner">
        <h2>Сканер локальной сети</h2>
        <button id="scan-btn">Проверить устройства</button>
        <ul id="results"></ul>
    </div>
    
    <script>
    const devices = [
        { name: "Роутер", ip: "192.168.1.1" },
        { name: "Принтер", ip: "192.168.1.50", port: 8080 },
        { name: "Сервер", ip: "192.168.1.100" }
    ];
    
    document.getElementById('scan-btn').addEventListener('click', async () => {
        const resultsElement = document.getElementById('results');
        resultsElement.innerHTML = '';
        
        for (const device of devices) {
            const li = document.createElement('li');
            li.textContent = `${device.name}: проверка...`;
            resultsElement.appendChild(li);
            
            const available = await checkLocalDevice(
                device.ip, 
                device.port || 80
            );
            
            li.textContent = `${device.name}: ${available ? '✅ онлайн' : '❌ оффлайн'}`;
            li.style.color = available ? 'green' : 'red';
        }
    });
    </script>
    

    Также подмечу, если вдруг у вас не будет что-то работать!

    1. Если устройство блокирует HTTP-запросы
    2. При строгих настройках CORS
    3. Для специализированных протоколов (не HTTP/WebSocket)
    4. В некоторых мобильных браузерах (Сафари там или еще прочая шляпа.)

    И еще раз повторюсь так сказать по p.s. - Настоящий ping в браузере сделать невозможно!

    1 Reply Last reply
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups