Chceme-li získat představu o struktuře vnitřní sítě, ve které se uživatel nachází, je dobré zjistit, které IP adresy jsou v této síti živé. Pro oskenování určitého rozsahu IP adres nám bude stačit dokonce i jednoduchý kód v JavaScriptu.
Scanování sítě tímto skriptem je založeno na skutečnosti, že živá zařízení odpovídají na obdržený požadavek okamžitě. V případě vyslání požadavku na neexistující zařízení se ale nejprve čeká po stanovenou dobu, zda se zařízení neozve a teprve po tomto timeoutu dojde k vyvolání chyby.
V našem skriptu se tedy budeme snažit o načtení obrázku z jednotlivých IP adres a budeme testovat, zda došlo k události onError respektive onLoad v relativně krátkém čase, nebo zda zařízení po definovanou dobu neodpovědělo.
Poznámka ke kódu: Zdroj obrázku hledám na portu 9999, protože při testování na portu 80, může u některých zařízení docházet k vyskakování okna pro HTTP autorizaci. Tentokrát jsem se již snažil, aby byl kód funkční také v Internet Exploreru.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<meta http-equiv="Content-Language" content="cs">
<link rel="StyleSheet" href="http://www.soom.cz/base.css" type="text/css">
</head>
<body>
<script>
function scan() { if (x!=20) scanIP(site + x); }
function nonactive() {
window.stop?window.stop():document.execCommand("Stop");
document.getElementById('nonactive').appendChild(itemLI);
x++; scan();
}
function active() {
clearTimeout(casovac);
document.getElementById('active').appendChild(itemLI);
x++; scan();
}
function scanIP (target) {
itemLI = document.createElement('li');
var text = document.createElement('p');
text.innerHTML = target;
itemLI.appendChild(text);
document.getElementById('obr').setAttribute("src", "http://" + target + ":9999");
casovac = setTimeout("nonactive()", 2000);
}
function startScan() {
site = document.getElementById("siteIP").value; x = 1;
document.getElementById("obsah").innerHTML=''+
'<img id="obr" src="" onerror="active()" onload="active()" style="display:none;">'+
'<H3>Aktivní</H3><ul id="active"></ul>'+
'<H3>Neaktivní</H3><ul id="nonactive"></ul>'
scan();
}
</script>
<div id="obsah">
<small>První 3 oklety tvé lokální IP adresy s tečkou na konci</small><br>
<input type="text" id="siteIP" value="192.168.1.">
<input type="button" value="Scan" onclick="startScan()">
</div>
</body>
</html>
Činnost skriptu demonstruje následující rám: