# Bestimmte Klassen für Netzwerkchecks gesucht



## MAGIo (18. Feb 2011)

Hallo, ich suche nach Hilfestellungen zur Entwicklung eines JAVA Tools. Daher bräuchte ich Einschränkungen in der Suche nach geeigneten Klassen und Methoden. Bitte helft mir:

- *IP Adressen* im LAN herausfinden via _Broadcast _Nachricht oder _Ping_
- *NIC **Spezifikationen *ähnlich wie bei _ipconfig /all_ herausfinden
- *Ping *(soll ja nur über Umwege möglich sein)
- *Portscans *(WICHTIG UDP) ähnlich wie bei nmap
- Messung der *maximalen **Verbindungen *(max parallel Connections)
- *Bandbreitenmessung *(als _Benchmark_)
- *Route *bestimmen wie bei _traceroute_
- *Datenpakete *an einem Server *empfangen*
- *Protokollierung *des kompletten *Datenverkehrs *(wie bei _Wireshark_)


Aktuell bin ich noch recht hilflos, hoffe Ihr könnt mir da weiterhelfen.
Ich denke die Klasse InetAddress und NetworkInterface sollten hilfreich sein. sowie das Java.net package


----------



## Gelöschtes Mitglied 5909 (18. Feb 2011)

Das wird mit Java Boardmitteln so nicht gehn, da das meiste Betriessystemabhängig ist.

Es gibt dafür aber Libraries wie z.b. Network Packet Capture Facility for Java | Download Network Packet Capture Facility for Java software for free at SourceForge.net
die das können. Die sind aber auch Betriebssystemgebunden.

Wobei das was du da suchst, insbesondere der letzte Punkt wohl am Rande der legalität ist.


----------



## MAGIo (19. Feb 2011)

> Wobei das was du da suchst, insbesondere der letzte Punkt wohl am Rande der legalität ist.



Das möchte ich dementieren, da es um einen ganz bestimmten Port und eine Art Qualitätsmanagement Tool für VoIP Datenverkehrt geht. Also muss ich auch in dem Fall tricksen um mit JAVA sowas zu realisieren?


----------



## maki (19. Feb 2011)

Was raiL meinte war nicht dass du etwas illegales vorhast, sondern dass in Deutschland die Verwendung bestimmter libs in bestimmten Szenarien am Rande der Legälität ist, wenn nicht sogar einen Schritt weiter.

Tricksen musst du nciht, es gibt halt keine reine Javalösung dafür, sondern nur kombinierte native/java Lösungen.


----------



## Kr0e (19. Feb 2011)

Hi MAGIo,

keine Sorge. Nix davon ist illegal, das ist Unsinn. Ein Hammer ist ja auch nicht illegal, nur weil man damit jemanden töten kann .
Wie mein Vorredner bereits gesagt hat: Kommt auf den Anwendungszweck an...
Nun zu deinen Fragen:

Wenn du etwas wie Wireshark machen willst, wird es schwer. Dafür brauchst du Rawsockets. Das ist eine Schnittstelle, mit der du Sockets erstellen kannst, ohne IP oder UDP oder TCP oder sonstige bereits vorhandene Protokolle. Problem ist, dass Java nur TCP/IP und UDP/IP implementiert. Ohne eine native Lösung kommst du da nicht weiter. In dem Fall würde ich sowieso von Java abraten. Das letzte Problem erfordert Plattformabhängige Implementierungen. Außerdem sind RAW-Sockets unter WIndows nur eingeschränkt nutzbar. Die volle Funktionalität ist nur mit Unixsystemen erreichbar. WIndows schränkt aus Sicherheitsgründen einige Sachen ein, damit kein Schindluder  getrieben werden kann. Aber wie man an Wireshark sieht, geht das dennoch. Die verändern glaub ich bei Windows den Treiber oder installieren einen zusätzlichen oder so. Sofern es nicht Wireshark-Java-Wrapper gibt oder ähnliches, wird das praktisch unmöglich.

