# Bestimmung der Netzwerkklasse mittels IP-Adresse



## Martin13 (21. Mrz 2009)

Hi!

Ich muss für die Uni ein kleines Programm schreiben, mit dem man IP-Adressen und Subnetmask einlesen kann und dann die dazugeörige Netzwerk-ID bekommt.
Wir haben ein paar Code-Fragmente zur Verügung gestellt bekommen, unter anderem das hier:


```
if((ipAddress & 0xc0000000l) == 0x80000000l)
		{
			System.out.println("Klasse B Netzwerk");
		}
```

Wenn die IP-Adresse also in einem Klasse B-Netzwerk liegt, ist die Bedingung erfüllt. Und das verstehe ich nicht. Wie kommt man darauf?? Wie müsste das dann für ein Klasse A oder C Netz lauten??

Die IP-Adresse berechnet sich so:


```
long ipAddress = 0;
		long subnetMask;
		
		String sIP = new String("130.0.0.1");
		short temp;
		
		for(int i = 0; i < 4; i++)
		{
			if(i < 3)
				temp = Short.parseShort(sIP.substring(0, sIP.indexOf(".")));
			else
				temp = Short.parseShort(sIP);
			
			if(temp < 0 || temp > 255)
				throw new IllegalArgumentException();
			
			ipAddress = (ipAddress << 8) + temp;
			sIP = sIP.substring(sIP.indexOf(".") + 1);
		}
```

Had da irgendjemand eine Idee??


----------



## Gelöschtes Mitglied 5909 (21. Mrz 2009)

Classless Inter-Domain Routing ? Wikipedia


da sind sogar beispiele


----------



## Martin13 (23. Mrz 2009)

Hmm, aber was ich nicht verstehe, wieso wird die IP-Adresse mit 0xc0000000l verundet??
Müsste das Literal nicht 0x80000000l lauten???


----------



## Martin13 (23. Mrz 2009)

Okay ich habs jetzt selber herausgefunden:

0xc0000000l muss es lauten, weil die das Klasse-C-Netzwerk am Anfang zwei einser hat.

Man kann sowas basteln, um herauszufinden, in welcher Klasse ein Netz liegt:


```
if((ipAddress & 0xc0000000l) == 0x00000000l)
		{
			System.out.println("A");
		}
		if((ipAddress & 0xc0000000l) == 0x80000000l)
		{
			System.out.println("B");
		}
		if((ipAddress & 0xc0000000l) == 0xc0000000l)
		{
			System.out.println("C");
		}
```


----------

