Inet Adresse aus ifconfig

Asgar13

Bekanntes Mitglied
Ich würde gerne, dass Java mir diese Adresse ausgibt:
(von ifconfig)
Code:
eth0   Link encap:Ethernet  Hardware Adresse 00:13:46:2f:ec:53  
          [B]inet Adresse:192.168.2.128[/B]  Bcast:192.168.2.255  Maske:255.255.255.0

Mein Ansatz:
Code:
InetAddress thisIp = InetAddress.getByName("");
fieldH3.setText(""+thisIp.getHostAddress());

Kann mir jemand schreiben, was ich bei getByName() eintragen muss?
 

Final_Striker

Top Contributor
Ich bekomme damit meine IP ausgegeben.

Java:
		InetAddress address = InetAddress.getLocalHost();
		System.out.println(address.getHostAddress());
 

xehpuk

Top Contributor
Java:
    /**
     * Returns the local host.
     *
     * <p>If there is a security manager, its
     * <code>checkConnect</code> method is called
     * with the local host name and <code>-1</code> 
     * as its arguments to see if the operation is allowed. 
     * If the operation is not allowed, an InetAddress representing
     * the loopback address is returned.
     *
     * @return     the IP address of the local host.
     * 
     * @exception  UnknownHostException  if no IP address for the
     *               <code>host</code> could be found.
     * 
     * @see SecurityManager#checkConnect
     */
Der SecurityManager erlaubts also nicht. Woran das liegt, kA.
 

Asgar13

Bekanntes Mitglied
Gibt es die Möglichkeit von einer eingegebenen IP den Nutzer herauszufinden? Vielleicht klappt es dann darüber.

Ist die Adresse, die man DHCP bezieht die Localhostadresse?
 
Zuletzt bearbeitet:
M

maki

Gast
Loopback Netzwerk Addressen können immer anders lauten, gibt da keinen echten Standard, 127.0.0.1 ist möglich, oder 127.0.1.1, usw., bei unterschiedlichen OS wird es wild ;)

Du kannst dir alle IP Addressen geben lassen, könnte mich irren, aber glaube das war mit NetworkInterface#getNetworkInterfaces möglich.
 

Asgar13

Bekanntes Mitglied
Code:
name: lo (lo) addresses:
/127.0.0.1;
/0:0:0:0:0:0:0:1;

name: eth0 (eth0) addresses:
/192.168.2.128;
/fe80:0:0:0:213:46ff:fe2f:ec53;

Code:
import java.net.*;
import java.util.*;

public class Main {

      public static void main(String[] args) throws Exception {
       
	     Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
	        while (interfaces.hasMoreElements()) {
	        NetworkInterface ni = (NetworkInterface) interfaces.nextElement();
	        System.out.println(ni);               
	      }  
          
    }

}

Bei Interfaces ist es dabei.
 
M

maki

Gast
Dabei schon, aber woher willst du wissen dass es das "richtige" interface ist?
Klar kann man mit isLoopback zumindest die Lookbacks rausfiltern, aber wenn ein rechner mehr als 1 (virtuelle) Karte hat (zB. mit VMware) und nutzt gibt es imho keinen sicheren Weg das "bessere" Interface zu finden, da bleibt nur manuelle Konfiguration.
 
M

maki

Gast
Gibt es denn immer ein eth0 unter Windows? ;)
Natürlich egal falls das nur unter Linux laufen soll.
Hatte es auch schon mit Maschinen zu tun, da war eth1 das einzige Interface das funzte.

Wie gesagt, ich kenne keine zuverlässige automatische Methode.
Bisher bin ich mit einer autom. Erkennung + optionaler manueller Konfiguration falls die autom. nicht klappt ganz gut gefahren.
 

Asgar13

Bekanntes Mitglied
Habe das Programm auch ehr für Linuxrechner geschrieben.(Missbräuchliches Java plattformabhängig)

Rufe damit später auch Shellscripte auf, das ist wohl auch Linuxabhängig.
 

Asgar13

Bekanntes Mitglied
Der Rechner ist vom Router über 192.168.x.xxx erreichbar, diese benötige ich, damit ich über scp mir Daten auf den Router ziehen kann(Über Java)

Die Loopback Ip-Adressen interessieren mich dabei nicht
 

Andi_CH

Top Contributor
Ist 127.0.0.1 denn eine unwirkliche IP-Adresse? Der ganze 127.x.x.x-Block gehört Loopback, wie man an dieser Grafik (Mitte der Grafik) schön erkennen kann.