Java + Portscans sollten möglich sein. Mein TIpp: Google ist dein Feund. Gibt garantiert gute, existierende Lösungen dafür.
Ping kann problematisch werden: Das normale Pingprotokol basiert auf ICMP welches wiederum direkt auf IPv4 basiert, ergo nicht mit TCP + UDP am Hut hat.. Denke ich mal  Aber hier sollte es native Lösungsansätze geben. Aber is jetzt nur geraten, vlt. geht das auch direkt mit Java...

Traceroute ist auch mit ICMP implementiert. Muss man sich mal erkundigen...

Id Addressen herausfinden geht nur, wenn auf den Rechnern ein Dienst läuft, der bei Broadcastnachrichten sagt "Hallo, ich, ich hier!" Sonst keine Ahnung.

Beim Rest muss ich leider passen 

Gruß,

Chris


----------



## tuxedo (19. Feb 2011)

Kr0e hat gesagt.:


> Hi MAGIo,
> 
> keine Sorge. Nix davon ist illegal, das ist Unsinn. Ein Hammer ist ja auch nicht illegal, nur weil man damit jemanden töten kann .
> Wie mein Vorredner bereits gesagt hat: Kommt auf den Anwendungszweck an...



Es hieß ja auch nur: "... am Rande der Legalität..."


Siehe dazu auch:



			
				http://de.wikipedia.org/wiki/Hackerparagraf hat gesagt.:
			
		

> Welche Software unter Hackertools fällt, ist im Gesetzestext sehr vage formuliert und stößt daher auf erhebliche Kritik insbesondere von Sicherheitsexperten und IT-Branchenverbänden. Vor allem wird kritisiert, dass allein entscheidend sei, dass ein Programm oder eine Information genutzt werden könnte, in fremde Computer einzudringen und keine Ausnahmeregelungen bestehen, die den Einsatz für legale Zwecke erlaubt.



Somit ist es "Ansichtssache". Und deshalb ist "... am Rande der Legalität..." passend formuliert.

- Alex


----------



## Kr0e (19. Feb 2011)

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 

Gruß,

Chris


----------



## MAGIo (21. Feb 2011)

Puh... Welche Moglichkeiten der Realisierung eines Benchmarks auf JAVA fur ein Netzwerk seht ihre denn? Es geht eigentlich um Qualitatssicherung, mit Java umgesetzt.


----------



## tuxedo (21. Feb 2011)

Kr0e hat gesagt.:


> 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.


----------



## MAGIo (21. Feb 2011)

Fuer VoIP ist ja TCP eher unwichtig bzw. eher sekundaer. UDP ist wichtig und wird ja nur auf bestimmten Ports benoetigt, daher ist das ja auch recht uebersichtlich zu gestalten dann. Natuerlich ist es besser dies nur mit den Mitteln die JAVA bietet zu realisieren, daher ja meine Fragen um das entsprechende anzupassen bzw. etwas zu 'basteln' und zu improvisieren.


----------



## MAGIo (22. Feb 2011)

Aber ich koennte doch praktisch die oben genannte Library verwenden und einbinden. Da ist auf jedenfall traceroute und die Paketverfolgung mit implementiert und fur die restlichen Dinge habt ihr mir ja auch schon etwas geholfen. 

Bei den Portscans reicht es ja aus bestimmte (VoIP relevante) Sockets durchzuprobieren. 
Die maximale Verbindungsanzahl ist ja ebenfalls realisierbar durch Provokation einer Exception mit den Sockets.
Datenpakete empfangen reicht ja ebenfalls vollkommen aus, da ich eine gezielte client-server Kommunikation einleite und erzwinge.
Und den Ping kann ich ja ebenfalls durch den Tipp realisieren, dass ich die Zeit messe um eine Socketverbindung aufzubauen.
Die vorhandenen Rechner im Netzwerk via Echo Service zu bestimmen, sollte ja ueber den Port 80 realisierbar sein..

doch trotzdem ist es schwierig fuer mich den Anfang zu finden, da das Tool ja ein vorhandenes Netzwerk, welches ja nicht immer gleich ist, scannen und bewerten soll nach den Kriterien UND Kontakt zum Server aufnehmen sollte.

Was meint Ihr hierzu? Soap-Stone: How Fast Is Your Network Today?


----------



## MAGIo (24. Feb 2011)

Bringt mir die JAIN SIP API irgendwas hilfreiches?


----------

