Как стать автором
Обновить

Комментарии 131

Интересный способ, не знал о таком
Честно говоря, я вот уже 10 минут пытаюсь вспомнить, _откуда_ я знаю об этом. Так и не вспомнил :-(

В студенческие годы только это знание помогло наконец понять, почему не проходит коннект на айпи 192.168.070.31. Человек набрал 070 потому, что тогда не надо точку давить — программка сама перекидывает фокус на следующий октет. И мучался два дня, ничего не понимая :-)
MAC тоже можно поразному записывать :) когда я только начинал знакомиться с cisco очень удивляла надпись вида хххх.хххх.хххх
Это тупо расстанка «знаков препинания», так сказать.
Чего действительно в цисках другое забавное, так это поддежка обратной записи айпи, 1.0.0.127, к примеру.
Когда-то ооооочень давно была страничка в интернете на английском, посвящённая маскировке УРЛа, и там было написано много способов — и такой как www.list.ru@1297618184, и такие, как Вы описали… Я потом искал эту страничку — не нашёл. Возможно, эта информация у Вас оттуда же в голове отложилась и вот всплыла.
да, вот я тоже об этом сразу вспомнил
и даже какая-то программа была, которая маскировала и демаскировала такие урлы
А я случайно узнал что такое longip.
Когда потребовалось написать механизм, на проверку вхождения в заданный диапазон.
Потом заменил на стандартную функцию ip2long()
На вскидку думаю так — это связанно с особенностью современной архитектуры, точнее ее 32-разрядностью.
32 бита = 4 байта = 1 двойное слово
В АйПи используется как раз 4 байта, которые хранятся в памяти в виде одного двойного слова
По моему так (с) Винни пух
о_о
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
вот так ( с http:// работает):
011526012410/
НЛО прилетело и опубликовало эту надпись здесь
Хром сразу в нормальный айпи конвертирует.
НЛО прилетело и опубликовало эту надпись здесь
А огнелис вообще выдал сразу www.google.ru/ о_О
аналогично
огнелис оставил без изменения, а то что у вас получилось — редирект.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Safari can’t open the page “http://1249723236/” because Safari can’t find the server “1249723236”.

Сафари 4.0.3 на Снежном Леопарде…

Терминал пигует нормально предварительно сконвертировав в стандартный айпи.
В PHP есть даже встроенные функции для этого:
php.net/ip2long
php.net/long2ip

Там же, в мануале, ссылка на реализацию этого же в стандартной библиотеке С. Наверное из C оно и попало в ОС, браузеры и т.п.
Должен заметить, что там довольно странная реализация. Функция может легко давать отрицательные значения.
Да, в мануале написано:

Note: Because PHP's integer type is signed, and many IP addresses will result in negative integers, you need to use the "%u" formatter of sprintf() or printf() to get the string representation of the unsigned IP address.
Функция ip2long грешит.
Если возвращенное значение из функции более максимального значения целого числа: 32 бита (2147483647) или 64 бита, то производится пересчет значения в число с плавающей точкой.
Поэтому, на разных платформах, функция может выдать разные значения. будьте осторожны.
Интересно, как из 4 байт может получиться число более 32 байт?
Дружок, на всякий случай, чтобы ты знал: числа бывают знаковые и беззнаковые. про 64 бита — гон.
squid только об этом не знает.
и nginx говорит Bad Request
видимо, этот способ записи не везде поддерживается
в FTP-клиенте и браузере замечательно работает
у меня второй сквид сработал нормально. а третий в комментах выше не справился.
Полезное применение такой нотации — хранение IP-адресов в базе данных.
В строковом виде IP занимает 7-15 байт, в числовом — 4 байта.
В той же MySQL реализовано, INET_ATON() и INET_NTOA().
НЛО прилетело и опубликовало эту надпись здесь
В mysql ещё нет.
В PHP можно использовать inet_pton();
Больше полезно для проверки входждения в диапазон адресов :)
А ещё для сортировки очень здорово, да.
Ну и как следствие отсюда 62.149.0.62 = 62.149.62
А почему?
62 * 2563 + 149 * 2562 + 0 * 2561 + 62 * 256O = 1049952318
62 * 2563 + 149 * 2562 + 62 * 2561 = 1049968128
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Вы написали для случая 62.149.0.62. У меня записано то же самое. А вот для 62.149.62 я действительно ошибся. ТО, что записано у меня во второй строке — это для 62.149.62.0
А для 62.149.62 будет: 62 * 2562 + 149 * 2561 + 62 * 256o = 4101438. Т.е. вс равно не равно :-)
А почему так считать? Почему не 62 * 2563 + 149 * 2561 + 62 * 256?
Я не прав…
publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/libs/commtrf2/inet_addr.htm
The following describes the restrictions on the field values for the inet_addr subroutine:
Format Field Restrictions (in decimal)
a Value_a < 4,294,967,296
a.b Value_a < 256; Value_b < 16,777,216
a.b.c Value_a < 256; Value_b < 256; Value_c < 65536
a.b.c.d Value_a < 256; Value_b < 256; Value_c < 256; Value_d < 256

Т.е. 62.149.62 мы понимаем как 62.149.aa.bb, где aa.bb равно 62, т.е. 00.62.
DileSoftправ :)
потому что
62 * 2563 + 149 * 2562 + 0 * 2561 + 62 * 256O = 1049952318
62 * 2563 + 149 * 2562 + 62 * 256O = 1049952318
см. выше.
Как вы узнали, что 62 нужно умножить на 1, а не на 256?
НЛО прилетело и опубликовало эту надпись здесь
марш в школу на информатику, изучать способы перевода из одной системы счисления в другую

если в школу уже поздно. то хотя бы в гугл или википедию
НЛО прилетело и опубликовало эту надпись здесь
ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления

топик стартер как-то туманно обяснил процесс перевода стандартного ip адреса в целое десятичное число, хотя на само деле процесс прост

каждый байт ip адреса переводится в шестнадцатиричную систему, затем все байты записываются в одно число в том же порядке как они стоя в ip адресе, и хатем это числу переводится в десятичную систему

123.234.34.45 = 0x7B.0xEA.0x22.0x2D = 0x7BEA222D = 2078941741
Да в том то и дело, что когда PHP посчитает ip2long('62.149.62') и ip2long('62.149.0.62'), то выдаст одинаковые результаты, как и С, впрочем. Всё это из-за реализации понятия «non-complete IP», насколько я понял. Т.е. IP с тремя октетами этой библиотекой считаются валидными и переводятся по другим правилам (не «дополняя» нулём спереди или сзади.
Это не имеет ничего общего со способами перевода информации, 62.149.0.62 ≠ 62.149.62 при переводе поразрядно, они равны только как ip адреса, но вот почему — не понятно.
И снова см. выше :) Это сточки из мануала к C-шной библиотеке, на её основе PHP-шная написана
Т.е. это не имеет никакого логического объяснения, просто так реализовано в самой популярной библиотеке?
логическое объяснение в том, что адрес имеет фиксированную длину, и если он у вас в формате a.b.c, то на последнюю часть отводится оставшиеся для двух разрядов 65536. то есть:
62.149.4096= 62.149.16.0
62.149.256= 62.149.1.0

62.149.62 = 62.19.0.62
62.149.255= 62.149.0.255 (сорри, ctrl случайно нажала)
и может где-то не так перевела из 16-ричной в 10-чную. перевожу на бегу )
потому, что 62.149.0.62 = 62.149.62, 62.62 = 62.0.0.62, 127.1 = 127.0.0.1
в IP адресе 0 можно опускать, когда придет IPV6 это прочувствуется острее.
Вот ведь твердолобый :)
Спрашивают «почему», ответ опять «потому что равно». Ну да ладно, trisch вроде все объяснила.
затупил маленько. бывает :)
Либо у меня дежавю, либо это уже недавно было на хабре
Классический пример применения union в языке C и аналогичных конструкций языка ;-)
o_O Вы о чём?
union в языке C — такая конструкция, в которую можно записать массив из четырёх байтов, а прочитать 32х-битное целое, которое будет состоять как раз из тех самых байтов.
Неужели? А то что на LE и BE значения будут разные роли не играет?
Вам никто не сказал что endiannes сохранится. Это именно способ доступа к памяти, а не преобразование. Часто еще применялось для доступа к отдельным битам флагов, типа такого:

