IP´s anpingen und auf gewählte Ports überprüfen -> JNI -> Java implementieren

Alex Großmann

Erfahrenes Mitglied
Hallo liebe C´ler!


ich schreibe gerade ein Programm in Java, welches einen Port, sowie IP von-bis Bereiche aufruft. Dann soll er jede von IP auf die bis IP hochzählen. (schon passiert ;) ), anschließend bzw. während dem Hochzählen soll jede IP angepingt werden. Dabei soll geschaut werden ob der Port vorhanden ist. In jedem falle soll ausgegeben werden was für ein Port dran hängt wenn er nicht der geforderte Port ist.
(auf Port x laufen alle PC´s mit Virenscanner, daher soll´s so geschaut werden wo noch die Virenscanner fehlen.)

Nun ist mein Problem in Java das man eben dieses so nicht realisieren kann. Dank der Info vom User Spike, habe ich erfahren das dies mit C möglich, sogar relativ einfach ist.
Ich würde dann über JNI das ganze in Java einbinden.

Daher möchte ich euch fragen ob ihr mir bitte helfen könntet. Das Programm wäre dannach endlich fertig :)
Ich möchte noch erwähnen das ich zwar C++ spreche, aber selbst das nicht perfekt. Mir ist C daher nicht so geläufig...

Grüße!
 
Hi

du willst also pro IP auf (maximal) zwei Ports überprüfen, ob da was auf Verbindungen wartet?
Warum soll das in Java nicht möglich sein?

Du machst eine Socketverbindung zum einen Port.
Wenn da was ist: Ohne Virenscanner.
Wenn da nichts ist, machst du eine Verbindung zum anderen Port.
Wenn da was ist: Mit Virenscanner
Wenn da auch nichts ist: Kein Rechner/Ausgeschaltet/Dein Programm nicht gestartet.

Da du sowieso auf die Ports überprüfen musst, kannst du dir den Ping vorher auch sparen.
Wenn nichts online ist, bekommst du den Fehler bei den Sockets auch.

Gruß
 
Servus Sheel,

es sollen x beliebige Ports geprüft werden. bzw. könnte ich das auch auf einen Port beschränken, wobei mehrere einfach praktischer wäre.
Die Ports werden also eingegeben, dann dem programm übergeben und dieses soll nun schauen ob die Ports da sind, wenn nicht solls schauen ob es evt. 2 windowsports sind, wenn nicht dann solls schauen welcher port den dran steht. IP´s die nicht angepingt werden können sowie IP´s die den eingegebenen Port haben fallen aus der Ausgabe raus.

Zum Thema wieso es nicht in Java möglich ist:
Man braucht für einen Ping einen ICMP Socket (Socket_RAW), diesen gibts in Java so nicht (nur UCP und TCP) ... TCP Socket eignen sich einfach nicht als Ping, da diese so gut wie von jeden gut eingestellten Rechner geblockt werden...

Edit:
Ich werde deffinitiv deinen Lösungsansatz mal ausprobieren!
Edit2:
Und wie binde ich dann die IP Bereiche ein? Ich mein das muss ja festgelegt werden oder?
 
Zuletzt bearbeitet:
@sheel
Es geht hier sehr wohl um einen Ping da TO nicht sicher gehen kann ob an Port X auch was läuft ... er aber trotzdem wissen möchte ob es ein laufendes System gibt was auf diese IP hört ... und genau DAS ist mit Java eben NICHT möglich.
 
Hmmm...irgendwie erschließt sich mir der ganze Sinn des Programms noch immer nicht.
Egal, ich such mal einen Pingcode auf meiner Festplatte.
Kommt noch...

edit:
So, gefunden.

Aber etwas wirst du glaub ich noch warten müssen,
ich werde den Code nämlich (endlich, nach Jahren)
etwas schöner formatieren.
 
Zuletzt bearbeitet:
@sheel
Es geht hier sehr wohl um einen Ping da TO nicht sicher gehen kann ob an Port X auch was läuft ... er aber trotzdem wissen möchte ob es ein laufendes System gibt was auf diese IP hört ... und genau DAS ist mit Java eben NICHT möglich.

Das ist so nicht richtig. Ein Ping dient der Überprüfung, ob ein Host erreichbar ist. Genau das kann man aber implizit auch über einen TCP-Connect herausfinden. Die Antwort auf eben diesen Connect sagt Dir nämlich, ob der Host unbekannt ist (offline), nicht antwortet (drop), die Verbindung verweigert (reject) oder akzeptiert. Ein Ping ist da nicht nötig. Ich bin mir sicher, dass auch Java das leisten kann, ggf über die Exceptions eines Connect-Versuches.
 
Zurück