Prezentacja statusu połączenia
Ostatnia zmiana: 2013-11-26 18:43
Proste HOWTO na temat pisania stron opartych na wbudowanym w busybox serwerze http. Wynikiem będzie prosta strona prezentująca status połączenia oraz adres ip interfejsu wan
Przeniesienie LuCI
Domyślnie interfejs graficzny słucha na porcie 80. Można przenieść go na inny port (np. na 8080) a ten domyślny wykorzystać do prezentowania statusu połączenia. Dzięki temu zostanie uruchomiony drugi proces serwera httpd. Jako katalog domowy wskazujemy np. /www1
# uci set httpd.@httpd[0].port=8080
# uci add httpd httpd
# uci set httpd.@httpd[-1].port=80
# uci set httpd.@httpd[-1].home=/www1
# uci commit httpd
# /etc/init.d/httpd restart
Aktualizacja - poniższe rozwiązanie działa także z
uhttpd; jego plik konfiguracyjny to
/etc/config/uhttpd.
Strona HTML
Niestety potrzeba jest znajomość HTML oraz pisania skryptów. Busybox może wykonywać skrypty zawarte w podkatalogu cgi-bin. Należy więc stworzyć plik HTML który nic nie będzie robił a wywoła taki plik.
Niech zawiera on następującą treść:
<html>
<head>
<meta http-equiv="refresh" content="0; URL=cgi-bin/status.sh" />
</head>
<body style="background-color: white">
</body>
</html>
Zostaje już tylko stworzenie pliku
status.sh. W najprostszej postaci - niech pinguje Google, jeżeli jest odpowiedź - niech wyświetli adres IP interfejsu WAN.
# mkdir -p /www1/cgi-bin
# touch /www1/cgi-bin/status.sh
# chmod 755 /www1/cgi-bin/status.sh
Plik powinien przetworzyć żądane informacje a wynik powinien być czystą stroną html która zostanie zinterpretowana przez przeglądarkę:
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "
<html>
<style type=\"text/css\">
.centered {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 50%;
height: 50%;
margin: auto;
text-align: center;
}
h1 {
color: red;
}
h2 {
color: green;
}
</style>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
</head>
<body><div class=centered>"
if ping -c1 -W2 www.google.pl > /dev/null; then
echo "<h2>Połączony</h2>"
/sbin/ifconfig $(uci get network.wan.ifname) | awk -F"[ :]+" '/inet/ { print $4 " / " $8}'
else
echo "<h1>Brak połączenia</h1>"
fi
echo "</div></body></html>"
Test
Wpisać w przeglądarce