<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JavaScript: как сделать ping локального IP]]></title><description><![CDATA[<p dir="auto">Всем дорого времени суток!<br />
Сейчас поделюсь как проверить доступность локального IP-адреса с помощью JavaScript.<br />
Для примера - это необходимо когда вы разрабатываете веб-интерфейс для домашней сети или IoT-устройств и хотите проверить их доступность.</p>
<p dir="auto"><strong>Отмечу</strong>!!! В браузере нет прямого доступа к ICMP-протоколу (на котором работает ping) из соображений безопасности. Но мы можем использовать обходные методы!<br />
Браузеры ограничивают низкоуровневые сетевые операции. Настоящий ping (ICMP) недоступен, но мы можем эмулировать его поведение с помощью HTTP-запросов.</p>
<p dir="auto">А вот как можно проверить доступность устройства в локальной сети через функция <code>checkLocalDevice</code>:</p>
<pre><code class="language-js">/**
 * Проверяет доступность устройства в локальной сети
 * @param {string} ip - IP-адрес для проверки
 * @param {number} port - Порт для проверки (по умолчанию 80)
 * @param {number} timeout - Таймаут в миллисекундах (по умолчанию 3000)
 * @returns {Promise&lt;boolean&gt;} - Доступно ли устройство
 */

async function checkLocalDevice(ip, port = 80, timeout = 3000) {
    const url = `http://${ip}:${port}`;
    
    try {
        const controller = new AbortController();
        const timeoutId = setTimeout(() =&gt; controller.abort(), timeout);
        
        const response = await fetch(url, {
            method: 'HEAD',
            mode: 'no-cors',
            signal: controller.signal
        });
        
        clearTimeout(timeoutId);
        return true;
    } catch (error) {
        return false;
    }
}
</code></pre>
<p dir="auto">А проверить и вызвать ее мы можем вот так:</p>
<pre><code>// Пример проверки роутера
checkLocalDevice('192.168.1.1')
    .then(available =&gt; {
        console.log(available ? 'Роутер доступен' : 'Роутер недоступен');
    });

// Пример проверки кастомного устройства на порту 8080
checkLocalDevice('192.168.1.100', 8080)
    .then(available =&gt; {
        console.log(available ? 'Устройство онлайн' : 'Устройство оффлайн');
    });
</code></pre>
<h3>Полный пример интерфейса</h3>
<pre><code class="language-html">&lt;div id="network-scanner"&gt;
    &lt;h2&gt;Сканер локальной сети&lt;/h2&gt;
    &lt;button id="scan-btn"&gt;Проверить устройства&lt;/button&gt;
    &lt;ul id="results"&gt;&lt;/ul&gt;
&lt;/div&gt;

&lt;script&gt;
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 () =&gt; {
    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';
    }
});
&lt;/script&gt;
</code></pre>
<hr />
<p dir="auto">Также подмечу, если вдруг у вас не будет что-то работать!</p>
<ol>
<li>Если устройство блокирует HTTP-запросы</li>
<li>При строгих настройках CORS</li>
<li>Для специализированных протоколов (не HTTP/WebSocket)</li>
<li>В некоторых мобильных браузерах (Сафари там или еще прочая шляпа.)</li>
</ol>
<p dir="auto">И еще раз повторюсь так сказать по p.s. - <strong>Настоящий ping в браузере сделать невозможно</strong>!</p>
]]></description><link>https://forum.exlends.com/topic/174/javascript-kak-sdelat-ping-lokalnogo-ip</link><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Mar 2026 14:55:00 GMT</lastBuildDate><atom:link href="https://forum.exlends.com/topic/174.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jun 2025 17:45:23 GMT</pubDate><ttl>60</ttl></channel></rss>