Биллинговая система Nodeny
29 Марта 2024, 15:11:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Микротик - Login method post-v6.43  (Прочитано 7942 раз)
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« : 20 Июля 2019, 13:05:05 »

Всем гуру доброго времени суток .

Как уже обсуждалось здесь http://forum.nodeny.com.ua/index.php?topic=2703.165  , Микротик в прошивках выше  6.45.1  использует новый метод авторизации на котором перестает работать модуль hw_mikrotik .pl

Имея динозавра в виде 50ой версии биллинга , я попробовал по аналогии выложенной Efendy изменить скрипт и под 50ую версию,  под требования авторизации МТ 6.45.1 , но к сожалению успехом изменения не увенчались . Или же синтаксис неверный или же еще какая то хитрость.
Остался в итоге на 6.44.5 , на текущий момент - это последняя прошивка в которой юзер Микротик нормально авторизируется.

Вопрос - как верно отредактировать скрипт  hw_mikrotik .pl , чтоб нормально пройти авторизацию ?



Код:
[i]@cmd = ('/login');
    hw_dialog ($sock, \@cmd, \@reply, \%attr);
    exists $attr{ret} or return 0;

    $md5 = new Digest::MD5;
    $md5->add (chr (0));
    $md5->add ($HW_nas_pass);
    $md5->add (pack ("H*", $attr{ret}));
    
    @cmd = (
        '/login',
        '=name=' . $HW_nas_user,
        '=response=00' . $md5->hexdigest
    );

    hw_dialog ($sock, \@cmd, \@reply, \%attr) or return 0;

    return ($reply[0] eq '!done');[/i]

Заранее спасибо !

#
Old API authentication method will also no longer work, see documentation for new login procedure:
wiki.mikrotik.com/wiki/Manual:API#Initial_login
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #1 : 20 Июля 2019, 22:08:48 »

По идее:

Код:
$md5 = new Digest::MD5;
$md5->add (chr (0));
$md5->add ($HW_nas_pass);
$md5->add (pack ("H*", $attr{ret}));

@cmd = (
    '/login',
    '=name=' . $HW_nas_user,
    '=response=00' . $md5->hexdigest
);


заменить на:

Код:
@cmd = (
    '/login',
    '=name=' . $HW_nas_user,
    '=response=' . $HW_nas_pass
);
Записан
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #2 : 20 Июля 2019, 22:57:52 »

 Спасибо, попробую !

Один из моих вариантов был таков, но он не заработал.

Код:
@cmd = ('/login',
'=name=' . $HW_nas_user,
'=password=' . $HW_nas_pass) or return 0;
     return ($reply[0] eq '!done');
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #3 : 21 Июля 2019, 00:09:28 »

Так вроде у тебя правильно (у меня нет - я скопировал и забыл имя параметра изменить). Наверное ты ж видел как н+ сделано:

Код:
my $reply = $m->hw_dialog('/login','=name='.$m->{user},'=password='.$m->{pass}) or return 0;
    return $reply->{'!done'};
говорят, что работает
Записан
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #4 : 21 Июля 2019, 10:18:03 »

Я видел , но в скрипте Н+ есть отличия .

Так выходит что финальный вариант для 50 таков , без '=response=' и  or return 0; ?

Код:
@cmd = (
    '/login',
    '=name=' . $HW_nas_user,
    '=password=' . $HW_nas_pass
);

Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #5 : 21 Июля 2019, 17:00:13 »

Да, но ты удалил лишнее: hw_dialog ...
Записан
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #6 : 21 Июля 2019, 17:51:00 »

Да, но ты удалил лишнее: hw_dialog ...

Звучит двухзначно, я удалил лишнее в смысле важное или лишнее в смысле ненужное ...

hw_dialog - там два раза....

Еще раз выкладываю возможную финальную версию начиная от $sock->blocking  , а вы скажите считаете ли верной или нет , если нет то поправьте меня пожалуйста( где -то надо пробелы ,а где  -то нет, или они не важны, я это не понял)  :

