Verbindungsüberprüfung zu anderem Computer

Jellysheep

Erfahrenes Mitglied
Hi!
Wie kann ich mit Java feststellen, ob ich über ein Netzwerk mit einem bestimmten Computer (mit IP) "verbunden" bin?
 
Mit einem Socket?
Wenn ich damit eine Verbindung aufzubauen versuche, aber an der IP kein Rechner dran ist, dann wartet der nur...
 
Wenn ich

Java:
try
{
	Socket s = new Socket("192.168.1.5", 80);
}
catch (UnknownHostException e)
{
	// TODO Auto-generated catch block
	e.printStackTrace();
}
catch (IOException e)
{
	// TODO Auto-generated catch block
	e.printStackTrace();
}

ausführe bekomme ich nur

Code:
java.net.ConnectException: Connection timed out: connect
 
Ups, ich hab nur zu kurz gewartet... :-(
Kann man das Timeout auf ein paar Millisekunden verkürzen oder so?
Ich möchte einen "IP-Scan" durchführen...
 
So in etwa?

Java:
package core;

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class Main
{
	private static final int START_IP_PART_A = 85;
	private static final int START_IP_PART_B = 0;
	private static final int START_IP_PART_C = 0;
	private static final int START_IP_PART_D = 0;

	private static final int MAX_IP_PART_A = 120; //Inclusive
	private static final int MAX_IP_PART_B = 120;
	private static final int MAX_IP_PART_C = 120;
	private static final int MAX_IP_PART_D = 120;
	
	public static void main(String args[])
	{
		for(int i = Main.START_IP_PART_A; i <= Main.MAX_IP_PART_A; i++)
			for(int j = Main.START_IP_PART_B; j <= Main.MAX_IP_PART_B; j++)
				for(int k = Main.START_IP_PART_C; k <= Main.MAX_IP_PART_C; k++)
					for(int m = Main.START_IP_PART_D; m <= Main.MAX_IP_PART_D;
					m++)
					{
						final int partA = i;
						final int partB = j;
						final int partC = k;
						final int partD = m;
						
						Runnable scanIP = new Runnable() {
							public void run()
							{
								final String ip = partA + "." + partB + "." +
								partC + "." + partD;
								
								InetSocketAddress socketAddress =
									new InetSocketAddress(ip, 80);
								Socket s = new Socket();
								try
								{
									s.connect(socketAddress, 100);
									System.out.println(ip + ": found");
								}
								catch(Exception e)
								{
									System.out.println(ip + ": not found");
								}
								finally
								{
									try
									{
										s.close();
									}
									catch (Exception e)
									{
										e.printStackTrace();
									}
								}
							}
						};
						new Thread(scanIP).start();
					}
	}
}
 
Danke, so ähnlich habe ich es mir grade auch überlegt... ich änders noch ein bisschen um, so dass die IPs geordnet ausgegeben werden, aber das wärs dann... Danke! ;)
 
Hab jetzt noch das ganze mit einem Ladebalken verbessert und die IPs geordnet ausgegeben... und mir ist was aufgefallen:
Angezeigt als Verbindung wird bei mir nur der Router...
Wie kann ich ans (Haus-)Netz angeschlossene Computer auch mit-überprüfen?
Mit einem anderen Port?
 
Na ja, ist halt so dass er jetzt versucht über dem HTTP-Port eine Verbindung herzustellen. Wenn kein Server auf diesen Port wartet (z. B. Apache) kommt auch kein Verbindungaufbau zustande.

Eine Möglichkeit nach anderen Computern zu suchen wäre ihm/sie anzupingen. Dabei wird ein Datenpaket gesendet, und der "Server" schickt ein Antwortpaket. Dabei kannst du allerdings die meisten privaten Nutzer außerhalb des Subnetzes vergessen, da die meisten Router/Firewalls pings rausfiltern.

Hab es selbst noch nie gemacht, aber dachte dass du die vielleicht bei Windows mitgelieferte ping.exe verwenden könntest. Hab mal schnell Google angeworfen und habe das gefunden:
http://greendevnet.blogspot.com/2007/08/ping-unter-java.html

Zwar nur überflogen, aber schaut imho gut aus. Wie es sich mit der Plattformunabhängigkeit verträgt weiß ich nicht.

So wie es jetzt ist könntest du das Programm verwenden um Fremde HTTP-/oder FPT-Server zu finden usw.

Und wie es sich mit den geordneten Ausgeben verträgt weiß ich nicht. Dabei werden doch eigendlich alle Threads ausgebremst, oder? Aber bin darin Anfänger.
 
Versuchs doch mal mit der Klasse InetAddress. Diese besitzt eine Methode isReachable(int timeout):boolean. Damit kann man das ganz gut testen.
 
Zurück