Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
netmap.js — Schnelles browserbasiertes Netzwerkerkennungsmodul | Kitploit
Tools/GitHubGitHub/serain/netmap.js
AufklärungNetzwerkkartierungPort-ScanningInformationsbeschaffungPenetrationstests
GitHubserain/netmap.js

netmap.js

Schnelles browserbasiertes Netzwerkerkennungsmodul

Repository anzeigen
11522vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

netmap.js

Schnelles browserbasiertes Netzwerkerkennungsmodul

Dieses Projekt wird nicht mehr weiterentwickelt.

Beschreibung

netmap.js bietet browserbasierte Host-Erkennung und Port-Scanning-Funktionen, mit denen Sie die Netzwerke von Website-Besuchern kartieren können.

Es ist recht schnell und nutzt es6-promise-pool, um effizient die maximale Anzahl gleichzeitiger Verbindungen zu betreiben, die Browser zulassen.

Motivation

Ich brauchte einen browserbasierten Port-Scanner für eine Idee, an der ich arbeitete. Ich dachte, es wäre eine einfache Sache, ein vorhandenes Modul zu importieren oder aus einem anderen Projekt wie BeEF zu kopieren und einzufügen.

Es stellte sich heraus, dass es kein ordentliches einsatzbereites npm-Modul gab und das port_scanner-Modul in BeEF ist (zum Zeitpunkt des Schreibens) ungenau, langsam und funktioniert nicht unter Chromium.

netmap.js ist daher ein etwas optimierter „Ping“-Sweeper und TCP-Scanner, der auf allen modernen Browsern funktioniert.

Schnellstart

Installation

root@kitploit:~
npm install --save netmap.js

Live-Hosts finden

Lassen Sie uns die IP-Adresse des Gateways eines Website-Besuchers ermitteln, ausgehend von einer Liste wahrscheinlicher Kandidaten in einer Heimnetzwerkumgebung:

root@kitploit:~
import NetMap from 'netmap.js'

const netmap = new NetMap()
const hosts = ['192.168.0.1', '192.168.0.254', '192.168.1.1', '192.168.1.254']

netmap.pingSweep(hosts).then(results => {
  console.log(results)
})
root@kitploit:~
{
  "hosts": [
    { "host": "192.168.0.1", "delta": 1003, "live": false },
    { "host": "192.168.0.254", "delta": 1001, "live": false },
    { "host": "192.168.1.1", "delta": 18, "live": true },
    { "host": "192.168.1.254", "delta": 1002, "live": false }
  ],
  "meta": {}
}

Host 192.168.1.1 scheint live zu sein.

TCP-Ports scannen

Versuchen wir, einige offene TCP-Ports auf einigen Hosts zu finden:

root@kitploit:~
import NetMap from 'netmap.js'

const netmap = new NetMap()
const hosts = ['192.168.1.1', '192.168.99.100', 'google.co.uk']
const ports = [80, 443, 8000, 8080, 27017]

netmap.tcpScan(hosts, ports).then(results => {
  console.log(results)
})
root@kitploit:~
{
  "hosts": [
    {
      "host": "192.168.1.1",
      "control": "22",
      "ports": [
        { "port": 443, "delta": 15, "open": false },
        { "port": 8000, "delta": 19, "open": false },
        { "port": 8080, "delta": 21, "open": false },
        { "port": 27017, "delta": 26, "open": false },
        { "port": 80, "delta": 95, "open": true }
      ]
    },
    {
      "host": "192.168.99.100",
      "control": "1001",
      "ports": [
        { "port": 8080, "delta": 40, "open": true },
        { "port": 80, "delta": 1001, "open": false },
        { "port": 443, "delta": 1000, "open": false },
        { "port": 8000, "delta": 1004, "open": false },
        { "port": 27017, "delta": 1000, "open": false }
      ]
    },
    {
      "host": "google.co.uk",
      "control": "1001",
      "ports": [
        { "port": 443, "delta": 67, "open": true },
        { "port": 80, "delta": 159, "open": true },
        { "port": 8000, "delta": 1001, "open": false },
        { "port": 8080, "delta": 1002, "open": false },
        { "port": 27017, "delta": 1000, "open": false }
      ]
    }
  ],
  "meta": {}
}

Zunächst mögen die Ergebnisse widersprüchlich erscheinen.

192.168.1.1 ist ein eingebettetes Linux-Gerät (ein Router) im lokalen Netzwerksegment, und der einzige offene Port ist 80. Wir können sehen, dass der Browser auf 80 etwa fünfmal länger brauchte, um einen Fehler zu werfen, als bei den anderen, geschlossenen Ports.

192.168.99.100 ist eine Host-Only-VM mit offenem Port 8080, und google.co.uk ist ein externer Host mit offenen Ports 443 und 80. In diesen Fällen warf der Browser relativ schnell einen Fehler auf den offenen Ports, während die geschlossenen Ports einfach ein Timeout auslösten. Der Abschnitt Theorie weiter unten erklärt, wann dies passiert.