union {
dword dwFlags;
struct {
bool bit1: 1;
bool bit2: 1;
bool bit3: 1;
bool bit4: 1;
// etc
}
}

тогда можно писать в отдельный бит, а читать из всего слова. ну или наоборот, одним махом присвоить/прочитать все значения.
пардон, парсер схавал отступы :(
> Вам никто не сказал что endiannes сохранится.
И какое тогда union имеет отношение к теме топика?
К тому что надо читать всю ветку комментариев, а не только последние два. Ибо весь сабж суть разные формы представления одного и того же dword-а.
я уже сталкивался с этим, когда писал под виндус приложение на c++ для работы с роутами с использованием библиотеки iphlpapi. там как раз при возвращении таблицы роутов все ip адреса dword'овские, а не как я надеялся получать ip в виде структуры
Чесно говоря, до последнего предложения казалось, что топик полная фигня. Но вот прикладная часть в корне меняет дело!
НЛО прилетело и опубликовало эту надпись здесь
Здорово.

Интересна обратная процедура — есть, например, номер телефона (вместе с кодом города — как раз) — и получить такой же IP-адрес :-)

Получается unified messaging в чистом виде.
Только вот айпи-адреса по одному не продаются, так что это дело очень большого везения (или больших денег), заиметь такой адрес.
Куда проще достать номер аськи.
Для телефонов есть e164.arpa., хотя он не так известен, как in-addr.arpa. и вряд ли широко делегируется.
НЛО прилетело и опубликовало эту надпись здесь
а теперь попробуйте

ping 6425673728
соврамши

ping 6425673729
а затем

