Hallo Gemeinschaft! :)Ich habe da ein kleines/großes Problem. Für einen Sicherheitstest von "außen" will ich eine Art Portscan verschiedener TCP-Ports durchführen. Dafür will ich einfach einen Socket nehmen, und den testen:
$sock = = new IO::Socket::INET ( PeerAddr => $victim, PeerPort => $port, Proto => 'tcp', Type => SOCK_STREAM);
Ist sicher geläufig die Methode. Jetzt zum eigentlichen Problem. Ich hab ganz einfach mal einen Performanztest auf Linux und Windows durchgeführt. Ergebnis: auf dem Linux benötigt der Test aller 65536 Ports ca. 58 Sekunden. Angenehm. Unter Windows (XP) benötigt das gleiche Programm für nur 100 Ports (1-100) jedoch ungefähr 100 Sekunden.
Die Frage ist also: was verursacht diesen riesigen Verlust (~1200fache Aufwandssteigerung)? Liegt es irgendwie daran, dass unter Windows irgendeine Umsetzung von AF_INET auf irgendeinen WinSocket oder sowas stattfindet?
Was könnte man tun, um die Performanz unter Windows an die von Linux anzugleichen? Threads bringen ja nur bis zu einem gewissen Grad was. Wenn ich nun alle Ports teste, bin ich bei 64 Threads immer noch bei ca. 15 Minuten unter Windows. Hmmm...
Grüße,
BigM
Datum: 14.02.2007-09:48
