IP Liste laden -> IP´s anpingen

Alex Großmann

Erfahrenes Mitglied
Hallo!

Hiho!
Ich habe ein neues Problem...
Ich möchte gern eine Datei einlesen, in welcher IP Adressen stehen, das habe ich (bestimmt nicht "einwandfrei") schonmal gemacht:
Mit Swing
Code:

Code:
public class einlesen_Swing extends JFrame{
 
    public einlesen_Swing() {
        super("Eingelesene Datei");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea();
        try {
            textArea.read(new FileReader("c:/ip.txt"), "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setPreferredSize(new Dimension(320, 240));
        add(scrollPane);
        pack();
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new einlesen_Swing();
    }
}

Ohne Swing
Code:
public class einlesen {
	public static void main(String[] args) {
	Reader leser = null;
	
		try {
		leser = new FileReader("/ip.txt");
		for (int x; (x =leser.read()) !=-1 ;)
		System.out.print((char) x);
		}
		catch (IOException e)
		{
			System.err.println("Fehler beim Lesen der Datei");
		}
		finally {
			try {leser.close();} catch (Exception e){}
		}
	}

}
In der ip.txt stehen einige IP Adressen...diese sollen angepingt werden. Jedoch habe ich absolut keine Idee wie das gehen soll?
Kennt Ihr da Anleitungen oder könnt mir direkt helfen?
Würde mich sehr freuen!

grüße!
 
Also PING unter Java geht schon mal nur mit JNI / JNA. Und einfach Sockets aufbauen ist auch doof weil du nicht weist ob gerade der Port den du testen willst auch offen ist und auf Anfragen wartet. Generell ist PING so eine sache da es mitlerweile viele Systeme gibt die aus Sicherheitsgründen ein WAN-Ping schlicht schlucken und der pingende Rechner nicht mal erfährt das der Ping blockiert wurde weil er einfach ist nichts gelaufen ist. Auch gibt es einige Hoster die einen Ping-Flood entdecken und darauf hin den Zugang des Kunden für eine gewissen Zeit blockieren.
 
Und prinzipiell wäre dazu ein Shell-Script angebracht, nicht eine Java-Anwendung.
ping unter linux müsste auch eine Datei als Argument verarbeiten können, indem du den Inhalt der Datei einfach an den Befehl anhängst.
 
Naja ... also ich empfinde es schon als Punkto Sicherheit wenn ich mein DSL / Cabel oder meinen Server so konfiguriere das er nicht anpingbar ist. Denn so kann ein potentieller Angreifer nicht zwischen Blockade und nicht Vorhandensein unterscheiden.
Was allerdings das die Einstellung WAN-Pings zu droppen anstatt zu verweigern mit DUMMHEIT zu tun hat möchte ich dann aber bitte doch mal gerne erklärt haben.
 
Wenn jemand bei Dir zu Hause klingelt, und Du Durch die Tür brüllst: "ICH BIN JA GAR NICHT DA", ist das für Deinen Gerichtsvollzieher kein Grund wieder zu verschwinden. Beim Ping verhält sich das ähnlich. Durch das Droppen von ICMP-Paketen weiß das Gegenüber, dass da jemand ist, weil eben überhaupt keine Antwort kommt. Nur wenn es keine Route zu Deinem Host gibt, ist Dieser für das Netz nicht vorhanden. Das bringt Dir dann aber genau garnichts, weil Du dann faktisch offline bist.
Ich empfehle Dir unbedingt die Lektüren:
http://www.ietf.org/rfc/rfc0791.txt und http://tools.ietf.org/rfc/rfc792.txt

Dumm ist es, ICMP-Pakete zu droppen, weil Du damit Deine eigene Netzwerkperformance negativ beeinflusst und überhaupt keinen Sicherheitsgewinn hast. Im Gegenteil, Stichwort Risikokompensation.
 
Auch wenn ich IT-Sicherheit sehr interessant finde, und mich über Tipps zu Lektüren (am besten Bücher und keine Internetseiten) sehr freuen würde mal zurück zum Thema. Du kannst in Java relativ simpel ping mit einem ProcessBuider umsetzen, das sieht dann so aus:

Java:
public void ping(String ip) {
    ProcessBuilder pb = new ProcessBuilder("ping " + ip);
    try {
        Process p = pb.start();
        java.util.Scanner sc = new java.util.Scanner(p.getInputStream());
        while(sc.hasNext()) {
            System.out.println(sc.nextLine());
        }
    }
    catch(Exception ex) {
        ex.printStackTrace();
    }
}

Ich habe das Beispiel jetzt nicht getestet, sollte aber funktionieren. Müsste sogar sowohl unter Windows als auch unter Linux gehen, da ping im Suchpfad enthalten ist. Mac weiß ich nicht.
 
Zuletzt bearbeitet von einem Moderator:
Man sollte dabei aber beachten, dass der ping-Befehl unter Linux endlos weiter läuft, unabhängig davon, ob das Ziel überhaupt erreicht werden kann. Bei Linux-Programmen hilft aber ein Blick in die manpages, siehe http://man.cx/ping
 
Zurück