Как проверить действительный публичный IP-адрес?

39

Рассмотрим список IP-адресов, предоставленных HTTP-заголовком X-Forwarded-For :

10.0.0.142, 192.168.0.10, 212.43.234.12, 54.23.66.43

Я хотел бы знать, какой из них является первым общедоступным адресом в этом списке. Я могу просматривать их достаточно легко, но как я могу определить, какие из них общедоступны? Мне кажется (мой неподготовленный глаз), что 10.0.0.142это рабочая станция, 192.168.0.10внутренний прокси и 212.43.234.12общедоступный адрес, который пересылается через прокси на 54.23.66.43. Есть ли способ рассчитать это в коде?

Моя первая интуиция заключается в том, что адреса, которые начинаются с 10.или 192.не являются общедоступными, но http://simplesniff.com показывает мой домашний IP-адрес 192.117.111.61. Существует ли формула для определения того, какие адреса являются публичными, а какие зарезервированными? Обратите внимание, что даже попытка пропинговать рассматриваемый сервер может не помочь, так как некоторые серверы не отвечают на пинг, а также в моей локальной сети может быть адрес, который также соответствует внутреннему адресу.

dotancohen
источник
3
Я также хотел бы отметить, что даже если вы обнаружите, что адрес маршрутизируемый, некоторые компании злоупотребляют публичным адресным пространством внутри страны. Я знаю из первых рук об очень крупном и известном корпоративном имени, которое необъяснимым образом использует пространство AFRINIC и AT & T IPv4 в своей внутренней корпоративной сети вместо пространства RFC1918 ... они проксируют весь трафик HTTP ... и X-Forwarded -Для заголовка из их корпоративной сети будет отображаться публичное пространство, которым они на самом деле не владеют.
Майк Пеннингтон
@MikePennington это тоже из первых рук, за исключением того, что они использовали номера APNIC. Может также вызвать проблему, когда внутренняя машина (особенно те, которые находят адресата в своей подсети) пытается получить доступ к одному из общедоступных серверов ...
emynd
@MikePennington - для частной сети, использующей IPv4-адреса учеников, которые фактически используются за пределами частной сети (например, Интернет), как кто-то в частной сети может получить доступ к общедоступному сайту с IP-адресом в том же диапазоне? Разве этот запрос не будет перенаправлен на некоторый компьютер (даже, возможно, на их собственный компьютер) в частной сети?
Кевин Феган
Слепое доверие к x-forwarded-for - плохая идея. Для любого обидчика тривиально установить поддельный заголовок x-forwarded-for, запрашивающий любой адрес, который он хочет.
Питер Грин

Ответы:

24

RFC 1918 определяет диапазоны частных IP-адресов. Посмотрите здесь.

Из этого документа:

  1. Частное адресное пространство

    Управление по присвоению номеров в Интернете (IANA) зарезервировало следующие три блока пространства IP-адресов для частных сетей:

    10.0.0.0 - 10.255.255.255 (префикс 10/8)

    172.16.0.0 - 172.31.255.255 (префикс 172.16 / 12)

    192.168.0.0 - 192.168.255.255 (префикс 192.168 / 16)

GerryEgan
источник
Спасибо. Мне интересно, что 127.0.0.0/16(а может и больше) нет в этом списке.
dotancohen
5
localhost определен в tools.ietf.org/html/rfc6761
Дэррил Бротен
4
@dotancohen: блок обратной петли - это / 8, а не / 16, и его нет в этом списке, потому что это не частное адресное пространство.
Blrfl
@Blrfl: Спасибо, я не был уверен, насколько широк петлевой блок. Я на самом деле не пытаюсь идентифицировать частные адреса, а скорее не публичные (подмножество частных). Кроме адресов RFC 1918/6890 и пространства 127.0.0.0/8, существуют ли другие явно непубличные адреса, с которыми можно столкнуться?
dotancohen
1
en.wikipedia.org/wiki/… 240.0.0.0 - 254.255.255.254 (240.0.0.0/4 и 255.0.0.0/8)
Дэвид Хоуд
37

