валидные ip адреса пример

Валидация адресов в работе с IP-адресами

Лю­бое при­ложе­ние, которое хоть как‑то работа­ет с сетью, дол­жно валиди­ровать пра­виль­ность IP-адре­сов. Это слож­нее, чем может показать­ся. Здесь лег­ко впасть в край­нос­ти: при излишне стро­гой валида­ции поль­зователь не смо­жет ввес­ти вер­ные дан­ные, при недос­таточ­ной — ока­жет­ся наеди­не с низ­коуров­невыми сооб­щени­ями об ошиб­ках (если они вооб­ще переда­ются).

В этой статье мы раз­берем ряд слож­ностей, воз­ника­ющих при валида­ции адре­сов, а потом пос­мотрим на готовые биб­лиоте­ки, которые с этим помога­ют.

Валидация адресов

Ошиб­ки в адре­сах могут появить­ся тре­мя спо­соба­ми:

От попыток сло­мать при­ложе­ние одна валида­ция адре­сов не поможет. Она может зат­руднить такие попыт­ки, но не заменит пол­ноцен­ную про­вер­ку авто­риза­ции и обра­бот­ку оши­бок на всех эта­пах работы прог­раммы, так что улуч­шение безопас­ности нуж­но рас­смат­ривать ско­рее как полез­ный побоч­ный эффект. Основная цель — упростить жизнь поль­зовате­лям, которые слу­чай­но вве­ли невер­ный адрес или неп­равиль­но поняли, что от них тре­бует­ся.

Про­вер­ки мож­но условно раз­делить на про­вер­ки по фор­ме и по сущес­тву. Цель фор­маль­ной про­вер­ки — убе­дить­ся, что вве­ден­ная поль­зовате­лем стро­ка вооб­ще может быть допус­тимым адре­сом. Мно­гие прог­раммы огра­ничи­вают­ся имен­но этим. Мы же пой­дем даль­ше и пос­мотрим, как мож­но про­верять, что адрес не толь­ко пра­виль­ный, но и под­ходящий для кон­крет­ной цели, но об этом поз­же.

Проверки по форме

Про­вер­ка пра­виль­нос­ти фор­мата толь­ко на вид может показать­ся задачей для нес­ложно­го регуляр­ного выраже­ния — на деле все не так прос­то.

В IPv4 слож­ности начина­ются со стан­дарта на этот фор­мат — такого стан­дарта не сущес­тву­ет. Фор­мат dot-decimal ( 0. 0. 0. 0–255. 255. 255. 255 ) — общепри­нятый, но не стан­дар­тный. Стан­дарт IPv4 не содер­жит никаких упо­мина­ний о фор­мате записи адре­сов вооб­ще. Никакой дру­гой RFC тоже ничего не говорит о фор­мате адре­сов IPv4, так что общепри­нятый фор­мат — это не более чем сог­лашение.

Ес­ли огра­ничить­ся под­дер­жкой толь­ко пол­ного dot-decimal из четырех групп, без воз­можнос­ти опус­кать нулевые раз­ряды, то выраже­ние (\ d+)\.(\ d+)\.(\ d+)\.(\ d+) может пой­мать зна­читель­ную часть опе­чаток. Если задать­ся целью, мож­но сос­тавить выраже­ние для любого допус­тимого адре­са, хотя оно и будет доволь­но гро­моз­дким. Луч­ше вос­поль­зовать­ся тем, что его лег­ко раз­делить на груп­пы, и явно про­верить, что каж­дая из них попада­ет в диапа­зон 0–255:

Так что, если при­ложе­ние под­держи­вает IPv6, для валида­ции адре­сов нужен пол­ноцен­ный пар­сер. Писать его самим нет смыс­ла, пос­коль­ку сущес­тву­ют готовые биб­лиоте­ки, которые пре­дос­тавля­ют и дру­гие полез­ные фун­кции.