Um zu bestimmen, ob Ports als offen oder geschlossen markiert werden sollen, scannt netmap.js einen „Kontroll“-Port (standardmäßig 45000), der als geschlossen angenommen wird. Die control-Zeit wird dann verwendet, um den Status anderer Ports zu bestimmen. Wenn das Verhältnis delta/control größer als ein festgelegter Wert (Standard 0.8) ist, wird der Port als geschlossen angenommen (Kurzfassung: ein Unterschied von mehr als 20 % zur Kontrollzeit bedeutet, dass der Port offen ist).

Einschränkungen

Port-Sperrlisten

Browser führen eine Sperrliste von Ports, zu denen sie Verbindungen verweigern (wie FTP, SSH oder SMTP). Wenn Sie versuchen, diese Ports mit netmap.js unter Verwendung des Standardprotokolls (http) zu scannen, erhalten Sie ein sehr kurzes Timeout. Ein kurzes Timeout ist normalerweise ein Zeichen dafür, dass der Port geschlossen ist, aber bei gesperrten Ports bedeutet es nichts.

Sie können die Sperrlisten in diesen Quellen überprüfen:

  • Chromium source
  • Mozilla docs
  • Edge/IE (send me a link if you find a source)

Vor Firefox 61 (und möglicherweise anderen Browsern) ist es möglich, diese Einschränkung zu umgehen, indem man das ftp-Protokoll anstelle von http verwendet, um Verbindungen herzustellen. Sie können das protocol im Optionsobjekt angeben, wenn Sie NetMap instanziieren. Bei Verwendung von ftp sollten Sie erwarten, dass offene Ports ein Timeout auslösen und geschlossene Ports relativ schnell einen Fehler werfen. ftp-Scanning unterliegt auch den in diesem Dokument besprochenen Einschränkungen in Bezug auf TCP RST-Pakete.

Sub-Resource-Anfragen von „Legacy“-Protokollen wie ftp werden in Chromium seit einiger Zeit blockiert.

„Ping“-Sweep

Die „Ping“-Sweep-Funktionalität von netmap.js leistet gute Arbeit, um schnell Live-*nix-basierte Hosts in einem lokalen Netzwerksegment zu finden (andere Computer, Telefone, Router, Drucker usw.).

Aufgrund der Implementierung funktioniert dies jedoch nicht, wenn TCP RST-Pakete nicht zurückgesendet werden. Typischerweise:

  • Windows-Rechner
  • Einige externe Hosts
  • Einige Netzwerkkonfigurationen wie überbrückte oder Host-Only-VMs

Der Grund dafür wird im Abschnitt Theorie unten erklärt.

Diese Einschränkung hat keinen Einfluss auf die TCP-Scanning-Fähigkeiten, und es ist immer noch möglich, festzustellen, ob die oben genannten Hosts live sind, indem man versucht, einen offenen Port auf ihnen zu finden.

Allgemeine Ungenauigkeit

Insgesamt habe ich festgestellt, dass dieses Modul genauer und schneller ist als die anderen Codefragmente, die ich im Internet gefunden habe. Allerdings ist die gesamte Idee, Netzwerke von einem Browser aus zu kartieren, von Natur aus heikel. Ihre Ergebnisse können abweichen.

Verwendung

NetMap-Konstruktor

Der NetMap-Konstruktor nimmt ein Optionsobjekt entgegen, mit dem Sie Folgendes konfigurieren können:

  • Das für das Scannen verwendete protocol (Standard http, siehe Port-Sperrlisten für Gründe, es auf ftp zu setzen)
  • Den Port-Verbindungs-timeout (Standard 1000 Millisekunden)
root@kitploit:~
import NetMap from 'netmap.js'

const netmap = new NetMap({
  protocol: 'http',
  timeout: 3000
})

pingSweep()

Die Methode pingSweep() bestimmt, ob ein gegebenes Array von Hosts live ist. Dies geschieht, indem geprüft wird, ob eine Verbindung zu einem Port ein Timeout auslöst. In diesem Fall wird ein Host als offline betrachtet (siehe „Ping“-Sweep für Einschränkungen und Standardfall für die Theorie).

Die Methode akzeptiert die folgenden Parameter:

  • hosts Array von zu scannenden Hosts (IP-Adressen oder Hostnamen)
  • options Objekt mit:
    • maxConnections - die maximale Anzahl gleichzeitiger Verbindungen (standardmäßig 10 in Chrome und 17 in anderen Browsern - die maximal von den Browsern unterstützten gleichzeitigen Verbindungen)
    • den zu scannenden port (Standard 45000)

Es gibt ein Promise zurück.

root@kitploit:~
netmap.pingSweep(['192.168.1.1'], {
  maxConnections: 5,
  port: 80
}).then(results => {
  console.log(results)
})

tcpScan()

