Автор Тема: Convert::ASN1  (Прочитано 5265 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« : 16 Июня 2005, 17:05:36 »
Доброго времени суток
:cool:

Вопросик по модулю:
Если некое поле (IP) типа OCTET_STRING, как с помощью вышеуказанного модуля впихнуть туды ай-пишник (к примеру вида: 0.0.0.0), чтоб в самом конфиге он выглядел как 4 байта (ту бишь: 30 30 30 30) ?

Заранее пааасибо :)

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #1 : 16 Июня 2005, 17:09:27 »
Небольшое добавление:
С помощью сего модуля пишется интерфейс к конфигурационному файлу в формате ASN-1
Ту бишь сначала парсится этот конфиг в хэш, а потом обратно уже с новыми данными... И не получается впихнуть уже в исходный файл ай-пишник, чтоб он выглядел как 4 байта...

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Convert::ASN1
« Ответ #2 : 16 Июня 2005, 18:23:47 »
А может Вам нужно сначала ИП просто запаковать?
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #3 : 20 Июня 2005, 14:12:03 »
Проблема в том, что при присвоении значения полю IP он воспринимается как строка, ту биш 1 байт на 1 символ, а нужно, чтоб воспринимался как 4 байта :(

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #4 : 21 Июня 2005, 04:43:18 »
Я еще начинающий программист и не научился пока применять функции pack/unpack :( У меня сделано вот как:

sub ip2dec {
   my $dec = 0; my $ip = $_[0]; my @s = split(/\\./, $ip);
   for (my $i=3; $i>=0; $i--) {$dec += 256**(3-$i) * $s[$i]}
   return $dec;
  }

  sub dec2ip {
   my $ip = \'\'; my $dec = $_[0]; my $s;
   for (my $i=3; $i>=0; $i--) {$s = int($dec / 256**$i); $ip .= $s.\'.\'; $dec -= $s * 256**$i}
   $ip  =~ s/\\.+$//g;
   return ($ip);
  }

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #5 : 06 Июля 2005, 14:50:04 »
Помогите пожалуйста преобразовать IP к примеру вида:
127.0.0.1
в 4 байта вида:
0x7F 0x00 0x00 0x01

Наверняка уже кому-нить приходилось подобное делать. Help PLEASE =]

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #6 : 06 Июля 2005, 15:05:46 »
Если я вас правильно понял, то это то что тебе надо, только праверок на правильность нет:

sub ip_to_hex {
  return join \' \', map {\'0x\' . sprintf("%02lX", $_)} split /\\./, shift;
};

print ip_to_hex(\'127.0.0.1\');

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Convert::ASN1
« Ответ #7 : 06 Июля 2005, 15:20:26 »
use Socket;
my $ip = \'127.0.0.1\';
print inet_aton($ip);
 в исканиях.

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #8 : 06 Июля 2005, 15:55:42 »
2 Green Kakadu

Спасибо огромное ! Помогло !

А как теперь обратно из бинарика в IP ?

Оффлайн GunJah

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Convert::ASN1
« Ответ #9 : 06 Июля 2005, 16:09:20 »
Sorry, тулю... Уже нашел.
inet_ntoa($_);

Всем ОГРОМНОЕ СПАСИБО !!!
:-)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28