IPv6-адрес в C # - PullRequest
       54

IPv6-адрес в C #

3 голосов
/ 22 января 2011

Я пишу сокет-сервер, которому требуется возможность разрешать / ограничивать по IP, и я пытаюсь сделать его совместимым как с IPv4, так и с IPv6.

Я достаточно хорошо понимаю принцип IPv4, например, я могу разрешить 192.168.0.0/255.255.255.0 кейтеринг для всех адресов 192.168.0. *, Основывая мой код на http://blogs.msdn.com/b/knom/archive/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx.

Однако как это работает с IPv6? то есть как мне обрабатывать диапазоны с этим протоколом?

1 Ответ

3 голосов
/ 22 января 2011

IPv6 по соглашению не использует формат маски подсети, как IPv4. Тем не менее, нет никаких причин, почему вы все еще не можете визуализировать это так.

Эквивалентная «маска подсети» для / 64 в IPv6 будет ffff:ffff:ffff:fffff:0:0:0:0. Просто не пытайтесь цитировать это любому пользователю IPv6, так как никто не поймет, что вы имеете в виду. И не пытайтесь вставить это в любую конфигурацию IPv6 - люди only когда-либо используют префиксы, такие как / 64, / 48, / 32 и т. Д. (Все, что меньше / 64, например / 96, используется редко и официально не рекомендуется для сред локальной сети.)

Вот удобная диаграмма ASCII, которую я только что написал, чтобы помочь вам понять префиксы IPv6:

2001:db8:1000:2000:3000:4000:5000:6000/32
<--net--><-------------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/48
<--network--> <--------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/64
<--network-------> <---------host---->

2001:db8:1000:2000:3000:4000:5000:6000/96
<--network------------> <----host---->

Надеюсь, вышеприведенное - это то же самое, что и визуализация подсетей IPv4 (если честно, то же самое). На самом деле, вычисление IPv6 немного проще в вашей голове, потому что IPv6 использует шестнадцатеричный код, поэтому, если вы будете придерживаться префиксов, кратных 4, вы сможете разделить свою подсеть на границе nybble (то есть цифру) - что вы не можете сделать с IPv4 !

Я подтверждаю, что в моем ответе нет информации, специфичной для C #. Тем не менее, это должно поставить вас на правильный путь с тем, что искать: указание длины префикса.

...