Die Methode tcpScan() führt einen Portscan gegen eine Reihe von Zielen durch. Lesen Sie Standardfall, um zu verstehen, wie dies funktioniert.

Die Methode akzeptiert die folgenden Parameter:

  • hosts Array von zu scannenden Hosts (IP-Adressen oder Hostnamen)
  • ports Liste der zu scannenden Ports (Ganzzahlen zwischen 1-65535, vermeiden Sie Ports in den Sperrlisten)
  • options Objekt mit:
    • maxConnections - die maximale Anzahl gleichzeitiger Verbindungen (standardmäßig 6 - die maximale Anzahl von Verbindungen pro Domain, die Browser zulassen)
    • portCallback - ein Callback, der ausgeführt wird, wenn eine einzelne host:port-Kombination gescannt wurde
    • controlPort - der zu scannende Port, um ein Basis-Delta für geschlossene Ports zu bestimmen (Standard 45000)
    • controlRatio - die Ähnlichkeit in Prozent zum Kontroll-Delta, ab der ein Port als geschlossen betrachtet wird (Standard 0.8, siehe Beispiel)

Es gibt ein Promise zurück.

root@kitploit:~
netmap.tcpScan(['192.168.1.1'], [80, 27017], {
  maxConnections: 5,
  portCallback: result => {
    console.log(result)
  },
  controlPort: 45000,
  controlRatio: 0.8
}).then(results => {
  console.log(results)
})

Überprüfen Sie das Beispiel, um die Ausgabe zu interpretieren.

Theorie

Dieser Abschnitt behandelt kurz die Theorie hinter den Erkennungstechniken des Moduls.

Allgemeine Idee

Dieses Modul verwendet Image-Objekte, um zu versuchen, Cross-Origin-Ressourcen anzufordern (die Reihe der getesteten http://{host}:{port}-URLs). Die Zeit, die der Browser benötigt, um einen Fehler auszulösen (das delta), oder das Fehlen eines Fehlers nach einem bestimmten Timeout-Wert, gibt Aufschluss über den Zustand des untersuchten Hosts und Ports.

Standardfall

Ein Live-Host wird normalerweise relativ schnell mit einem TCP RST-Paket antworten, wenn versucht wird, eine Verbindung zu einem geschlossenen Port herzustellen.

Wenn der Port offen ist, und selbst wenn kein HTTP-Server läuft, wird der Browser etwas länger brauchen, um einen Fehler auszulösen, aufgrund des Overheads beim Aufbau einer vollständigen TCP-Verbindung und der anschließenden Feststellung, dass es kein Bild von der angegebenen URL geben kann.

Ein Offline-Host wird weder mit einem RST antworten noch eine vollständige TCP-Verbindung zulassen. Browser versuchen dennoch für eine Weile, die Verbindung herzustellen, bevor sie ein Timeout auslösen (~90 Sekunden). netmap.js löst standardmäßig nach 1000 Millisekunden ein Timeout aus.

Zusammenfassend:

  • Geschlossene Ports auf Live-Hosts haben ein sehr kurzes delta
  • Offene Ports auf Live-Hosts haben ein etwas längeres delta
  • Offline-Hosts oder ungenutzte IP-Adressen lösen ein Timeout aus

Der Standardfall wird durch die Host-IP 192.168.1.1 im Beispiel TCP-Port-Scan veranschaulicht.

Fall ohne TCP RST

Einige Hosts (wie google.co.uk oder Windows-Hosts) und einige Netzwerkkonfigurationen (wie VirtualBox-Host-Only-Netzwerke) geben bei einem geschlossenen Port keine TCP RST-Pakete zurück.

In diesen Fällen lösen geschlossene Ports normalerweise ein Timeout aus, während offene Ports schnell einen Fehler werfen.

Die Implementierung der Methode pingSweep() ist daher unzuverlässig, wenn keine RST-Pakete zurückgesendet werden.

Zusammenfassend: Wenn TCP RST-Pakete aus irgendeinem Grund nicht zurückgesendet werden:

  • Geschlossene Ports auf Live-Hosts lösen ein Timeout aus
  • Offene Ports auf Live-Hosts haben ein kurzes delta
  • pingSweep() kann nicht zwischen einem Timeout eines geschlossenen Ports und einem Timeout eines „toten“ Hosts unterscheiden

Der Sonderfall wird durch die Hosts 192.168.99.100 und google.co.uk im Beispiel TCP-Port-Scan veranschaulicht.

Vernachlässigung von WebSockets und AJAX

Es ist gut dokumentiert, dass Sie Netzwerke auch mit WebSockets und AJAX kartieren können sollten.

Ich habe es ausprobiert (und auch BeEF angepasst, um sein port_scanner-Modul nur mit WebSockets und AJAX zu testen); ich fand beide Methoden völlig unzuverlässige Ergebnisse liefern.

Bitte lassen Sie mich wissen, wenn ich diesbezüglich etwas übersehe.

Tool herunterladen