Проверки по существу

Ес­ли уж мы взя­лись под­клю­чать биб­лиоте­ку и пар­сить адре­са, давай пос­мотрим, какие допол­нитель­ные про­вер­ки мы можем про­вес­ти, что­бы отсе­ять оши­боч­ные зна­чения и сде­лать сооб­щения об ошиб­ках более информа­тив­ными.

Нуж­но так­же учи­тывать, что «зарезер­вирован­ные для исполь­зования в будущем» сети могут перес­тать быть зарезер­вирован­ными. Сети из RFC 5735 зарезер­вирова­ны нав­сегда и в этом смыс­ле безопас­ны. А вот авто­ры неког­да популяр­ной сре­ди гей­меров вир­туаль­ной сети Hamachi ког­да‑то счи­тали, что сеть 5. 0. 0. 0/ 8 мож­но исполь­зовать для сво­их нужд, потому что она была зарезер­вирова­на для будуще­го исполь­зования, — пока будущее не нас­тупило и IANA не выдели­ла эту сеть RIPE.

Библиотеки

netaddr

Источник

IP без ошибок. Изучаем принципы работы с IP-адресами

Содержание статьи

Валидация адресов

Ошиб­ки в адре­сах могут появить­ся тре­мя спо­соба­ми:

Читайте также:  как посмотреть bit на windows 10

От попыток сло­мать при­ложе­ние одна валида­ция адре­сов не поможет. Она может зат­руднить такие попыт­ки, но не заменит пол­ноцен­ную про­вер­ку авто­риза­ции и обра­бот­ку оши­бок на всех эта­пах работы прог­раммы, так что улуч­шение безопас­ности нуж­но рас­смат­ривать ско­рее как полез­ный побоч­ный эффект. Основная цель — упростить жизнь поль­зовате­лям, которые слу­чай­но вве­ли невер­ный адрес или неп­равиль­но поняли, что от них тре­бует­ся.

Про­вер­ки мож­но условно раз­делить на про­вер­ки по фор­ме и по сущес­тву. Цель фор­маль­ной про­вер­ки — убе­дить­ся, что вве­ден­ная поль­зовате­лем стро­ка вооб­ще может быть допус­тимым адре­сом. Мно­гие прог­раммы огра­ничи­вают­ся имен­но этим. Мы же пой­дем даль­ше и пос­мотрим, как мож­но про­верять, что адрес не толь­ко пра­виль­ный, но и под­ходящий для кон­крет­ной цели, но об этом поз­же.

Проверки по форме

Про­вер­ка пра­виль­нос­ти фор­мата толь­ко на вид может показать­ся задачей для нес­ложно­го регуляр­ного выраже­ния — на деле все не так прос­то.

В IPv4 слож­ности начина­ются со стан­дарта на этот фор­мат — такого стан­дарта не сущес­тву­ет. Фор­мат dot-decimal ( 0. 0. 0. 0–255. 255. 255. 255 ) — общепри­нятый, но не стан­дар­тный. Стан­дарт IPv4 не содер­жит никаких упо­мина­ний о фор­мате записи адре­сов вооб­ще. Никакой дру­гой RFC тоже ничего не говорит о фор­мате адре­сов IPv4, так что общепри­нятый фор­мат — это не более чем сог­лашение.

Ес­ли огра­ничить­ся под­дер­жкой толь­ко пол­ного dot-decimal из четырех групп, без воз­можнос­ти опус­кать нулевые раз­ряды, то выраже­ние (\ d+)\.(\ d+)\.(\ d+)\.(\ d+) может пой­мать зна­читель­ную часть опе­чаток. Если задать­ся целью, мож­но сос­тавить выраже­ние для любого допус­тимого адре­са, хотя оно и будет доволь­но гро­моз­дким. Луч­ше вос­поль­зовать­ся тем, что его лег­ко раз­делить на груп­пы, и явно про­верить, что каж­дая из них попада­ет в диапа­зон 0–255:

