LINUX.ORG.RU

Пример веб-интерфейса: с чем его едят и почему не работает?

 , , , ,


1

3

Тема для самообразования, то ли в Web-, то ли в Development, то ли в Talks.

Есть железка (РЧ-усилистель), с управлением на контроллере Microchip PIC18F97J60-I/PF.

Неисправная, один из симптомов — не обрабатываются шаблоны веб-интерфейса (в браузере вижу имена переменных).

Содержимое микроконтроллера (128KB) мне вряд ли удасться прочитать (как?). Рядом с контроллером есть дополнительная микросхема памяти того же объёма с MPFS. В ней содержатся файлы веб-интерфейса, устроенные следующим образом:

  • Файлы вида foo.htm — шаблоны с HTML и вставками между символами ~. Вставки в основном имена переменных ~var~, но есть и включения ~inc:bar.inc~.
  • Файлы вида foo.htm.idx — бинарные, с содержимым похожим на массив значений переменных из foo.htm.

Например:

$ cat reboot.htm
<body>
<center>
<h2><font color="blue">You have set DHCP to be ~DHCPEN~. </font><h2>
<h2><font color="blue">Restart Unit to take effect.</font><h2>
<center>
</body>
<meta http-equiv="Refresh" content="3;url=config.htm">
$ hexdump -C reboot.htm.idx
00000000  41 00 00 00 f1 00 00 00                           |A.......|
00000008

Вопросы: 1. На чём это написано и как работает? 2*. Почему не обрабатываются шаблоны?

★★

Последнее исправление: Evenik (всего исправлений: 7)

Вопросы: 1. На чём это написано и как работает?

Очевидно, на Си.

2*. Почему не обрабатываются шаблоны?

Потому что китайцы забыли/забили реализовать их обработку. Железка не сломалась, она такая с завода. У неё же есть другие интерфейсы кроме веба?

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

Очевидно, на Си.

Я не про движок, а про шаблоны. Оно уникальное или общеизвестное? Что в .idx?

Потому что забыли реализовать их обработку. Железка не сломалась, она такая с завода.

Нет, раньше всё было хорошо. Есть несколько похожих, но не одинаковых моделей устройств.

У неё же есть другие интерфейсы кроме веба?

Есть GUI-клиент через RS-485 и SNMP. Они скорее исправны, но тоже со странностями.

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

Оно уникальное или общеизвестное?

Думаю накодили за пару часов к выпуску какой-то железки в продажу, а потом копипастят с одной на другую.

Нет, раньше всё было хорошо. Есть несколько похожих, но не одинаковых моделей устройств.

Ну ладно, значит сломалась. Но без дампа прошивки вряд ли получится узнать в чём дело.

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

Но без дампа прошивки вряд ли получится узнать в чём дело.

Вот с этим трудности. Там 100-ножка, выпаять её можно, но прочитать не на чем. Да и впаять обратно без опыта вряд ли получится.

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

Должна же быть поддержка внутрисхемного программирования. Но, скорее всего, возможность чтения будет заблокирована.

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

Должна же быть поддержка внутрисхемного программирования

Совсем новичок в этом. А чем оно обычно реализовано? Специальные выводы на плате или UART?

С другой стороны, а как разобрать 128К блоб? Железка у нас в одном экземпляре, сравнить не с чем.

Верно понимаю, что вероятная причина неисправности в повреждении части прошивки?

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

Специальные выводы на плате или UART?

Ну конкретно у этого есть PGC и PGD пины. Вот только они используются не только для программирования. Т.е. нужен программатор, но даже при его наличии шансов очень мало, если нет полного работоспособного дампа того, что в нем должно быть и можно было бы залить.

Верно понимаю, что вероятная причина неисправности в повреждении части прошивки?

Может и такое быть.

Из альтернатив, можно попробовать поискать: возможно, кто-то на данные девайсы пилил альтернативную прошивку.

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

Из альтернатив, можно попробовать поискать: возможно, кто-то на данные девайсы пилил альтернативную прошивку.

Увы, очень нишевый продукт. Там серийный номер несколько сотен. В России их найдётся 1-2 штуки.

Evenik ★★
() автор топика

Не знаю, совпадение или нет, но 0x00000041 = 65. Это похоже на позицию начала вставки ~DHCPEN~. Можете проверить на этом и других файлах. Скорее всего это сделано для оптимизации, чтобы не искать каждый раз их по документу.

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

