it-swarm.com.de

Wie wird der IP-Bereich berechnet, wenn die IP-Adresse und die Netzmaske angegeben sind?

Wenn ein IP-Bereich als aaa.bbb.ccc.ddd/netmask ( CIDR Notation ) geschrieben wird, muss ich die erste und die letzte in diesem Bereich enthaltene IP-Adresse mit C # berechnen.

Beispiel:

Eingabe: 192.168.0.1/25

Ergebnis: 192.168.0.1 - 192.168.0.126

36
Anheledir

mein guter Freund Alessandro habe einen netten Beitrag in Bezug auf Bitoperatoren in C #, Sie sollten darüber lesen, damit Sie wissen, was zu tun ist.

Es ist ziemlich einfach . Wenn Sie die IP-Adresse, die Sie erhalten haben, in binäre Adressen aufteilen, ist die Netzwerkadresse die IP-Adresse, an der alle Host-Bits (die Nullen in der Subnetzmaske) 0 sind, und die letzte Adresse, die Broadcast-Adresse, ist die Adresse, an der sich alle Hosts befinden Bits sind 1.

Beispielsweise:

ip 192.168.33.72 mask 255.255.255.192

11111111.11111111.11111111.11000000 (subnet mask)
11000000.10101000.00100001.01001000 (ip address)

Die fett gedruckten Teile sind die Host-Bits (der Rest sind Netzwerk-Bits). Wenn Sie alle Host-Bits auf der IP auf 0 setzen, erhalten Sie die erste mögliche IP:

11000000.10101000.00100001.01000000 (192.168.33.64)

Wenn Sie alle Host-Bits auf 1 setzen, erhalten Sie die letzte mögliche IP-Adresse (auch als Broadcast-Adresse bezeichnet):

11000000.10101000.00100001.01111111 (192.168.33.127)

Also für mein Beispiel:

the network is "192.168.33.64/26":
Network address: 192.168.33.64
First usable: 192.168.33.65 (you can use the network address, but generally this is considered bad practice)
Last useable: 192.168.33.126
Broadcast address: 192.168.33.127
61
balexandre

Ich werde einfach den Code posten:

IPAddress ip = new IPAddress(new byte[] { 192, 168, 0, 1 });
int bits = 25;

uint mask = ~(uint.MaxValue >> bits);

// Convert the IP address to bytes.
byte[] ipBytes = ip.GetAddressBytes();

// BitConverter gives bytes in opposite order to GetAddressBytes().
byte[] maskBytes = BitConverter.GetBytes(mask).Reverse().ToArray();

byte[] startIPBytes = new byte[ipBytes.Length];
byte[] endIPBytes = new byte[ipBytes.Length];

// Calculate the bytes of the start and end IP addresses.
for (int i = 0; i < ipBytes.Length; i++)
{
    startIPBytes[i] = (byte)(ipBytes[i] & maskBytes[i]);
    endIPBytes[i] = (byte)(ipBytes[i] | ~maskBytes[i]);
}

// Convert the bytes to IP addresses.
IPAddress startIP = new IPAddress(startIPBytes);
IPAddress endIP = new IPAddress(endIPBytes);
26
Joren

Invertiere Maske (XOR mit Einsen) UND es mit IP. Addiere 1. Dies wird der Startbereich sein. OR IP mit Maske. Dies ist der Endbereich.

8

Diese Abkürzung habe ich aus der Arbeit an der Netzwerkbereitstellungsposition gelernt. Es hat mir sehr geholfen, ich dachte, ich werde dieses Geheimnis mit allen teilen. Bisher habe ich keinen einfacheren Weg online gefunden, den ich kenne.

Zum Beispiel ein Netzwerk 192.115.103.64/27, wie groß ist die Reichweite?

denken Sie daran, dass die Subnetzmaske 0, 128, 192, 224, 240, 248, 252, 254, 255 ist

255.255.255.255 11111111.11111111.11111111.11111111/32

255.255.255.254 11111111.11111111.11111111.11111110/31

255.255.255.252 11111111.11111111.111111.11111100/30

255.255.255.248 11111111.11111111.11111111.11111000/29

255.255.255.240 11111111.11111111.111111.11110000/28

255.255.255.224 11111111.11111111.111111.11100000/27

255.255.255.192 11111111.11111111.111111.11000000/26