Так что, если при­ложе­ние под­держи­вает IPv6, для валида­ции адре­сов нужен пол­ноцен­ный пар­сер. Писать его самим нет смыс­ла, пос­коль­ку сущес­тву­ют готовые биб­лиоте­ки, которые пре­дос­тавля­ют и дру­гие полез­ные фун­кции.

Проверки по существу

Ес­ли уж мы взя­лись под­клю­чать биб­лиоте­ку и пар­сить адре­са, давай пос­мотрим, какие допол­нитель­ные про­вер­ки мы можем про­вес­ти, что­бы отсе­ять оши­боч­ные зна­чения и сде­лать сооб­щения об ошиб­ках более информа­тив­ными.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

IP адрес

IP-адрес (Internet Protocol Address, айпи адрес) – это уникальный числовой идентификатор конкретного устройства в составе компьютерной сети, построенной на основе протокола TCP/IP. В этом и есть его основная функция. Для работы в Интернете требуется его глобальная уникальность. Для частной сети достаточно, чтобы были исключены совпадения в локальном пространстве.

Формат IP-адреса и как он выглядит

Правильный IP-адрес в сети Интернет может быть представлен в одном из двух цифровых форматов, который зависит от типа используемого протокола. В зависимости от того, к какому из этих типов принадлежит IP-адрес, будет понятно, сколько бит в нем.

Читайте также:  поселок экспериментальный оренбургского района индекс

Структура IP-адреса

Разберем, что обозначают цифры. В общем случае IP-адрес состоит из двух частей (ID-номеров): сети и конкретного узла в ее пределах. Чтобы отличать их в полной записи, используют классы или маски.

Для доступа к Интернет необходимо, чтобы IP принадлежал к другому блоку или в пределах локальной сети существовал сервер, на котором происходит подмена внутреннего адреса на внешний. С этой целью используются прокси или NAT. Для доступа к Интернету адрес выдается провайдером или региональным интернет-регистратором.

По умолчанию маршрутизатор может входить в несколько разных сетей. Каждый его порт имеет персональный IP-адрес. Соответственно, такой же принцип работы применим к конкретным компьютерам, которые могут поддерживать различное число сетевых связей.

Типы IP-адресов

В зависимости от способа использования

Внешний. Он же «белый», публичный или глобальный. Используется во время доступа в Интернет. Такой IP-адрес является уникальным и именно под ним устройство видят в сети. Так как количество таких идентификаторов ограничено, задействуют технологию NAT. Она позволяет транслировать сетевые IP-адреса из частных в публичные. Для этого применяются маршрутизаторы определенного типа.

По внешним IP-адресам многие интернет-сервисы отслеживают новых и вернувшихся пользователей. Это позволяет собирать статистику и делать аналитику, важную для продвижения сайта.

Внутренний. Он же «серый», локальный или частный IP-адрес источника. Не используется во время доступа в Интернет. Работает только в пределах локальной сети (домашней или предоставленной провайдером), и доступ к нему можно получить только другим ее участникам. Для этой цели по умолчанию зарезервированы следующие диапазоны частных IP-адресов:

Необходимо понимать, что не всегда внешний IP-адрес является постоянным. Наоборот, IP часто формируется заново от одного подключения к другому.

В зависимости от вариантов определения

Статические. Это IP-адреса, являющиеся неизмененными (постоянными). Они назначаются устройству автоматически в момент его присоединения к компьютерной сети или прописываются пользователем вручную. Статические адреса доступны для использования неограниченное время. Они могут выполнять функцию идентификатора только для одного сетевого узла. Также иногда используется понятие псевдостатических адресов, которые работают в пределах одной частной сети.

