2015-06-05 1 views
2

RFC1918 определяет частные адреса IPv4, как те, которые попадают в любой из следующих диапазонов:Regex: Как сопоставить IP-адрес в RFC1918 частных диапазонах адресов IPV4 (в Python)?

10.0.0.0 - 10.255.255.255 
172.16.0.0 - 172.31.255.255 
192.168.0.0 - 192.168.255.255 

Я добавляю 127.0.0.1 в этот список, для целей моего анализа. Я знаю, что проверенные и проверенные регулярные выражения соответствуют любому IPv4-адресу, но как бы я сужу одно из них, чтобы свести к совпадению, только если адрес попадает в один из вышеуказанных диапазонов или в 127.0.0.1? Будет использовать Python.

Большое спасибо

+1

Я не знаю, как вы это делаете с помощью регулярного выражения. Я думаю, вам нужно будет преобразовать адреса в переменные, а затем посмотреть, проходит ли значение, передаваемое между любыми диапазонами в вашем списке. http://stackoverflow.com/questions/9590965/convert-an-ip-string-to-a-number-and-vice-versa – chris85

+1

Не ошибитесь, считая, что только 127.0.0.1 - это loopback. 127.0.0.0/8 - это, по сути, адрес класса А, означающий, что все, что начинается с 127, будет отображаться в loopback. Для ваших целей я думаю, что это будет иметь значение. –

ответ

3

Следующая регулярное выражение должно работать:

^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..* 

DEMO

+0

Это, к сожалению, неверный ответ. Он также соответствует этому адресу: 192.168.266.333 и даже полному совпадению по этой общей синтаксической ошибке: 10.333.333.333. с завершением периода. –

+1

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

5

В Python 3.3+ (вы не указали версию, и почему регулярные выражения являются обязательным требованием, так что я 'll положить это здесь для полноты), вы можете:

import ipaddress 

addr_string = # string with your IP address 
try: 
    addr = ipaddress.IPv4Address(addr_string) 
except ValueError: 
    raise # not an IP address 
if addr.is_private: 
    pass # is a private address 

Смотри также: ipaddress module documentation

Смежные вопросы