LINUX.ORG.RU
ФорумAdmin

Формат записи IP адреса

 


0

2

Здравствуйте!
Есть список Ай-Пи адресов по странам мира. Каждая строчка там имеет вид:

"16779264","16781311","CN","CHINA","GUANGDONG","GUANGZHOU"
"16781312","16785407","JP","JAPAN","TOKYO","TOKYO"
"16785408","16793599","CN","CHINA","GUANGDONG","GUANGZHOU"
"16793600","16809983","JP","JAPAN","HIROSHIMA","HIROSHIMA-SHI"
"16809984","16810751","TH","THAILAND","KRUNG THEP","BANGKOK"
"16810752","16811007","TH","THAILAND","PHUKET","PHUKET"
Честно говоря я не понимаю, как перевести Ай-Пи номера к нормальному виду, как:
16.78.13.12
16.78.54.08
Для моей программы, куда я должен загрузить адреса, нужен именно такой формат.
Прошу сильно не пинать, впервые столкнулся с таким моментом.

16219264 == 162.19.2.64 ? 16.219.2.64 ? 16.21.92.64 ?

minakov ★★★★★
()
Ответ на: комментарий от alexru

16219264 == 162.19.2.64 ? 16.219.2.64 ? 16.21.92.64 ?

Честно говоря я здесь не очень понял. Ведь в основном списке заданы адреса «от» и «до». И как в этом случае применить то, что рекомендует г-н minakov

16810752 = 0x01008300 == 0x01 0x00 0x83 0x00 == 1.0.131.0
16811007 = 0x010083ff == 0x01 0x00 0x83 0xff == 1.0.131.255

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

rafaello
() автор топика

И чему щас в школе учат? IPv4 — это 32-битное число. Нотация X.X.X.X представляет его в 256-ричной системе счисления.

Надеюсь, ты сможешь перевести из десятичной (или двоичной, поскольку побитовые логические операции у тебя имеются) в 256-ричную?

Если нет, ЕМНИП, смотри Выгодского (справочник по элементарной математике) или википедию.

Macil ★★★★★
()
Ответ на: комментарий от rafaello

Не благодари.

perl -MSocket -e "print inet_ntoa(pack('N','16810752'));"

Ну или, если в скрипте

IPHEX=16810752 ; perl -MSocket -e "print inet_ntoa(pack('N','${IPHEX}'));"

Umberto ★☆
()
Ответ на: комментарий от rafaello

я бы смог понять то, что предлагает г-н alexru

Про понимание уже тыкнули, но много где есть готовые функции преобразования.

mysql> select INET_NTOA(16810752);
+---------------------+
| INET_NTOA(16810752) |
+---------------------+
| 1.0.131.0           |
+---------------------+
1 row in set (0,00 sec)

В Perl тоже есть. О, про Perl опередили. :-)

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от Umberto

Друзья! Я просто должен Вас всех крепко обнять и сказать спасибо!

PS.

И чему щас в школе учат?

Сразу стал вспоминать тот золотой возраст, но почему то первым делом вспомнилось, как я учился:

  • Курить табак, ну иногда что и покрепче...
  • Пить пиво, ну иногда что и покрепче...
  • «Снимать телок», чтобы с ними «потащиться»

Видимо это связано с тем, что просто не надо было. Зато сейчас, когда возникла необходимость, приходится заново переучиваться...

rafaello
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.