Telnet-интерфейс у D-Link 3100 изменился настолько,
что пользоваться им в пакетном режиме стало невозможно:
1) при входе вместо "Username" пишется "User name",
из-за чего с ним перестал работать стандартный модуль Perl-Net-Telnet
Потребовалось накладывать на него патч.
2) Все D-Link 3xxx, кроме 3100, имеют приглашение, описываемое регулярным выражением
Код:
/\x0d(\x1B\[7mCTRL\+C.+\x1B\[0m All\s*|D.S-\w+:[[:alnum:]]+#)$/
Теперь, после мучительных экспериментов, подобран такой шаблон:
Код:
/[\x0d\x0a]+([A-Za-z0-9 \-_:]+[>#]\s*|\x1B\[\dmCTRL\+C.+\x1B\[0m All\s*|D.S-\w+:[[:alnum:]]+#)$/
Однако даже это приглашение не работает, если была введена неправильная команда
(L2/L3 определяется с помощью "show ospf area"), так как после вывода подсказки
выдаётся строка с приглашением, перед которым вставлен ESC-символ 0x1B,
а за ним повторяется неправильная команда:
Код:
...
< 0x00000: 20 20 76 6c 61 6e 5f 74 72 75 6e 6b 20 20 20 20 vlan_trunk
< 0x00010: 20 20 20 20 20 20 20
< 0x00000: 56 6c 61 6e 20 54 72 75 6e 6b 0d 0a Vlan Trunk..
< 0x00000: 1b 5b 42 44 47 53 2d 33 31 30 30 23 20 73 68 6f .[BDGS-3100# sho
< 0x00010: 77 20 6f 73 70 66 20 61 72 65 61 w ospf area
Каким регулярным выражением такое отследить?
Просьба вернуть тот убогий telnet-интерфейс, который был раньше,
или привести работающий пример на базе Perl-Net-Telnet.