Не знаю, совпадение или нет, но 0x00000041 = 65. Это похоже на позицию начала вставки ~DHCPEN~. Можете проверить на этом и других файлах. Скорее всего это сделано для оптимизации, чтобы не искать каждый раз их по документу.

Эврика! Вы правы, подтверждается:

$ cat password.htm
<html>
<title>
Change Password
</title>
<head>
</head>

<body>
<div style="margin-left: 50px;">
<table>
<tr><font color="blue"><b>Password should only contain numbers '0' to '9', letters 'a' to 'z' or 'A' to 'Z'.</b></font></tr>
<tr><font color="blue"><b>Maximum password length is 8 bytes</b></font></tr>
<FORM METHOD=GET action=password.htm>
<tr>Enter Old Password: </tr>
<tr><input type="password" size=30 name="oldp"></tr>
<tr>Enter New Password: </tr>
<tr><input type="password" size=30 name="newp"></tr>
<tr>Confirm New Password: </tr>
<tr><input type="password" size=30 name="rep"></tr>
<tr><b><font color="~setpasscolor~">~setpass~</font></b></tr>
<tr><br></tr>
<tr><input type="submit" name="setpass" value="Set "></tr>
</FORM>
</table>
</div>
<br>
<div></div>

</body>
</html>
$ hexdump -C password.htm
00000000  3c 68 74 6d 6c 3e 0d 0a  3c 74 69 74 6c 65 3e 0d  |<html>..<title>.|
00000010  0a 43 68 61 6e 67 65 20  50 61 73 73 77 6f 72 64  |.Change Password|
00000020  0d 0a 3c 2f 74 69 74 6c  65 3e 0d 0a 3c 68 65 61  |..</title>..<hea|
00000030  64 3e 0d 0a 3c 2f 68 65  61 64 3e 0d 0a 0d 0a 3c  |d>..</head>....<|
00000040  62 6f 64 79 3e 0d 0a 3c  64 69 76 20 73 74 79 6c  |body>..<div styl|
00000050  65 3d 22 6d 61 72 67 69  6e 2d 6c 65 66 74 3a 20  |e="margin-left: |
00000060  35 30 70 78 3b 22 3e 0d  0a 3c 74 61 62 6c 65 3e  |50px;">..<table>|
00000070  0d 0a 3c 74 72 3e 3c 66  6f 6e 74 20 63 6f 6c 6f  |..<tr><font colo|
00000080  72 3d 22 62 6c 75 65 22  3e 3c 62 3e 50 61 73 73  |r="blue"><b>Pass|
00000090  77 6f 72 64 20 73 68 6f  75 6c 64 20 6f 6e 6c 79  |word should only|
000000a0  20 63 6f 6e 74 61 69 6e  20 6e 75 6d 62 65 72 73  | contain numbers|
000000b0  20 27 30 27 20 74 6f 20  27 39 27 2c 20 6c 65 74  | '0' to '9', let|
000000c0  74 65 72 73 20 27 61 27  20 74 6f 20 27 7a 27 20  |ters 'a' to 'z' |
000000d0  6f 72 20 27 41 27 20 74  6f 20 27 5a 27 2e 3c 2f  |or 'A' to 'Z'.</|
000000e0  62 3e 3c 2f 66 6f 6e 74  3e 3c 2f 74 72 3e 0d 0a  |b></font></tr>..|
000000f0  3c 74 72 3e 3c 66 6f 6e  74 20 63 6f 6c 6f 72 3d  |<tr><font color=|
00000100  22 62 6c 75 65 22 3e 3c  62 3e 4d 61 78 69 6d 75  |"blue"><b>Maximu|
00000110  6d 20 70 61 73 73 77 6f  72 64 20 6c 65 6e 67 74  |m password lengt|
00000120  68 20 69 73 20 38 20 62  79 74 65 73 3c 2f 62 3e  |h is 8 bytes</b>|
00000130  3c 2f 66 6f 6e 74 3e 3c  2f 74 72 3e 0d 0a 3c 46  |</font></tr>..<F|
00000140  4f 52 4d 20 4d 45 54 48  4f 44 3d 47 45 54 20 61  |ORM METHOD=GET a|
00000150  63 74 69 6f 6e 3d 70 61  73 73 77 6f 72 64 2e 68  |ction=password.h|
00000160  74 6d 3e 0d 0a 3c 74 72  3e 45 6e 74 65 72 20 4f  |tm>..<tr>Enter O|
00000170  6c 64 20 50 61 73 73 77  6f 72 64 3a 20 3c 2f 74  |ld Password: </t|
00000180  72 3e 0d 0a 3c 74 72 3e  3c 69 6e 70 75 74 20 74  |r>..<tr><input t|
00000190  79 70 65 3d 22 70 61 73  73 77 6f 72 64 22 20 73  |ype="password" s|
000001a0  69 7a 65 3d 33 30 20 6e  61 6d 65 3d 22 6f 6c 64  |ize=30 name="old|
000001b0  70 22 3e 3c 2f 74 72 3e  0d 0a 3c 74 72 3e 45 6e  |p"></tr>..<tr>En|
000001c0  74 65 72 20 4e 65 77 20  50 61 73 73 77 6f 72 64  |ter New Password|
000001d0  3a 20 3c 2f 74 72 3e 0d  0a 3c 74 72 3e 3c 69 6e  |: </tr>..<tr><in|
000001e0  70 75 74 20 74 79 70 65  3d 22 70 61 73 73 77 6f  |put type="passwo|
000001f0  72 64 22 20 73 69 7a 65  3d 33 30 20 6e 61 6d 65  |rd" size=30 name|
00000200  3d 22 6e 65 77 70 22 3e  3c 2f 74 72 3e 0d 0a 3c  |="newp"></tr>..<|
00000210  74 72 3e 43 6f 6e 66 69  72 6d 20 4e 65 77 20 50  |tr>Confirm New P|
00000220  61 73 73 77 6f 72 64 3a  20 3c 2f 74 72 3e 0d 0a  |assword: </tr>..|
00000230  3c 74 72 3e 3c 69 6e 70  75 74 20 74 79 70 65 3d  |<tr><input type=|
00000240  22 70 61 73 73 77 6f 72  64 22 20 73 69 7a 65 3d  |"password" size=|
00000250  33 30 20 6e 61 6d 65 3d  22 72 65 70 22 3e 3c 2f  |30 name="rep"></|
00000260  74 72 3e 0d 0a 3c 74 72  3e 3c 62 3e 3c 66 6f 6e  |tr>..<tr><b><fon|
00000270  74 20 63 6f 6c 6f 72 3d  22 7e 73 65 74 70 61 73  |t color="~setpas|
00000280  73 63 6f 6c 6f 72 7e 22  3e 7e 73 65 74 70 61 73  |scolor~">~setpas|
00000290  73 7e 3c 2f 66 6f 6e 74  3e 3c 2f 62 3e 3c 2f 74  |s~</font></b></t|
000002a0  72 3e 0d 0a 3c 74 72 3e  3c 62 72 3e 3c 2f 74 72  |r>..<tr><br></tr|
000002b0  3e 0d 0a 3c 74 72 3e 3c  69 6e 70 75 74 20 74 79  |>..<tr><input ty|
000002c0  70 65 3d 22 73 75 62 6d  69 74 22 20 6e 61 6d 65  |pe="submit" name|
000002d0  3d 22 73 65 74 70 61 73  73 22 20 76 61 6c 75 65  |="setpass" value|
000002e0  3d 22 53 65 74 20 22 3e  3c 2f 74 72 3e 0d 0a 3c  |="Set "></tr>..<|
000002f0  2f 46 4f 52 4d 3e 0d 0a  3c 2f 74 61 62 6c 65 3e  |/FORM>..</table>|
00000300  0d 0a 3c 2f 64 69 76 3e  0d 0a 3c 62 72 3e 0d 0a  |..</div>..<br>..|
00000310  3c 64 69 76 3e 3c 2f 64  69 76 3e 0d 0a 0d 0a 3c  |<div></div>....<|
00000320  2f 62 6f 64 79 3e 0d 0a  3c 2f 68 74 6d 6c 3e 0d  |/body>..</html>.|
00000330  0a                                                |.|
00000331
$ hexdump -C password.htm.idx
00000000  79 02 00 00 eb 00 00 00  89 02 00 00 ec 00 00 00  |y...............|
00000010
Evenik ★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.