Код:
    $sock->blocking (0);
   @cmd = ('/login',
    '=name=' . $HW_nas_user,
    '=password=' . $HW_nas_pass);

    hw_dialog ($sock, \@cmd, \@reply, \%attr) or return 0;

    return ($reply[0] eq '!done');
}

# === API Mikrotik end =========================================================




Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4794



Просмотр профиля
« Ответ #7 : 21 Июля 2019, 19:40:40 »

Звучит двухзначно, я удалил лишнее в смысле важное или лишнее в смысле ненужное ...

hw_dialog - там два раза....

Вот твой код, который я комментировал:
Цитировать
@cmd = ('/login',
   '=name=' . $HW_nas_user,
   '=password=' . $HW_nas_pass) or return 0;
     return ($reply[0] eq '!done');

@cmd - это список команда + параметры.  or return 0 делает возврат если список пустой, но он не пустой, поэтому эта команда бессмысленна, что есть что нет. А вот дальше идет возврат (return) и по сути ты вообще никакой команды на микротик не послал. А hw_dialog посылает

Записан
gen PSI
NoDeny
Пользователь
*

Карма: -5
Offline Offline

Сообщений: 55


Просмотр профиля
« Ответ #8 : 22 Февраля 2020, 12:53:36 »

up

Всем снова здравствуйте . Проблема в итоге так и не решена , а Микротик хотелось бы обновлять хоть иногда. Nodeny пока обновить возможности нет.
Возможно у кого есть рабочий вариант отредактированного модуля , поделитесь пожалуйста. Все варианты выше ,увы, не работают. Связать 50ую версию и Микротик с прошивкой   6.45.1 и выше так и не выходит. Последняя рабочая версия RouterOS 6.44.6.
Записан
operhunt
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 13


Просмотр профиля Email
« Ответ #9 : 05 Марта 2020, 21:26:04 »

Аналогичная проблема... Неужели никто не обновляет Микротик?
Записан
k291
Старожил
****

Карма: -10
Offline Offline

Сообщений: 454


Просмотр профиля
« Ответ #10 : 05 Марта 2020, 23:09:11 »

Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1444



Просмотр профиля
« Ответ #11 : 06 Марта 2020, 09:46:30 »

Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать
Так себе защита. Можно сказать что последняя надежда. При атаке ботнет может и завесить управление нафиг. Что часто и происходит.
Записан
operhunt
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 13


Просмотр профиля Email
« Ответ #12 : 09 Марта 2020, 19:03:55 »

Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать
Так себе защита. Можно сказать что последняя надежда. При атаке ботнет может и завесить управление нафиг. Что часто и происходит.

Вы же эксперт по ноудени, возможно сможете поправить авторизацию для 50 версии.  Я готов оплатить Ваш труд)
Записан
operhunt
Пользователь
**

Карма: 2
Offline Offline

Сообщений: 13


Просмотр профиля Email
« Ответ #13 : 20 Марта 2020, 16:43:35 »

Код:
sub hw_connect
{
  my($md5);
  my(@cmd,@reply,%attr);
  $HW_error='';
  $sock='';
  &hw_debug('start connecting to the mikrotik');
  $sock=new IO::Socket::INET(PeerAddr=>$HW_nas_ip, PeerPort=>$HW_nas_port, Proto=>'tcp', Timeout=>$HW_nas_connect_t_out);
  if( !$sock )
  {
     $HW_error=$!;
     return 0;
  }
  $sock->blocking(0);
  @cmd=('/login');
  &hw_dialog($sock,\@cmd,\@reply,\%attr);
  exists $attr{ret} or return 0;
  $md5=new Digest::MD5;
  $md5->add(chr(0));
  $md5->add($HW_nas_pass);
  $md5->add(pack("H*",$attr{ret}));
  @cmd=('/login','=name='.$HW_nas_user,'=password='.$HW_nas_pass);
  &hw_dialog($sock,\@cmd,\@reply,\%attr) or return 0;
  return ($reply[0] eq '!done');
}
Работает. Пользуйтесь.
Записан
Hasard
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 26


Просмотр профиля
« Ответ #14 : 09 Июня 2021, 07:43:07 »

Красава !!!
Спасибо !!!
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!