Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. JavaScript: как сделать ping локального IP

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

Запланировано Прикреплена Закрыта Перенесена JavaScript
1 Сообщения 1 Постеры 6 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsK Не в сети
    kirilljsK Не в сети
    kirilljs
    js
    написал отредактировано
    #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 ответ Последний ответ
    0

    Категории

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

    Контакты

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

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

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

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы