Биллинговая система Nodeny

Главная категория => Nodeny 50 => Тема начата: gen PSI от 20 Июля 2019, 13:05:05



Название: Микротик - Login method post-v6.43
Отправлено: gen PSI от 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


Название: Re: Микротик - Login method post-v6.43
Отправлено: Efendy от 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
);


Название: Re: Микротик - Login method post-v6.43
Отправлено: gen PSI от 20 Июля 2019, 22:57:52
 Спасибо, попробую !

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

Код:
@cmd = ('/login',
'=name=' . $HW_nas_user,
'=password=' . $HW_nas_pass) or return 0;
     return ($reply[0] eq '!done');


Название: Re: Микротик - Login method post-v6.43
Отправлено: Efendy от 21 Июля 2019, 00:09:28
Так вроде у тебя правильно (у меня нет - я скопировал и забыл имя параметра изменить). Наверное ты ж видел как н+ сделано:

Код:
 my $reply = $m->hw_dialog('/login','=name='.$m->{user},'=password='.$m->{pass}) or return 0;
    return $reply->{'!done'};
говорят, что работает


Название: Re: Микротик - Login method post-v6.43
Отправлено: gen PSI от 21 Июля 2019, 10:18:03
Я видел , но в скрипте Н+ есть отличия .

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

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



Название: Re: Микротик - Login method post-v6.43
Отправлено: Efendy от 21 Июля 2019, 17:00:13
Да, но ты удалил лишнее: hw_dialog ...


Название: Re: Микротик - Login method post-v6.43
Отправлено: gen PSI от 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 =========================================================






Название: Re: Микротик - Login method post-v6.43
Отправлено: Efendy от 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 посылает



Название: Re: Микротик - Login method post-v6.43
Отправлено: gen PSI от 22 Февраля 2020, 12:53:36
up

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


Название: Re: Микротик - Login method post-v6.43
Отправлено: operhunt от 05 Марта 2020, 21:26:04
Аналогичная проблема... Неужели никто не обновляет Микротик?


Название: Re: Микротик - Login method post-v6.43
Отправлено: k291 от 05 Марта 2020, 23:09:11
Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать


Название: Re: Микротик - Login method post-v6.43
Отправлено: Cell от 06 Марта 2020, 09:46:30
Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать
Так себе защита. Можно сказать что последняя надежда. При атаке ботнет может и завесить управление нафиг. Что часто и происходит.


Название: Re: Микротик - Login method post-v6.43
Отправлено: operhunt от 09 Марта 2020, 19:03:55
Я обновил. А в IP-Services прописал блоки IP с которых разрешен доступ. Не удобно, но что сейчас остается делать
Так себе защита. Можно сказать что последняя надежда. При атаке ботнет может и завесить управление нафиг. Что часто и происходит.

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


Название: Re: Микротик - Login method post-v6.43
Отправлено: operhunt от 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');
}
Работает. Пользуйтесь.


Название: Re: Микротик - Login method post-v6.43
Отправлено: Hasard от 09 Июня 2021, 07:43:07
Красава !!!
Спасибо !!!


Название: Re: Микротик - Login method post-v6.43
Отправлено: hardman от 10 Августа 2021, 14:34:47
Прошивку в роутере  обновили и пригодилось, Спасибо за добро!