255.255.255.128 11111111.11111111.111111.10000000/25

255.255.255.0 11111111.11111111.111111.00000000/24

aus/27 wissen wir, dass (11111111.11111111.111111.11100000). Von links gerechnet ist dies die dritte Zahl des letzten Oktetts, die der Subnetzmaske 255.255.255.224 entspricht. (Zählen Sie nicht 0, 0 ist/24), also 128, 192, 224 usw.

Hier kommt die Mathematik ins Spiel:

verwenden Sie in diesem Fall die Subnetzmaske - Subnetzmaske der zuvor aufgelisteten Subnetzmaske. 224-192 = 32

Wir wissen, dass 192.115.103.64 das Netzwerk ist: 64 + 32 = 96 (das nächste Netzwerk für/27)

was bedeutet, wir haben .0 .32. 64. 96. 128. 160. 192. 224. (Kann 256 nicht verwenden, weil es .255 ist)

Hier ist der Bereich 64 - 96.

netzwerk ist 64.

erster Host ist 65. (erstes Netzwerk +1)

Letzter Host ist 94. (Sendung -1)

sendung ist 95. (letztes Netzwerk -1)

8
Jamison Ye

Vielleicht wissen Sie das bereits, aber um zu überprüfen, ob Sie das Zeug richtig hinbekommen, schauen Sie sich http://www.subnet-calculator.com/ - an. Dort können Sie sehen, wie die Bits das darstellen Netzwerk- und Host-Teile der Adresse.

2
Trevor Tippins

Eingabe: 192.168.0.1/25

Die Maske ist dieser Teil: /25

Gehen Sie wie folgt vor, um die Netzwerkadresse zu ermitteln:

  • Subtrahieren Sie die Maske von der IP-Länge (32 - Maske) = 32 - 25 = 7 und nehmen Sie diese Bits von rechts

  • In der angegebenen IP-Adresse, dh: 192.168.0.1 in der Binärdatei ist: 11111111 11111111 00000000 00000001 Nimmt nun 7 Bits von rechts '0' 1111111 11111111 00000000 00000000 Was in der Dezimalzahl ist: 192.168.0.0 (dies ist die Netzwerkadresse)

Um die erste gültige/verwendbare IP-Adresse zu finden, fügen Sie +1 zur Netzwerkadresse hinzu. Ie: 192.168.0.1

Um die letzte/Rundsendeadresse zu finden, ist das Verfahren das gleiche wie beim Finden der Netzwerkadresse, aber hier müssen Sie (32-Masken-) Bits von rechts bis '1' erstellen.

Dh: 11111111 11111111 00000000 01111111 Was in Dezimalzahl 192.168.0.127 ist

Um die letzte gültige/verwendbare IP-Adresse zu finden, subtrahieren Sie 1 von der Broadcast-Adresse. Ie: 192.168.0.126

2
Nilay Jha

Ich würde die Verwendung der IPNetwork Library empfehlen https://github.com/lduchosal/ipnetwork . Ab Version 2 werden auch IPv4 und IPv6 unterstützt.

IPv4

  IPNetwork ipnetwork = IPNetwork.Parse("192.168.0.1/25");

  Console.WriteLine("Network : {0}", ipnetwork.Network);
  Console.WriteLine("Netmask : {0}", ipnetwork.Netmask);
  Console.WriteLine("Broadcast : {0}", ipnetwork.Broadcast);
  Console.WriteLine("FirstUsable : {0}", ipnetwork.FirstUsable);
  Console.WriteLine("LastUsable : {0}", ipnetwork.LastUsable);
  Console.WriteLine("Usable : {0}", ipnetwork.Usable);
  Console.WriteLine("Cidr : {0}", ipnetwork.Cidr);

Ausgabe

  Network : 192.168.0.0
  Netmask : 255.255.255.128
  Broadcast : 192.168.0.127
  FirstUsable : 192.168.0.1
  LastUsable : 192.168.0.126
  Usable : 126
  Cidr : 25

Habe Spaß !

2
LukeSkywalker

Ich weiß, dass dies eine ältere Frage ist, aber ich habe diese raffinierte Bibliothek auf Nuget gefunden, die für mich genau das Richtige zu sein scheint:

http://nuget.org/packages/TakeIo.NetworkAddress/

2
Matt Millican