Funktion für Anpingen inkl. Port Check -> JNI -> Java nutzen



  • Huhu liebes Forum,

    Ich habe da ein Problem!
    Ich schreibe gerade in Java ein Programm was eine bestimmte IP Range durchpingt und auf x beliebige Ports prüft. (sprich, ist port x da? wenn nein ist port y da?..)

    Leider ist dies in Java nicht möglich, da ich 1. kein ICMP dort habe (Socket_RAW), 2. ich nicht sicher sein kann ob an Port x was läuft (sonst hätte man nen Portscan gemacht, aber ich will ja speziell die IP untersuchen).
    Daher rieten mir einige User mich mit C´lern in verbindung zu setzen, da C eben dies Anbietet. Ich würde mich sehr freuen wenn Ihr mir was schreiben könntet, oder Tipps geben könntet!



  • Häh? Wenn Du wissen willst, ob ein Port offen ist, machst Du 'ne Verbindung zu diesem Port. Dafür brauchst Du kein ICMP, sondern ganz normale sockets. Und das kann auch Java.



  • Schau dir mal netcat an. Gibt es mit Quelltext.



  • hm, also wie gesagt ich will nach port x schauen, mir aber nicht sicher sein kann ob da auch was läuft, trotzdem mag ich wissen ob es ein laufendes System gibt was auf diese IP hört..



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das du dir nicht sicher sein kannst, das auf dem Port etwas läuft ist klar. Genau deshalb willst du es ja prüfen.

    Wie bereits gesagt wurde hast du nichts weiter zu tun, als eine Socket Verbindung zu dem Port aufzubauen.

    Klappt es? -> Ein Programm horcht auf dem Port.
    Klappt nicht, oder Exception tritt auf -> Kein Programm auf dem Port

    So weist du, ob ein Programm auf dem Port horcht. - Das gibt zwar keine Auskunft ob andere Ports eventuell offen aber ungenutzt sind, aber das willst du sowieso nicht wissen.



  • Das Problem damit, das über ICMP abzuhandeln, ist, dass du zur Benutzung von RAW-Sockets idR Superuser-Rechte brauchst (unter Windows musst du in der Administrator-Gruppe, unter POSIX-Systemen root sein oder cap_net_raw+ep haben).

    Da du eh auf die Kooperation der anderen Maschine setzen musst, wäre es womöglich einfacher, die TCP-Flags zu prüfen - wenn du auf SYN ein RST/ACK zurückkriegst, ist am anderen Ende jemand, aber auf dem betreffenden Port horcht nichts. Dieser Mechanismus schlägt dann fehl, wenn der andere Server die Pakete einfach wegwirft (dann kriegst du einen Timeout), aber mit ICMP hast du das gleiche Problem, wenn der Server auf ICMP echo-reply nicht antwortet.

    Wie sinnvoll dieser Ansatz ist, hängt von deinem Anwendungsfall ab. Was genau hast du eigentlich vor?


Anmelden zum Antworten