Netzwerk nach ip adressen scannen

SkonroX

Aktives Mitglied
Hallo,

ich experimentiere seit einiger Zeit an so manchen Programmen, eins von denen ist eines, welches alle vorhandenen IP-Adressen samt Computernamen ausgeben soll, was mir zwar gelungen ist, jedoch dauert es 2³²³²³²³ stunden bis es fertig ist, da ich nicht verstehe wie ich ein Socket Timeout einstellen kann, habe es bereits mit verschiedenen möglichkeiten versucht, eines war mit socket.setsotimeout(zahl), und noch eine mit internetaddress oder sowas, funktioniert alles nicht, denn sobald ich einen timeout einstelle, egal ob es ein wert von 50 - 50000 ist, findet der scanner keinen einzigen rechner mehr, frage mich nur wieso...
Hier der Code:
Java:
package LAN_SCAN;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
public class scan 
{
	/* (c) by SkonroX */
	private static Object[] e;
	private static String hostip = null;		
	private static int port = 445;
	private static Socket socket;
	private static InetAddress host;
	private static File file = new File( System.getProperty( "user.home" ) + "/desktop/IP-Liste.txt" );
	private static long roundTripTime;
	private static BufferedWriter bw = null;
	private static String klasse = "c";
	private static void main( String[] args ) 
	{
		if( klasse == "a" )
		{
			try { classa(); }
			catch ( IOException e ) { e.printStackTrace(); }
		}
		if( klasse == "b" )
		{
			try { classb(); }
			catch ( IOException e ) { e.printStackTrace(); }
		}
		if( klasse == "c" )
		{
			try { classc(); } 
			catch ( IOException e ) { e.printStackTrace(); } 
			catch ( InterruptedException e ) { e.printStackTrace(); }
		}
		if( klasse != "a" && klasse != "b" && klasse != "c" ) { System.out.println( "Ungültige Eingabe!" ); }
	}
	private static void classc() throws IOException, InterruptedException
	{
		int j = 20;
   	  	bw = new BufferedWriter( new FileWriter( file ) );
		for( int i = 155; i < 256; i++ )
		{
			hostip = "172.16." + j + "." + i;
			if( ( e = ping( hostip, port ) ) != null )
		    {
				System.out.println( "HostIP: " + e[ 0 ] + " " + "HostName: " + e[ 1 ] + " " + "MilliSeconds: " + e[ 2 ] );
		   	  	bw.write( "HostIP: " + e[ 0 ] + " " + "HostName: " + e[ 1 ] + " " + "MilliSeconds: " + e[ 2 ] );
		   	  	bw.newLine();
		   	  	bw.flush();
		    }
			if( i == 255 && j < 256 ) { j++; i = 0; }
			if( j > 255) { break; }
		}
		bw.close();
	}
	private static void classb() throws IOException
	{
		int j = 0, k = 0;
		for( int i = 0; i < 256; i++ )
		{
			hostip = "172." + k + "." + j + "." + i;
			if( ( e = ping( hostip, port ) ) != null )
		    {
		   	  	System.out.println( "HostIP: " + e[ 0 ] + "\n" + "HostName: " + e[ 1 ] + "\n" + "MilliSeconds: " + e[ 2 ] );
		    }
			if( i == 255 ) { j++; i = 0; }
			if( j == 255 && i == 255 ) { k++; i = 0; j = 0; }
			if( j > 255 || k > 255) { break; }
		}
	}
	private static void classa() throws IOException
	{
		int j = 0, k = 0, l = 0;
		for( int i = 0; i < 256; i++ )
		{
			hostip = l + "." + k + "." + j + "." + i;
			if( ( e = ping( hostip, port ) ) != null )
		    {
		   	  	System.out.println( "HostIP: " + e[ 0 ] + "\n" + "HostName: " + e[ 1 ] + "\n" + "MilliSeconds: " + e[ 2 ] );
		    }
			if( i == 255 ) { j++; i = 0; }
			if( j == 255 && i == 255 ) { k++; i = 0; j = 0; }
			if( k == 255 && j == 255 && i == 255 ) { l++; i = 0; j = 0; k = 0; }
			if( j > 255 || k > 255 || l > 255) { break; }
		}
	}
	public static Object[] ping( String hostip, int string )
    {
		try
        {
            roundTripTime = System.nanoTime();
            host = InetAddress.getByName( hostip );
            socket = new Socket( host, string );
            roundTripTime = ( System.nanoTime() - roundTripTime ) / 1000000L;
            socket.close();
            return ( new Object[]{ host.getHostAddress(), host.getHostName(), roundTripTime } );
        }
        catch( Exception e )
        {
        	System.out.println( e + " = " + hostip );
            return null;
        }
    }
}

explizit ist der schwerpunkt des problems in Zeile 90 - 106, in der Object methode, in welcher die netzabfrage stattfindet.
Bin um jede hilfe dankbar,
Mfg,
SkonroX.
 

Andi_CH

Top Contributor
Mach main mal public - das kommt besser
Klassenamen sollten gross geschrieben werden-> Scan

Ping braucht zum Teil einfach lang bis die Antworten kommen. Vielleicht kann man die Anzahl Pings und die Zeit einschränken?

