Hätte da ein nettes (wenn auch fern ab vom Thema) Beispiel
Beim Einlegen einer (z.B.) gekauften Audio-CD fragt mich der WMP, ob ich die CD abspielen lassen will, oder kopieren will
Was hat das denn mit dem "Hackerparagraphen" zu tun? Entweder die CD ist kopiergeschützt, dann darf ich keine Kopie anlegen können. Oder aber die CD hat keinen Kopierschutz. Dann darf ich im Rahmen der sogenannten "Privatkopie" die CD kopieren.
Aber zurück zum Thema:
Puh... Welche Moglichkeiten der Realisierung eines Benchmarks auf JAVA fur ein Netzwerk seht ihre denn? Es geht eigentlich um Qualitatssicherung, mit Java umgesetzt.
Naja, gehen wir mal deine "Anforderungen" nochmal durch:
- IP Adressen im LAN herausfinden via Broadcast Nachricht oder Ping
-> Wird mit "plain java" nicht gehen. Außer dir reicht es alle vorhandenen Rechner auf einen bestimmten Port (Echo-Service?) zu testen.
- NIC Spezifikationen ähnlich wie bei ipconfig /all herausfinden
-> An IP und Netzmaske kommst du mit Java ran. Gateway? Keine Ahnung. Routen? Wohl eher nicht.
- Ping (soll ja nur über Umwege möglich sein)
-> Das einfachste ist einen "Port zu pingen". Die Zeit die es braucht um eine Socketverbindung herzustellen, ist der, die mit dem "ping" Tool gemessen wird verdammt ähnlich. Wenn nicht sogar in den meisten Fällen nicht voneinander zu unterscheiden. Einen echten Ping (ICMP request etc.) geht mit Plain-Java nicht. Da brauchst du eine native implementierung (.dll / .so / ...) die du mit JNI oder JNA ansprechen kannst.
- Portscans (WICHTIG UDP) ähnlich wie bei nmap
-> Einfache TCP Portscans kannst du mit Java machen. Einfach alle Sockets "durchprobieren" und schaun ob sich eine Socketverbindung herstellen lässt. UDP.. Hmm, ist ja zustandlos. Wie das gescanned wird: Kein Plan. Dürfte aber auf "unteren levels" funktionieren, und deshlab wieder eine .dll/.so erfordern. Also wieder JNI/JNA.
- Messung der maximalen Verbindungen (max parallel Connections)
-> Was soll das aussagen? Reicht dir die Aussage: "10.000 Socketverbindungen sind möglich." Oder muss da auch noch was durch die Leitung gehen? Im einfachsten Fall: Eine Socketverbindung nach der anderen aufmachen bis es zu einer entsprechenden Exception kommt.
- Bandbreitenmessung (als Benchmark)
-> Hier brauchst du einen Client und einen Server zwischen denen du Traffik verursachst. Sollte mit Java kein Problem sein.
- Route bestimmen wie bei traceroute
-> Mit "plain java" ebenfalls nicht möglich. .dl/.so.. JNA/JNI ...
- Datenpakete an einem Server empfangen
-> empfangen oder "abfangen"? TCP und UDP Server kannst du mit Java problemlos basteln und damit Daten empfangen. Daten "abfangen"... Da brauchst du sowas wie pcap, bzw. jpcap (das Java binding für pcap)
- Protokollierung des kompletten Datenverkehrs (wie bei Wireshark)
-> Auch hier: pcap bzw. jpcap
Alles in allem: Java ist für dein Vorhaben in diesem Umfang nicht die optimale Sprache. Viele deiner Anforderungen erfordern tiefe eingriffe ins System die so, mit einer plattformübergreifenden Sprache nicht so einfach zu realisieren sind.
Entweder du beschränkst dich auf das Mögliche (und verzichtest auf JNI/JNA), oder du greifst gleich zu einer Sprache die diese meist low-level Zugriffe von Haus aus kann.