# IP-Eingabe überprüfen



## snoop83 (13. Mai 2005)

Ich bin dabei, ein Server-Client Programm zu schreiben. Dabei ist es an einer Stelle nötig, dass der Client die IP des Servers eingibt. An dieser Stelle muss ich nun die Eingabe abfangen und auf Gültigkeit überprüfen.

Ich habe mir dafür eine eigene Klasse "ipCheck" geschrieben, die das übernehmen soll. Sie hat 2 Methoden:
	public static boolean ipgueltig(String ip)
	public static boolean ipzahlgueltig(String zahl)

erstere bekommt die komplette Eingabe und soll überprüfen ob es sich dabei um eine gültige IP handelt.
letztere bekommt die einzelnen Segmente der IP, also die 3er-Zahlen.

"localhost" soll ebenfalls als gültige IP zugelassen werden.
Leider haut das irgendwie überhaupt nicht hin. Die Methode ipgueltig liefert selbst bei "localhost" ein false.

Hier der Code:

```
public class ipCheck {
	
	public ipCheck(){
	}
	
//	 zahl:    2  5  5  .  2  5  5  .  2  5  5  .  2  5  5
//	 stelle:  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14
	public static boolean ipgueltig(String ip){
		boolean x = false;
		System.out.println("teste: ["+ip+"]");
		if (ip == "localhost" ) // hier ####
		{
			x = true;
		}
		else
		{
			String results[] = ip.split(".");
			System.out.println("results.length: "+results.length);			
			for (int i = 0; i < results.length; i++)
			{
				System.out.println("in for: ["+results[i]+"]");
			}
			System.out.println("for-end");
			if (ip.length() == 14)
			{
			if ( ipzahlgueltig(ip.substring(0,2)) &&
				 ipzahlgueltig(ip.substring(4,6)) &&
				 ipzahlgueltig(ip.substring(8,10)) &&
				 ipzahlgueltig(ip.substring(12,14)) &&
				 ip.substring(3,3) == "."   &&
				 ip.substring(7,7) == "."   &&
				 ip.substring(11,11) == "."
				 )
			  {
			    x = true;
			  }
			}
		} // else
	  	if ( x == false ) {System.out.println("no ip (1) : ["+ip+"]");}
		return x;
	}
	

	public static boolean ipzahlgueltig(String zahl){
		return true;
		// Platzhalter!
	}


}
```

Beispieleingabe: "localhost"

teste: [localhost]
results.length: 0
for-end
no ip (1) : [localhost]



da u.a. results.length und for-end ausgegeben werden, muss die methode komischerweise bei der 1. if-abfrage schon scheitern (im quelltext markiert mit // hier ####

aber warum?

abgesehen davon ist results bei der Eingabe von richtigen IPs, z.b. "192.168.0.1" leer .. hat die length 0 ??


----------



## Roar (13. Mai 2005)

guck ma hier: http://www.java-forum.org/de/viewtopic.php?t=17695


----------



## snoop83 (13. Mai 2005)

hab ich mir schon angeschaut, ich versteh's nicht 

da hab ich ja das mit dem split(".") her, es klappt aber nicht ..


----------



## Zilchinger (14. Mai 2005)

Schau mal hier:


```
/*
 * Created on 14.05.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Zille
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class IPValidator {
    
    public boolean isValidIP(String ip){
        String[] zahlen = ip.split("\\."); //Splitten in Zahlen
        if (ip.equalsIgnoreCase("localhost")){
            return true; //wenn ip = localhost
        }
        if (zahlen.length <4)
            return false; //wenn es weniger als 4 Zahlen gibt
        else{
            for (int i=0;i<zahlen.length;i++){
                try {
                    //jede Zahl pasen auf Integer
                    //falls fehler dann return false
                    int zahl = Integer.parseInt(zahlen[i]);
                    // wenn Zahl nich zischen 0 und 255 liegt 
                    if ((zahl < 0)||(zahl >255))
                        return false;//dann false
                } catch (NumberFormatException e) {
                    return false;
                }
            }
        }
        return true;
    }
    
    

    public static void main(String[] args) {
        System.out.println(new IPValidator().isValidIP("192.168.10.1")); //true
        System.out.println(new IPValidator().isValidIP("localhost"));//true
        System.out.println(new IPValidator().isValidIP("192.260.10.256"));//false
    }
}
```

Sollte klappen, viel Spaß


----------



## snoop83 (14. Mai 2005)

danke, genau das habe ich gesucht! habs noch nicht integriert aber beim durchlesen ist es genau das, was ich brauche!

thx


----------



## Roar (14. Mai 2005)

snoop83 hat gesagt.:
			
		

> hab ich mir schon angeschaut, ich versteh's nicht
> 
> da hab ich ja das mit dem split(".") her, es klappt aber nicht ..



richtig lesen, da steht split("\\.") und nicht split(".") kein wunder dass bei dir results leer ist

@zille: das is auch ne gute möglichkeit aber ich würd die methode noch statisch machen 

edit: und dass deine pseudo string vergleiche (bla == ".") eh immer false sind ist dir auch klar?


----------



## snoop83 (14. Mai 2005)

das ist mir nicht 100%ig klar! ich hab nur gemerkt, dass das unter java nicht geht ..

wohl, weil er dort die objekte überprüft und nicht den inhalt?

dafür muss ich dann string.equals(str) nehmen, richtig?


mit dem split("\\.") muss ich mich auch nochmal auseinander setzen..


----------



## Roar (14. Mai 2005)

ja, eben, es werden referenzen verglichen. wenn du schirebst new JButton("bum") == new JButton("bum") kansnt du auchnicht erwarten dass da true rauskommt.

. ist in regulären ausdrücken ein sonderzeichen, muss also maskiert werden


----------



## snoop83 (14. Mai 2005)

ok, danke für die Infos!


----------

