
Ich verwende derzeitNmapum in einem Teil meines Programms lokale Netzwerke abzubilden, und ich habe mich gefragt, wie lange es dauern würde, verschiedene Port-Scans auf allen Ports durchzuführen?
Wie hoch sind das Timeout und die durchschnittliche Paketgröße, die gesendet werden, um zu prüfen, ob der Port geöffnet ist (falls Pakete zur Prüfung gesendet werden), und besteht basierend auf diesen und anderen Faktoren eine Korrelation mit der zum Scannen benötigten Zeit?
Ich würde diese gerne in einem Diagramm darstellen und diese Ergebnisse möglicherweise auch testen.
Ich weiß, dass UDP-Port-Scans im Allgemeinen länger dauern als TCP, da keine Verbindung besteht und viel mehr Ressourcen genutzt werden.
Antwort1
Dabei können viele Faktoren eine Rolle spielen, darunter Verbindungsgeschwindigkeit, Duplex, minimale Paketgröße, Roundtrip-Zeit, Latenz des Zielhosts, ob ein Intrusion Detection/Prevention-System beteiligt ist oder nicht, wie viele Roundtrips der jeweilige Scan-Typ erfordert, wie ausgelastet die Verbindung ist usw.
Nehmen wir also an, dass sich der Scanner und das Ziel im selben Gigabit-Ethernet befinden, und schätzen wir die theoretische Mindestzeit, die ein Scan von 65536 Ports dauern kann. GigE ist immer vollduplex, hat eine Mindestrahmengröße von 64 Bytes und nach Berechnung der obligatorischen Lücken zwischen den Rahmen eine maximale Rahmenrate von 1.488.000 Rahmen mit Mindestgröße pro Sekunde. TCP Syns, Syn-Acks, (leere) Acks, Fins und Rsts sind allesamt Rahmen mit Mindestgröße. Auf dem GigE, auf dem ich gerade bin, beträgt die RTT 0,3 ms (300 µs), also nehmen wir an, dass der Zielhost auf Syns entweder mit Syn-Ack oder Rst innerhalb derselben Latenz von 0,3 ms antwortet. Nehmen wir weiter an, dass er mit dem einen oder dem anderen antwortet; dass es keine „gefilterten“ Ports gibt, für die wir einfach auf ein beliebiges Timeout warten müssen.
Die zum Senden von TCP-Syns an alle Ports benötigte Zeit beträgt also: 65.536 / 1.488.000 = 44 ms
Da GigE Vollduplex ist, würden die ersten Antworten eintreffen, wenn die späteren Syns ausgehen, aber wir müssten 1 RTT zwischen dem letzten gesendeten Syn und der letzten Antwort warten, also addieren wir 1 RTT, also 0,3 ms, für insgesamt44,3 ms.
Selbst wenn Ihr Scan zwei Hin- und Rückläufe erfordern würde, könnte Ihr gesamter Netzwerkverkehr immer noch in weniger als einer Sekunde erledigt werden.
Beachten Sie, dass Sie, wenn der Zielhost für einige Ports nicht auf Syns antwortet, in Ihrem eigenen Algorithmus selbst entscheiden müssen, wie lange Sie Ihr Timeout für „keine Antwort“ einstellen. Aber Sie können sich das wie das RTT vorstellen. Angenommen, Sie möchten ein Timeout von 10 Sekunden verwenden. Sie können trotzdem alle Ihre Syns in 44 ms senden, aber Sie müssen möglicherweise 10 Sekunden nach dem letzten gesendeten Syn warten, um festzustellen, dass Sie wahrscheinlich keine Antwort von diesem Port erhalten. Selbst wenn also alle 2^16 Ports nicht reagieren und ein Timeout von 10 Sekunden vorliegt, beträgt Ihre Gesamtzeit 44 ms + 10 Sekunden = 10,044 Sekunden.