Ohne jetzt jedes Detail zu verstehen schlage ich vor, dass du parallelisierst.
Starte pro ping Versuch einen Thread und lass so einige 100, vielleicht auch einige 1000 davon laufen (Musst halt ausprobieren was dein System so verkraftet)
Da diese Threads ja eigentlich nur auf Antworten warten, ist die CPU Last eher klein und Memory wird, wenn die Threads klein sind, auch nicht übermässig viel verbraucht.
 

Andi_CH

Top Contributor
Eben - in Threads parallelisieren.

Aber etwas soltest du bedenken - nicht jede Maschine die eine IP hat, gibt auf ping Antwort.
 

SkonroX

Aktives Mitglied
1. Mich interessieren auch eigentlich nur die maschinen, die auch darauf antworten können
2. Nein ich habs nicht ausgerechnet, würde auch lieber ^99 schreiben, aber es gibt ja auf der Tastatur nur ²³ ;P
3. Ich tuh mich schwer mit Threads, könnte jemand vielleicht ein beispiel zeigen? :)
 

SkonroX

Aktives Mitglied
So, ich habe mich nun noch etwas über Threads informiert und mich mal dran versucht, jedoch will es wie ich es mir bereits dachte nicht so wirklich...
Habe eine neue Klasse geschrieben, in welcher ich den Ping vorgang eingebunden habe, wodurch ich also nur noch die ip in der hauptklasse ständig aktualisieren muss und jeweils neue Threads für diese öffnen..
hört sich logisch und plausibel an, funktioniert aber nicht, ich bekomme folgende fehlermeldung:
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

Hier der Code von der zweiten Klasse (Ping):

Java:
package LAN_SCAN;
import java.net.InetAddress;
import java.net.Socket;
public class scaning extends Thread
{
	private static Object[] e;
	private static long roundTripTime;
	private static InetAddress host;
	private static Socket socket;
	public static void ping( String hostip, int string )
    {
	   try
       {
           roundTripTime = System.nanoTime();
           host = InetAddress.getByName( hostip );
           socket = new Socket( host, string );
           roundTripTime = ( System.nanoTime() - roundTripTime ) / 1000000L;
           socket.close();
           e = new Object[]{ host.getHostAddress(), host.getHostName(), roundTripTime };
           System.out.println( "HostIP: " + e[ 0 ] + " " + "HostName: " + e[ 1 ] + " " + "MilliSeconds: " + e[ 2 ] );
           scan.bw.write( "HostIP: " + e[ 0 ] + " " + "HostName: " + e[ 1 ] + " " + "MilliSeconds: " + e[ 2 ] );
           scan.bw.newLine();
           scan.bw.flush();
       }
       catch( Exception e )
       {
       	   System.out.println( e.getMessage() + " when ping IP: " + hostip );
       }
    }
	public void run()
	{
		ping( scan.hostip, scan.port );
	}
}

Mfg,
SkonroX.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
T Access mit Java verbinden im netzwerk Java Basics - Anfänger-Themen 3
S Input/Output Vom Netzwerk kopieren Java Basics - Anfänger-Themen 6
B Unique ID für Device im internen Netzwerk Java Basics - Anfänger-Themen 19
M Neuronales Netzwerk Java Basics - Anfänger-Themen 3
fLooojava Daten im selben Netzwerk an IP Java Basics - Anfänger-Themen 1
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
H Entwicklung am selben Projekt im Netzwerk Java Basics - Anfänger-Themen 9
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
B Erste Schritte Dateien ueber Netzwerk kopieren Java Basics - Anfänger-Themen 2
P Probleme bei senden eines Strings übers Netzwerk Java Basics - Anfänger-Themen 4
P Strings via Netzwerk übermitteln Java Basics - Anfänger-Themen 8
K Router über Netzwerk Booten lassen Java Basics - Anfänger-Themen 8
G Netzwerk unterbrechen Java Basics - Anfänger-Themen 10
M In Router einloggen und PCs im Netzwerk erkennen Java Basics - Anfänger-Themen 18
U Netzwerk Chatprogramm Quellcode funktioniert nicht Java Basics - Anfänger-Themen 6
Nic.o getProperties - übers Netzwerk Java Basics - Anfänger-Themen 2
0 Objekte übers Netzwerk schicken? Bibliothek? Java Basics - Anfänger-Themen 2
D Java Tutorial zur Netzwerk / Datenbankprogrammierung gesucht Java Basics - Anfänger-Themen 2
F Bild per Netzwerk übertragen Java Basics - Anfänger-Themen 3
I Schiffe versenken, Netzwerk, swing, Thread Java Basics - Anfänger-Themen 5
G Netzwerk: RMI Objekt-Referenzen Java Basics - Anfänger-Themen 2
A Netzwerk Programmieren Java Basics - Anfänger-Themen 2
H Netzwerk-Thread Java Basics - Anfänger-Themen 7
H ObjectOutputStream Netzwerk writeObject Java Basics - Anfänger-Themen 6
G Strings übers Netzwerk verschicken Java Basics - Anfänger-Themen 2
Z Netzwerk graphisch Darstellen Java Basics - Anfänger-Themen 5
L Dateien im Netzwerk bearbeiten (UNC-Pfade und gemappte Laufw Java Basics - Anfänger-Themen 5
J Audio capturen und über's Netzwerk streamen? Java Basics - Anfänger-Themen 2
C BufferedReader und BufferedWriter im Netzwerk Java Basics - Anfänger-Themen 6
M E-Mail im Netzwerk über Microsoft Exchange Server versenden? Java Basics - Anfänger-Themen 3
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben