lokale IP auslesen und auf URL weiterleiten

milea

Mitglied
Hallo an alle!

Ich muss zugeben, dass ich erst angefangen habe mich mit Java zu beschäftigen. Deshalb war ich schon sooo froh, dass ich soweit gekommen bin 🙂

Mein Problem:
Ich möchte die lokale IP eines Rechners im LAN auslesen, schreibe sie in ein String und lese diesen an der 8.Stelle aus. Jenachdem ob die 8.Stelle eine '1' oder '0' ist wird auf spiegel.de bzw. shortnews weitergeleitet.
Das funktioniert prima, wenn ich die Java-Datei in der Konsole ausführe: Es wird meine korrekte lokale IP meines Rechners ausgegeben und ein Browserfenster mit der entprechenden URL öffnet sich.

Java:
//  Auslesen der internen/lokalen IP

import java.net.InetAddress;
import java.applet.Applet; ///muss eingebunden werden, weil ein Applet für Browser erstellt werden soll
import java.awt.Graphics;
import java.net.URL;

//extends für Vererbung an Applet- Klasse
//Main enthält alle methoden und Eigenschaften die Applet hat
public class LokaleIp extends Applet {

    public LokaleIp() {
     //this.myadresse = new String();
     //this.myadresse2 = new String();
    }

    public void paint(Graphics g)
    {
    try {
                 // Holt den Hostnamen
                String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

                 // an 8.Stelle da CharAt von links mit 0 anfängt zu zählen
                 if (myadresse.charAt(8) == '1')
                 {
                   URL u=new URL("http://www.spiegel.de");
        this.getAppletContext().showDocument(u);
}
                 else if (myadresse.charAt(8) == '0') {
                      URL u=new URL("http://www.shortnews.de");
        this.getAppletContext().showDocument(u);
           }

        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }





    }
       //main-Mthode wird nur in Konsole ausgeführt
    public static void main(String[] args ) {
         try {
                 // Holt den Hostnamen
                String localHost = InetAddress.getLocalHost().getHostName();
                 String myadresse = InetAddress.getByName(localHost).getHostAddress();

                 System.out.println(myadresse);

                 // an 8.Stelle da CharAt von links mit 0 anfängt zu zählen
                 if (myadresse.charAt(8) == '1')
                 {
                   String url = "http://www.spiegel.de/";
                       new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
}
                 else if (myadresse.charAt(8) == '0')
                 {
                     String url = "http://www.shortnews.de/";
                       new ProcessBuilder( "rundll32", "url.dll,FileProtocolHandler", url ).start();
                        }

        }
        catch(java.net.UnknownHostException ue) {
            ue.printStackTrace();
        }
        catch(java.io.IOException ie) {
            ie.printStackTrace();
        }



    }

}


Allerdings ist das Ganze eine Anwendung für ein Intranet. Die Java-Datei wird als Applet in eine HTML-Datei integriert und einer Startseite vorgeschaltet.
Dort soll nun die lokale IP des Rechner des Nutzers ausgelesen werden. Entsprechend der 8. Stelle der lokalen IP des Rechners soll -ohne Ausgabe- sofort auf die jeweilige URL weitergeleitet werden.

leider gibt er mir in der Konsole immer die 127.0.0.1 aus und nicht die lokale IP (zB. 192.168.476.89). Und somit ist die 8. Stelle immer =1 und somit komme ich immer zu spiegel.de

Ich hab echt keine Ahnung wie ich das lösen kann und bin für eure Hilfe sehr dankbar!

PS: Es kann nur mit Java realisiert werden, da ich nicht, die vom Router gelieferte IP bekommen will sondern die dem rechner fest zugeordnet statische IP. Außerdem unterstützt mein Server kein php 🙂
 
Hi,

ich habe dein Programm auf der Konsole und als Applet aus Eclipse heraus gestartet.

In beiden Fällen wird die richtige IP-Adresse ausgegeben, also nicht 127.0.0.1.

Vielleicht ist das weniger ein Java-Problem als ein Netzwerk- / Browser- / Proxy-Konfigurationsproblem. Hast du mal mit deinem Netzwerk-Admin gesprochen?
 
Hallo und erstmal Danke für die Antwort!

also mein Admin meint es liegt am java 🙂
Naja ist schon komisch - wenn ich die html-Datei aufrufe in der dasApplet eingebunden ist gibt er mir immer die 127.0.0.1 - also das ist doch die Server-Ip, oder. Auf die interen IP greift wird dabei nicht zugegriffen. Hab mir jetzt auch den Servernamen ausgeben lassen : localhost.
Kenn mich damit - also mit serverkonfigurationen- null aus 🙁
Aber vielleicht sagt das ja einen was.
 
milea hat gesagt.:
gibt er mir immer die 127.0.0.1 - also das ist doch die Server-Ip
127.0.0.1 ist immer die IP-Adresse von localhost

Was wird denn an der Windows-Kommandozeile ausgegeben, wenn du den Befehl [c]hostname[/c] ausführst? Wenn dein Rechner sauber in das Netzwerk eingebunden ist, darf nicht localhost herauskommen.

Wikipedia sagt zu localhost:
Üblicherweise ist das eigene System (der local host) unter der IP-Adresse 127.0.0.1 für IP-Applikationen auf dieselbe Weise erreichbar, wie ein fernes System (ein remote host) unter einer gewöhnlichen Adresse. Das ermöglicht es unter anderem, Serverapplikationen mit einem Client auf demselben Rechner zu betreiben. Ein solches Vorgehen findet beispielsweise beim Testen von Servern oder zum Betreiben von Spiele-Servern häufige Anwendung.

Um die Erreichbarkeit des eigenen Rechners über IP zu ermöglichen, wird eine Schnittstelle, ein sogenanntes Loopback-Device eingesetzt. Dies verhält sich wie eine virtuelle Netzwerkkarte, die alle ausgehenden Datenpakete an ihren eigenen Eingang weiterleitet. Diese virtuelle Netzwerkkarte hat jedoch keinerlei Verbindung zu eventuell vorhandenen Netzwerkschnittstellen; an 127.0.0.1 geschickte Pakete können daher im Normalfall nicht auf einem physikalisch vorhandenen Link zu einem anderen System erscheinen.
 
Hallo und Guten Morgen!

Ich weiß voran es liegt, dass mir nur die 127.0.0.1 ausgegeben wird. Das ist zwar eine IP auf meienn rechner im Intranet aber es gibt ja noch eine zweite IP - und das ist die lokale IP. deshalb werden jetzt die IP in einer schleife ausgelesen.

Code:
import java.net.*;
import java.util.*;
import java.io.*;
import java.nio.*;
import java.applet.Applet;l
import java.awt.Graphics;

public class LokaleIp extends Applet {


public void  getInterfaces (){
      try {
         Enumeration e = NetworkInterface.getNetworkInterfaces();

         while(e.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) e.nextElement();
            System.out.println("Net interface: "+ni.getName());

            Enumeration e2 = ni.getInetAddresses();

            while (e2.hasMoreElements()){
               InetAddress ip = (InetAddress) e2.nextElement();
               System.out.println("IP address: "+ ip.toString());
            }
         }
      }
      catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
    LokaleIp ip = new LokaleIp();
    ip.getInterfaces();
   }

}

Fein - in der Konsole werden jetzt sowohl die localhost IP 127.0.0.1 als auch meine lokale Ip angegeben.
Den Code hab ich im Internet gefunden. Ich versteh ihn soweit grob 🙂. Aber ich weiß nicht, wie ich ihn in ein Applet packen soll. Ich weiß ich muss ne paint-Methode definieren.Aber was soll da genau rein?
 
milea hat gesagt.:
dass mir nur die 127.0.0.1 ausgegeben wird. Das ist zwar eine IP auf meienn rechner im Intranet

würde ich so nicht sagen, denn dein Rechner ist über 127.0.0.1 nicht von einem anderen PC erreichbar, weder aus deinem Intranet noch von sonstwo, siehe Wikipedia-Auszug oben.
 
Hm, na gut.

aber ich weiß noch immer nicht, wie ich dann mein Problem lösen soll. Beim Aufruf der HTMl-datei mit dem Applet gibt er mir jetzt auf der Konsole aus:


Net interface: lo
IP address: /127.0.0.1
Net interface: eth0
Net interface: lo
IP address: /127.0.0.1
Net interface: eth0


Also er findet das ethernet, aber dazu keine IP. Sondern es erscheint wieder nur die 127.0.0.1

Warum bloß? bei Ausführen über die Kommandozeile klappts.
 
ok wenn meine Java_datei nun so aussieht:

Code:
import java.net.*;
import java.util.*;
import java.io.*;
import java.nio.*;
import java.applet.Applet; ///muss eingebunden werden, weil ein Applet für Browser erstellt werden soll
import java.awt.Graphics;


//extends für Vererbung an Applet- Klasse
//Main enthält alle methoden und Eigenschaften die Applet hat
public class LokaleIp extends Applet {

public void paint(Graphics g)
    {
    LokaleIp ip = new LokaleIp();
    ip.getInterfaces();
    System.out.println("IP address: "+ ip.toString());
    }

public void  getInterfaces (){
      try {
         Enumeration e = NetworkInterface.getNetworkInterfaces();

         while(e.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) e.nextElement();
            System.out.println("Net interface: "+ni.getName());

            Enumeration e2 = ni.getInetAddresses();

            while (e2.hasMoreElements()){
               InetAddress ip = (InetAddress) e2.nextElement();
               System.out.println("IP address: "+ ip.toString());
            }
         }
      }
      catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
    LokaleIp ip = new LokaleIp();
    ip.getInterfaces();
   }

}

dann gibt mir die konsole beim Aufruf der HTM-Datei im Browser aus:
Net interface: lo
IP address: /127.0.0.1
Net interface: eth0
IP address: LokaleIp[panel0,0,0,0x0,invalid,layout=java.awt.FlowLayout]
Net interface: lo


WEiß jemand damit was anzugangen? Bitte Bitte!🙂
 
´Beschäftige dich mal mit rechten + applets, soweit ichw eiß haben applets standartmäßig nur rechte auf den server woe die html liegt sowie auf den localhost zuzugreifen. Kann man aber bestimmt irgetwie umgehen.
 

Neue Themen


Zurück
Oben