ping 10720641025
и 127.1 попробуйте
«8 * 256О» — oO, это шо?
или для наглядности?
Это «восемь умножить на двести пятьдесят шесть в нулевой степени».
это восемь. просто восемь.
точно, для наглядности
я как-то сталкивался с айпи адресами в виде числа, если не изменяет память, то это было в ULOG в linux`e…
наверное полезно было бы в пост добавить алгоритм для обратного преобразования в традиционный вид.
>алгоритм для обратного преобразования в традиционный вид

calc.exe

из десятичного в hex, и оттуда по байтово снова в dec
В детстве читал про это в Хакере, даже фраза была похожая: «можно записать так… так..., или даже смешивать»
Ага, я тоже оттуда подчерпнул
> В детстве читал про это в Хакере
Вот так незаметно и подступила ко мне старость
Да, тоже вспомнил. Имха, 98 год, ещё бумажное издание.
А также 9644112386 и так далее…
Что в первый раз с переполнением сталкиваетесь?
Не забывайте ещё про htonl/ntohl преобразования, ибо есть «сетевой» порядок байт, описанный в RFC, а есть машинный, зависящий от ОС и железа.
Иногда байты надо переворачивать…
баловалка на вечер=)
Недавно проскакивало в комментариях к какому-то посту.
Капитан Очевидность припас ещё один способ записи IPv4 адресов: через их отображение в IPv6 адреса. Естественно, он будет работать только на dual-stack хостах (последние версии винды и линукса поддерживают, макось тоже, наверное). Ну и распознаёт такие адреса ещё меньшее количество ПО (проксей, блог-парсеров и т.п.).

Так, приведённый в примере 77.88.21.8 может быть записан как:
::ffff:77.88.21.8 или ::ffff:4D58:1508. В виде URL это будет: http://[::ffff:77.88.21.8]/ или http://[::ffff:4D58:1508]/

Причём вначале можно указать до 5 ноликов, причём как сначала, так и с конца пропуска:
::0:0:ffff:77.88.21.8, 0:0::ffff:4D58:1508, .., 0:0:0:0:0:ffff:77.88.21.8.
это ужасно.
пора эволюционировать в роботов
Скоро придёт IPv6 и всё, никаких вам украшений адресов.
Впрочем, он уже пришёл — Freenet6 же! Я даже пробовал.
НЛО прилетело и опубликовало эту надпись здесь
О да! Я сразу не вспомнил, но это же прекрасно!
Интересно то, что хром в статье все ссылки позаменял на классический формат.
Опера тоже
НЛО прилетело и опубликовало эту надпись здесь
Увы)
1000000000 — 59.154.202.0 — Australia
222222222 — 13.62.215.142 — United States
АААААА 0.10.44.42— демонический айпишник…
Это работает не везде. Не в любом браузере, не в любой OS.
А яндекс не боится хабраэффекта?
Если даже хабр не боится хабраэффекта, то думаю яндексу на него вообще наплевать (:
4815162342 опасно пинговать О_о
Пинговать надо только раз в 108 минут
жалко, что никто не написал, откуда этот трюк взялся
я RFC полистал, но не нашел ничего такого
В том-то и дело, что этот способ является вредным нарушением стандартов, описанных в RFC. Весь «трюк» заключается в том, что некоторые программы (например, броузеры) пытаются быть «умными» и превращать нестандартные незаконные URL в законные, «догадываясь», что 1234567890 — это не имя хоста, а числовой IP-адрес. С точки зрения RFC h ttp://1234567890/ (после h нужно убрать пробел) не является корректным URL с IP-адресом (1234567890 — это имя хоста, которое должно разрешаться DNS).
Другой пример нарушения стандартов, который, к сожалению, нередко используется, это HTTP URL с именем пользователя и паролем, например
h ttp://vasya:collpassword@www.acme.com/ (после h нужно убрать пробел)
Такие URL со схемой ftp: вполне валидны, но с http: — нет.
Линукс тогда получается тоже идет поперек стандарта: ping 1297618184 и lynx 1297618184 работают на ура.
Вы можете привести RFC, где описывается «нотация» IP-адреса? Интересно все-таки увидеть первоисточник.
Линукс является ядром ОС и имеет очень отдаленное отношение к проблеме. Прикладная программа ping — это тоже о другом. Разные прикладные программы могут позволять представлять IP-адрес в самых разных формах, хоть словами. Речь не об IP-адресах вообще. Я об стандартной универсальной вещи, используемой множеством прикладных программ — об URI (или URL, разница тут не важна). А вот в URL-то IP-адрес можно указывать не как заблагорассудится, или как позволяет программа ping в конкретно вашем Линуксе, а только определенным образом, который и стандартизирован в RFC3986. Uniform Resource Identifier (URI): Generic Syntax
Процитирую нужные кусочки (выделение жирным — моё):
A host identified by an IPv4 literal address is represented in
dotted-decimal notation (a sequence of four decimal numbers in the
range 0 to 255, separated by "."), as described in [RFC1123] by
reference to [RFC0952]. Note that other forms of dotted notation may
be interpreted on some platforms, as described in Section 7.4, but
only the dotted-decimal form of four octets is allowed by this
grammar.


IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet

dec-octet = DIGIT; 0-9
/ %x31-39 DIGIT; 10-99
/ «1» 2DIGIT; 100-199
/ «2» %x30-34 DIGIT; 200-249
/ «25» %x30-35; 250-255
спасибо, теперь все понятно
На связке Mac Os + Safari числовое представление адреса не работает
А всем говорят — Think different… ;)
ненене, никаких холиваров :) смысл этого выражения в другом :)
Там скоро и адресная строка не будет работать, ибо правоверный мак-юзер не должен набирать адрес с клавиатуры, это для варварских линуксоидов и виндузятников.
скорей бы уж )))
Ну да. Внедрят, предположим, голосовой ввод, и будут полчища юзеров усердно пытаться спеллить [haebrahaebr], а в ответ им Four-Zero-Four:))
Господа, а зачем карете турбина? IP четвертой версии уже потихоньку уходит в прошлое.
Ну вот и обращайся к гуглу (и большинству сайтов) по 6. Наверняка его тоже можно сократить до натурального числа, только в 2 раза длиннее.
ping 0xBabaBeda
ничего личного :)
я никого не испугаю, если скажу что RGB(255, 127, 0) можно записать в виде ff7f00 или 16744192?
16744192 что-то не очень работает у меня в CSS
приведите пример
я где-то упомянул CSS?
rgb(x, y, z) — в CSS есть такая конструкция, вот я и подумал
то, что можно цвет записать числом — это замечательно, но способ записи IP, который тут описан очень много где работает
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Публикации

Истории