Динамические. Это те IP-адреса, которые выдаются устройству на время. Они автоматически присваиваются в момент подключения к сети и имеют ограниченный срок действия (от начала сессии до ее завершения). Динамические IP-адреса – своеобразный способ маскировки. Отследить человека, выходящего в Интернет с помощью такого адреса, сложно технически, в этом случае не обойтись без профессиональных инструментов.

Что дает статический IP-адрес

Статический IP-адрес полезен благодаря следующим возможностям:

Как узнать IP-адрес

Зачем знать свой реальный IP-адрес? Он понадобится вам для того, чтобы начать работать с некоторыми сервисами, требующими его указания вручную. Каким образом получить информацию об IP? Есть как минимум два способа:

Помните, что вместе с IP-адресом другим устройствам (и, соответственно, лицам) будет доступна и иная информация, а именно: названия и данные провайдера интернет-услуг, название и версия установленной операционной системы и браузера, географическая привязка. Сторонние сервисы видят, используете ли вы прокси-сервер или средства защиты данных.

Источник

регулярное выражение javascript для проверки IP-адресов

у меня есть несколько ip-адресов, таких как:

какой тип регулярного выражения я должен написать, если я хочу искать все 3 ip-адреса? Например, если я сделаю 115.42.150.* (Я смогу искать все 3 ip-адреса)

Читайте также:  sunlight в новосибирске адреса

что я могу сделать сейчас-это что-то вроде: /8<1-3>.9<1-3>.2<1-3>.5<1-3>/ но это не может работать хорошо.

17 ответов

регулярное выражение у вас уже есть несколько проблем:

во-первых, он содержит точки. В регулярном выражении точка означает «соответствовать любому символу», где вам нужно соответствовать только фактической точке. Для этого вам нужно избежать этого, поэтому поставьте перед точками косую черту.

во-вторых, но вы сопоставляете любые три цифры в каждом разделе. Это означает, что вы будете соответствовать любому номеру от 0 до 999, который, очевидно, содержит много недопустимых номеров IP-адресов.

Это может быть решается путем усложнения сопоставления чисел; на этом сайте есть другие ответы, которые объясняют, как это сделать, но, честно говоря, это не стоит усилий-на мой взгляд, вам было бы намного лучше разбить строку на точки, а затем просто проверить четыре блока как числовые целочисленные диапазоны-т. е.:

надеюсь, что это поможет.

может быть поздно, но кто-то может попробовать:

пример допустимого IP-адреса

пример недопустимого IP-адреса

код JavaScript для проверки IP-адреса

попробуйте этот, это более короткая версия:

Источник

What is the best way of validating an IP Address?

I have a method to validate a parameter IP Address. Being new to development as a whole I would like to know if there is a better way of doing this.

Its simple (I could do it) but it seems to do the trick.

11 Answers 11

Another approach to validate an IPv4 could be following :

It could be tested like:

The output will be:

You can also use IPAddress.TryParse but it has the limitations and could result in incorrect parsing.

Note that TryParse returns true if it parsed the input successfully, but that this does not necessarily mean that the resulting IP address is a valid one. Do not use this method to validate IP addresses.

But this would work with normal string containing at least three dots. Something like:

With IPAddress.TryParse you can check for existence of three dots and then call TryParse like:

Edit 1

Added some additional checks to prevent exceptions being thrown (which are costly). PS it won’t handle unicode.

Edit 2

@StephenMurby IPAddress.TryParse will return true if it successfully parsed the string. If you check the documentation for the method though it will throw an exception in two cases.

Its up to you to decide (design decision) whether you want to throw exceptions or return false. When it comes to parsing I generally prefer to return false rather than exceptions (the assumption being this is input that’s not guaranteed to be correct).

Breaking the return statement down, I am saying,

Remember C# boolean expressions are lazy evaluated, so the CLR won’t attempt to even parse the string if it is null or empty.

About the missing if, you can do something like,

But all you really doing is saying if something is true, return true. Easier to just return the expression straight away.

Источник

Образовательный портал