Помимо исходного пространства RFC 1918 (которое теперь обновлено до RFC6890 ), есть несколько других блоков, таких как 192.0.2.0, которые не объявлены публично. Кроме того, возможно, что кто-то имеет действительное пространство IPv4, которое просто не объявлено в общедоступном Интернете.

Самое простое, что можно сделать telnet route-views.oregon-ix.net, это войти в систему rviewsи посмотреть самим ... например, это некое «192» пространство, анонсированное AS7018 (AT & T) ...

route-views>sh ip route 192.199.1.0
Routing entry for 192.199.1.0/24
  Known via "bgp 6447", distance 20, metric 0
  Tag 7018, type external
  Last update from 12.0.1.63 3w1d ago
  Routing Descriptor Blocks:
  * 12.0.1.63, from 12.0.1.63, 3w1d ago
      Route metric is 0, traffic share count is 1
      AS Hops 2
      Route tag 7018

route-views>

С другой стороны, вы увидите, что 192.0.2.0/24 (ref RFC6890 ) нигде не найти ...

route-views>sh ip route 192.0.2.0 255.255.255.0
% Subnet not in table
route-views>

Также не 169.254.0.0/16 (или дольше) ...

route-views>sh ip route 169.254.0.0 255.255.0.0 longer
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 128.223.51.1 to network 0.0.0.0

route-views>
Майк Пеннингтон
источник
1
RFC 1918 не был обновлен (или для) RFC 6890. RFC 6890 просто « повторяет присвоение блока адресов IPv4 (192.0.0.0/24) IANA. Он также инструктирует IANA реструктурировать свои адреса специального назначения IPv4 и IPv6 Реестры. «Он не обновляет записи реестра адресов специального назначения IPv4 для частного использования, а блок адресов IPv4 192.0.0.0/24 относится к категории« Назначения протокола IETF ».
один раз
2
@ one.time, RFC 6890 содержит расширенный набор адресного пространства, зарезервированного в RFC 1918. Я понятия не имею, почему вы говорите о 192.0.0.0/24; возможно, вам стоит перечитать мой ответ более внимательно :-)
Майк Пеннингтон,
Блок IPv4 192.0.0.0/24 является основным предметом обсуждения RFC 6890, поэтому я упомянул его для хорошей оценки и сравнения с RFC 1918. «Помимо оригинального пространства RFC 1918 (которое теперь обновлено до RFC6890)» вызвало мое любопытство при чтении вашего поста. Помимо обновления записей реестра адресов специального назначения для IPv4 и IPv6 для включения 192.0.0.0.24, RFC 6890 не является обновлением для RFC 1918. Я просто хотел представить наблюдение относительно точности этого утверждения. HTHs ;-)
один раз
5
@ one.time, педантично RFC 6890 не является обновлением RFC 1918. Функционально следует использовать RFC 6890 вместо RFC 1918 при рассмотрении пространства IP, которое является допустимым в общедоступной таблице BGP ...
Майк Пеннингтон,
13

Team Cymru предоставляет справочную информацию по IPv4 и IPv6, которую можно использовать для фильтрации неназначенных / зарезервированных / частных IP-адресов - она ​​предлагается как в виде простого списка для известных префиксов, так и в виде гораздо большего списка, включающего пространство, которое пока не назначен RIR.

Они также запускают BGP-сервер Bogon, к которому вы можете запросить бесплатный пиринг - неоценимо, если вы не можете запустить зону без доступа по умолчанию в Интернете.

Olipro
источник
2
Откровенно говоря, «неназначенный» - это то, что бесполезно фильтровать, фильтрация вызывает гораздо больше проблем, чем решает. А настоящие богоны легки, так как они очень стабильны / статичны.
ytti
2
Хорошо, тогда не используйте это, как я уже сказал, они предлагают различные вкусы.
Олипро
2

Существует ряд диапазонов, которые зарезервированы для различных вариантов использования. IANA имеет авторитетный и полный список . Он включает в себя RFC1918, RFC6761, а также более поздние бронирования, такие как блок CGN 100,64 / 10. Если вы найдете там какие-либо адреса, они, вероятно, каким-то образом используются в частной сети и должны быть отброшены в пользу других в поисках первого публичного адреса.

KLL
источник