Ich kann zwar in der Grafik gar nichts erkennen (mit so was bin ich überfordert) aber da wikipedia dasselbe auf klarere Weise zeigt, glaub ich bedingungslos, dass möglicherweise auch die gekritzelte Grafik dasselbe aussagt - ich hatte da was falsches in Erinnerung. (Kein Wunder gehen die IP-Nummern aus, wenn man ein ganzes A-Netz für loopback reserviert :-( )
 

theodosis

Mitglied
Hallo,

mein Vorshlag ist: fuehre von Java das command 'ifconfig'

Java:
Process  prIfConfig = Runtime.getRuntime().exec("ifconfig");
prIfConfig.waitFor();


Dann benutze diesen prIfConfig Object um das output in einem String zu erhalten, genau als du das
manuel in command line ausgefuehrt haettest:



Java:
    InputStream is = prIfConfig.getInputStream();

Mit noch ein paar Schritte du kannst das output haben out dann diesen String suchen um die IP addresse, die du willst, haben.

Wenn du glaubst, dass das hilft, dan koennen wir weiter diskutieren wie du das output durchlaufen kannst um die gewuenschte IP-Addresse zu nehmen.
 

Asgar13

Bekanntes Mitglied
@theodosis das ist ein super Vorschlag^^

Habe deine Variante so eingebaut:

Code:
  		try{		          		
			String atftp[]={"/bin/sh", "-c", "./ifconfig.sh"};
			Process d = Runtime.getRuntime().exec(atftp);
			BufferedReader is = new BufferedReader( new InputStreamReader((d.getInputStream())));
			for (String buffer;(buffer = is.readLine()) != null;
			instructions.setText(buffer));
			is.close();
		}
		catch(IOException ioexp){
		instructions.setText("Fehler beim ausführen der Datei...");
		}
		catch(Exception exp){
		instructions.setText("Fehler beim ausführen der Datei...");
		}
Das Shellscript macht:

Code:
ifconfig eth0 |grep "inet Adresse"

(Habe es mit Shellscript gemacht, weil es sonst mit dem " probleme gibt)

Als Ausgabe bekomme ich:

Code:
inet Adresse:192.168.x.xxx Bcast:192.168.x.255 Maske:255.255.255.0

Die Frage ist nun, wie schneide ich die anderen Informationen weg, so dass nur noch 192.168.x.xxx da steht?
 

theodosis

Mitglied
finde in diesen String in welcher Stelle das "Adresse:" anfaengt. (mit .indexOf) Dann weisst du wo das 192.... anfaengt (weil "Adresse:" hat eine konstante Laenge von 8 Zeichen)

Finde dann wo der text "Bcast" anfaengt. Kombiniere die beide Werte und du kannst substring-en nur die IP die du willst.
 

xjCoder

Aktives Mitglied
Das Shellscript macht:

Code:
ifconfig eth0 |grep "inet Adresse"

(Habe es mit Shellscript gemacht, weil es sonst mit dem " probleme gibt)

Als Ausgabe bekomme ich:

Code:
inet Adresse:192.168.x.xxx Bcast:192.168.x.255 Maske:255.255.255.0

Die Frage ist nun, wie schneide ich die anderen Informationen weg, so dass nur noch 192.168.x.xxx da steht?


...wenn Du schon mit einem Shell-Skript arbeitest kannst Du Dir doch auch gleich gebrauchte Ergebnis ausgeben lassen:

Code:
/sbin/ifconfig eth0|/usr/bin/grep "inet Adresse"|/usr/bin/tr -s " "|/usr/bin/cut -d" " -f3|/usr/bin/cut -d: -f2
 

Asgar13

Bekanntes Mitglied
...wenn Du schon mit einem Shell-Skript arbeitest kannst Du Dir doch auch gleich gebrauchte Ergebnis ausgeben lassen:

Code:
/sbin/ifconfig eth0|/usr/bin/grep "inet Adresse"|/usr/bin/tr -s " "|/usr/bin/cut -d" " -f3|/usr/bin/cut -d: -f2
Erst mal danke^^

Ich hätte ja auch eine Java-Lösung gerne gesehen, aber wenn es wie es scheint gerade nur über Shell zu gehen.
 
1

198310832

Gast
Java:
	private static InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketException {
	    Enumeration en = NetworkInterface.getNetworkInterfaces();
	    while (en.hasMoreElements()) {
	        NetworkInterface i = (NetworkInterface) en.nextElement();
	        for (Enumeration en2 = i.getInetAddresses(); en2.hasMoreElements();) {
	            InetAddress addr = (InetAddress) en2.nextElement();
	            if (!addr.isLoopbackAddress()) {
	                if (addr instanceof Inet4Address) {
	                    if (preferIPv6) {
	                        continue;
	                    }
	                    return addr;
	                }
	                if (addr instanceof Inet6Address) {
	                    if (preferIpv4) {
	                        continue;
	                    }
	                    return addr;
	                }
	            }
	        }
	    }
	    return null;
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
krgewb Erste Schritte Adresse Java Basics - Anfänger-Themen 1
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
B IP Adresse von Wildfly Server Java Basics - Anfänger-Themen 1
B EBNF - Adresse Java Basics - Anfänger-Themen 2
N MAC Adresse auslesen mit JAVA 1.2 Java Basics - Anfänger-Themen 17
L Ip-Adresse für Client Java Basics - Anfänger-Themen 14
L IP-Adresse verschicken Java Basics - Anfänger-Themen 2
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
Spin IP-Adresse Java Basics - Anfänger-Themen 2
G IP-Adresse ermitteln??? Java Basics - Anfänger-Themen 3
S HTTP Adresse von offenem Browserfenset einlesen Java Basics - Anfänger-Themen 6
G Email Adresse in JTextField ueberpruefen Java Basics - Anfänger-Themen 5
0x7F800000 Servlet: wo bekommt man die eigene adresse? Java Basics - Anfänger-Themen 6
H Eingabemaske für MAC-Adresse in JTextfeld Java Basics - Anfänger-Themen 5
G MAC Adresse auslesen Java Basics - Anfänger-Themen 2
G RegEx für leere IP Adresse? Java Basics - Anfänger-Themen 13
P Vorgefertigtes JTextField für IP Adresse? Java Basics - Anfänger-Themen 12
P Anzahl der Punkte in einer IP Adresse zählen? Java Basics - Anfänger-Themen 20
L Adresse in String[] casten Java Basics - Anfänger-Themen 6
G IP Adresse des Rechners auf dem die JVM läuft Java Basics - Anfänger-Themen 2
S Validität von IP Adresse Java Basics - Anfänger-Themen 5
G Email Adresse auf Richtigkeit prüfen Java Basics - Anfänger-Themen 11
S IP-ADRESSE Java Basics - Anfänger-Themen 7
G regulärer ausdruck zur überprüfung von ip-adresse? Java Basics - Anfänger-Themen 13
M IP-Adresse ermitteln Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben