Преобразование нотации CIDR в диапазон IP-адресов в java

Как я могу преобразовать cidr в диапазон IP в Java? Я использовал apache SubnetUtils, но игнорировал первое и последнее значение диапазона.

например, для CIDR 192.168.1.0/16 вывод должен быть от 192.168.0.0 до 192.168.255.255. но я получаю от 192.168.0.1 до 192.168.255.254.

Пожалуйста помоги


person Rehman    schedule 30.06.2014    source источник
comment
Не могли бы вы показать свой код, чтобы мы могли вам помочь?   -  person Jens    schedule 30.06.2014
comment
Это скорее сетевой вопрос, чем вопрос программирования, СМОТРИ МОЙ ОТВЕТ ниже!   -  person Am_I_Helpful    schedule 30.06.2014


Ответы (2)


Класс SubnetUtils по умолчанию исключает нулевой и последний адреса из диапазона используемых «узловых» адресов, потому что они (или были, в случае нулевого адреса) использовались в качестве широковещательного адреса сети.

Вам нужно вызвать метод .setInclusiveHostCount(true) в вашем экземпляре SubnetUtils, чтобы он сказал, что он должен включить эти адреса в возвращаемый диапазон.

person Alnitak    schedule 30.06.2014
comment
+1 за столь информативный ответ и заставивший меня поправиться! - person Am_I_Helpful; 30.06.2014
comment
@Rehman, пожалуйста, проголосуйте и примите. - person Alnitak; 01.07.2014
comment
@Alnitak - я принял .. но не могу проголосовать .... потому что это требует 15 репутации :) .. что у меня нет - person Rehman; 03.07.2014

Фактически, первое и последнее значение будут игнорироваться из-за специфики, которую оно несет. Это не IP-адреса общего назначения. Class C Диапазон IP-адресов будет только этим. Вам необходимо узнать больше о «Подсети и адресация в типе класса C. IP-адреса ».

_2 _---> По соглашению сетевые маршрутизаторы и другие шлюзы используют 192.168.0.0 для ссылки на частную сеть в целом! Будучи частными, 192.168.0.0 и все другие адреса в этой сети не могут использоваться в Интернете. Это не похоже на обычный IP-адрес. -Address. Это IP-адрес хоста (по умолчанию), вы не можете его изменить!

_3 _---> Адрес широковещательной передачи в сети, опять же не общий IP-адрес, поскольку он используется для широковещательной передачи данных на все другие компьютеры в сети!

person Am_I_Helpful    schedule 30.06.2014
comment
192.168.0.0 не является «локальным адресом», это еще один зарезервированный адрес по историческим причинам (использовался для широковещательной передачи). - person user207421; 30.06.2014
comment
@ EJP - в основном, это адрес, который используется / для системы, когда она не подключена к сети! - person Am_I_Helpful; 30.06.2014
comment
@shekharsuman когда он не подключен к сети - необходима ссылка. Также классовая адресация устарела около двух десятилетий назад. - person Alnitak; 30.06.2014
comment
и в любом случае пример, приведенный в вопросе, касался / 16, а не стиля класса C / 24. Все, что вы писали о том, что 192.168.0.0 используется в качестве адреса, когда он не подключен к сети, - полная чушь. - person Alnitak; 30.06.2014
comment
@ Alnitak-Ну, адреса класса C начинаются с 192.0.0.0 --- ›Это не фигня! Кроме того, когда он не подключен к сети - это не фигня. Проверьте это --- ›compnetworking.about.com/od/workingwithipaddresses/g/ Я думаю, что ваши знания могут противоречить этому. Пожалуйста, проверьте и прокомментируйте, что в нем не так !!! - person Am_I_Helpful; 30.06.2014
comment
@shekharsuman У меня почти 25-летний опыт работы в IP-сетях и эксплуатации и четыре RFC на мое имя. Действительно, диапазон класса C действительно начинался с 192/8, но это поведение по умолчанию, предполагающее, что что-либо от 192/8 до 223/8 является классом C с маской подсети / 24, устарело примерно через 20 лет. назад и был заменен на CIDR. OP указал / 16, поэтому он явно не использует классовую адресацию класса C. - person Alnitak; 30.06.2014
comment
Извините, сэр, но, по крайней мере, он принадлежит к классу _1 _---, хотя он устарел, не могу отрицать тот факт, что он относится к классу C. Кроме того, я отредактировал свой ответ в соответствии с вашим высказыванием, в то время я ошибочно упомянул 0.0.0.0 вместо 192.168.0.0. Спасибо за указание на ответ СЭР. СПАСИБО. Также, прокомментируйте, если есть еще какие-либо изменения! - person Am_I_Helpful; 30.06.2014
comment
Кроме того, насколько я могу видеть вашу high квалифицированную биографию, СПАСИБО за указание. Нужны еще какие-то изменения, сэр? - person Am_I_Helpful; 30.06.2014
comment
См. tools.ietf.org/html/rfc1518 - класс C совершенно не имеет отношения к вопрос ОП, и если вы не учитесь на CCNA / CCIE (где, как ни странно, Cisco все еще требует этих знаний), в наши дни никому не нужно об этом знать. - person Alnitak; 30.06.2014
comment
Простите меня, но мне их довольно скучно читать. Я буду, когда буду свободен. На самом деле, моя область знаний разрабатывается в отделе ОС! И снова ОГРОМНОЕ СПАСИБО. - person Am_I_Helpful; 30.06.2014