W uhttpd skrypty cgi działają w katalogu cgi-bin co powoduje że mamy taki adres: http://ip_routera:port/cgi-bin/index.cgi
Czy da się je uruchamiać tak: http://ip_routera:port

Zmiana ustawienia "option cgi_prefix" w /etc/config/uhttpd nie działa
option home '/www'
option cgi_prefix '/'
lub
option cgi_prefix '/www'

A może jest jakiś inny sposób?

2

(1 odpowiedzi, napisanych Inne)

W ciągu ostatniego miesiąca już drugi raz odłączono mi Internet z powodu wirusa. Powód podany przez dostawcę Internetu był taki że mojego adresu IP odnotowali ~150 tys. połączeń na różne adresy. Jednak nie przesyłano dużej ilości danych. To co ja zauważyłem to tylko szybkie zapełnianie się pamięci, za pierwszym cała pamięć był zapełniona, za drugim razem doszło to połowy gdy mnie odłączyli. Trzeba by codziennie sprawdzać żeby się zorientować. Przypuszczalna przyczyna to słabe hasło (którego nie zmieniłem za pierwszym razem). SSH miałem cały czas na innym porcie niż standardowy. Ciekawe czy to wystarczy. Pytanie czy da się jakoś wykryć działanie takiego wirusa?

WireGuard z OpenWrt do Androida działa. W Androidzie uruchamiam hotspot z opcją "Zezwól podłączonym urządzeniom na korzystanie z VPN". Podłączam się do tego hotspota komputerem żeby sprawdzić czy działa VPN i działa. Tzn. z komputera (klienta hotspota) mogę się łączyć z urządzeniami w sieci OpenWrt. Ale mnie interesuje odwrotnie, z OpenWrt chcę się łączyć z klientami hotspota. Adresy urządzeń podłączonych do hotspota są przydzielane przez Androida 192.168.139.XXX Pomyślałem więc o przekierowaniu portów w Androidzie, wypróbowałem jedną z aplikacji typu "port forwarder", ale nie zadziałało.

Po dodaniu metryki działa. Config forwarding w firewallu jest konieczny (mimo że w zone jest wszędzie accept), bez tego mamy ping do kamery z routera, ale z komputera już nie. Po zrobieniu tunelu ssh uzyskałem zdalny podgląd z kamerki samochodowej. Super! Dzięki za pomoc.

Mam kamerę samochodową 70mai A800 która tylko wytwarza własną sieć WiFi, natomiast nie ma możliwości podłączenia jej jako klienta. Kamera generuje strumień rtsp dostępny pod adresem rtsp://192.168.0.1:554/livestream/12. Chcę uzyskać dostęp do tego strumienia bez przełączania się na WiFi kamery, będąc podłączonym kablem do routera. Źródłem internetu jest modem USB podłączony do routera. Radio ustawiłem w tryb "sta" i uzyskałem połączenie WiFi z kamerą.

iw dev wlan0 station dump | head -1
Station 44:01:bb:62:20:8d (on wlan0)

Konfigi zmodyfikowałem do takiej postaci:

cat /etc/config/wireless

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'wwan'
        option mode 'sta'
        option encryption 'psk2'
        option key '25289429'
        option ssid '70mai_A800_4K_208d'

cat /etc/config/network

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.11.1'

config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'

config interface 'wwan'
        option proto 'dhcp'

W pliku /etc/config/firewall dopisałem to:

config zone
        option name wwan
        list network 'wwan'
        option input ACCEPT
        option output ACCEPT
        option forward ACCEPT
        option masq 1
        option mtu_fix 1

Niestety taka konfiguracja nie działa, ifconfig na wlan0 pokazuje adres 192.168.0.20 i jest ping do kamery na 192.168.0.1, ale obrazu brak i internetu też brak.
Z kolei po usunięciu interfejsu wwan w /etc/config/network jest internet, ale brak adresu ip na wlan0.

Tak sprawdziłem, nie można się połączyć aż się nie wyda komendy /etc/init.d/network restart. Podobnie jest w obrazie MiFi. Zaraz po instalacji działa normalnie, jednak po ponownym uruchomieniu nie można się połączyć kablem (sieć niezidentyfikowana), ale można się połączyć przez WiFi, jednak nie wszystkimi urządzeniami, u mnie telefonem się nie połączę, ale kompem stacjonarnym tak. Po wykonaniu /etc/init.d/network restart od razu zaczyna działać kabel i telefon łączy się bez problemu (aż do ponownego uruchomienia). Ten problem nie występuje jeśli nie ustawimy wbudowanego modemu jako źródła internetu. Poza tym w obrazach nie działa USB (brak napięcia w porcie USB, pojawia się tylko na sekundę zaraz po podłączeniu zasilania).

Obrazy 18, 19 oraz mifi nie działają u mnie w tym sensie, że nie można się połączyć z routerem (błąd konfiguracji IP) dlatego powróciłem do fabrycznego OpenWrt a w nim mam problem z instalacją wget

root@GL-MIFI:~# which wget
/bin/wget

root@GL-MIFI:~# opkg install -force-overwrite wget
Installing wget (1.19.5-6) to root...
Downloading http://downloads.openwrt.org/releases/1 … s_24kc.ipk
Multiple packages (librt and librt) providing same name marked HOLD or PREFER. Using latest.
Configuring wget.

root@GL-MIFI:~# opkg list-installed | grep wget
wget - 1.19.5-6

root@GL-MIFI:~# which wget
/usr/bin/wget

Niestety nie działa, wyskakuje cały ekran tego typu błędów:

root@GL-MIFI:~# wget
Error loading shared library libssl.so.1.0.0: No such file or directory (needed by /usr/bin/wget)
Error loading shared library libcrypto.so.1.0.0: No such file or directory (needed by /usr/bin/wget)
Error relocating /usr/bin/wget: X509_NAME_get_text_by_NID: symbol not found
itd...

root@GL-MIFI:~#  ls /bin | grep busybox
busybox

root@GL-MIFI:~# rm /usr/bin/wget

root@GL-MIFI:~# ln -s /bin/busybox /usr/bin/wget

root@GL-MIFI:~# which wget
/usr/bin/wget

root@GL-MIFI:~# wget
wget: applet not found

root@GL-MIFI:~# /usr/bin/wget
wget: applet not found

Za to /bin/wget działa, ale wersja podstawowa

8

(16 odpowiedzi, napisanych Termometr)

Na pewno rmmod i2c-gpio-custom.ko. Zainstalowałem nawet Chaos Calmer żeby sprawdzić i jest tak samo jak w 18.06. Po wyładowaniu I2C działa nadal i nie da się załadować 1-wire.

root@OpenWrt:~# cat /sys/kernel/debug/gpio
GPIOs 0-29, ath79:
gpio-0   (tp-link:green:wlan  ) out lo
gpio-8   (USB power           ) out hi
gpio-11  (wps                 ) in  lo
gpio-17  (tp-link:green:lan   ) out hi
gpio-18  (sw1                 ) in  hi
gpio-20  (sw2                 ) in  hi
gpio-26  (tp-link:green:wps   ) out lo
gpio-27  (tp-link:green:3g    ) out lo
root@OpenWrt:~# insmod i2c-gpio-custom.ko bus0=0,7,29
root@OpenWrt:~# cat /sys/kernel/debug/gpio
GPIOs 0-29, ath79:
gpio-0   (tp-link:green:wlan  ) out hi
gpio-7   (sda                 ) in  hi
gpio-8   (USB power           ) out hi
gpio-11  (wps                 ) in  lo
gpio-17  (tp-link:green:lan   ) out hi
gpio-18  (sw1                 ) in  hi
gpio-20  (sw2                 ) in  hi
gpio-26  (tp-link:green:wps   ) out lo
gpio-27  (tp-link:green:3g    ) out lo
gpio-29  (scl                 ) in  hi
root@OpenWrt:~# i2cset -y 0 0x23 0x20
root@OpenWrt:~# i2cget -y 0 0x23 0x00 w
0x1400
root@OpenWrt:~# rmmod i2c-gpio-custom.ko
root@OpenWrt:~# rmmod i2c-gpio-custom.ko
module is not loaded
root@OpenWrt:~# cat /sys/kernel/debug/gpio
GPIOs 0-29, ath79:
gpio-0   (tp-link:green:wlan  ) out lo
gpio-7   (sda                 ) in  hi
gpio-8   (USB power           ) out hi
gpio-11  (wps                 ) in  lo
gpio-17  (tp-link:green:lan   ) out hi
gpio-18  (sw1                 ) in  hi
gpio-20  (sw2                 ) in  hi
gpio-26  (tp-link:green:wps   ) out lo
gpio-27  (tp-link:green:3g    ) out lo
gpio-29  (scl                 ) in  hi
root@OpenWrt:~# i2cset -y 0 0x23 0x20
root@OpenWrt:~# i2cget -y 0 0x23 0x00 w
0x1400
root@OpenWrt:~# dmesg | grep gpio
[  111.290000] i2c-gpio i2c-gpio.0: using pins 7 (SDA) and 29 (SCL)
root@OpenWrt:~# insmod w1-gpio-custom bus0=0,7,0
root@OpenWrt:~# dmesg | grep gpio
[  111.290000] i2c-gpio i2c-gpio.0: using pins 7 (SDA) and 29 (SCL)
[  222.330000] w1-gpio w1-gpio.0: gpio_request (pin) failed
[  222.330000] w1-gpio: probe of w1-gpio.0 failed with error -16

9

(16 odpowiedzi, napisanych Termometr)

Polecenie rmmod niestety nie zwalnia GPIO

root@OpenWrt:~# rmmod i2c-gpio-custom.ko
root@OpenWrt:~# rmmod i2c-gpio-custom.ko
module is not loaded
root@OpenWrt:~# dmesg | grep gpio
[  103.023489] i2c-gpio i2c-gpio.0: using pins 7 (SDA) and 29 (SCL)

I2C nadal działa i można robić odczyty. Tak samo jeśli najpierw załaduję 1-wire, polecenie rmmod w1-gpio-custom nie zwalnia GPIO.

10

(16 odpowiedzi, napisanych Termometr)

I2C opanowane:) Przydało by się dodatkowo 1 wire, ale MR3020 ma tylko 2 wolne GPIO. Da się w tym sprzęcie prostym sposobem zwolnić GPIO np. od diody?

11

(16 odpowiedzi, napisanych Termometr)

Znalazłem skrypt w pythonie i uruchomiłem czujnik:)
Skoro już wiemy jak odczytać w pythonie to można z tego wydobyć jakieś "normalne" polecenie? Chodzi mi żeby nie instalować pythona, żeby nie robić extroota. Oto ten skrypt:

#!/usr/bin/python

import smbus
import time

# Define some constants from the datasheet

DEVICE     = 0x23 # Default device I2C address

POWER_DOWN = 0x00 # No active state
POWER_ON   = 0x01 # Power on
RESET      = 0x07 # Reset data register value

# Start measurement at 4lx resolution. Time typically 16ms.
CONTINUOUS_LOW_RES_MODE = 0x13
# Start measurement at 1lx resolution. Time typically 120ms
CONTINUOUS_HIGH_RES_MODE_1 = 0x10
# Start measurement at 0.5lx resolution. Time typically 120ms
CONTINUOUS_HIGH_RES_MODE_2 = 0x11
# Start measurement at 1lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_HIGH_RES_MODE_1 = 0x20
# Start measurement at 0.5lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_HIGH_RES_MODE_2 = 0x21
# Start measurement at 1lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_LOW_RES_MODE = 0x23

bus = smbus.SMBus(0)

def convertToNumber(data):
  # Simple function to convert 2 bytes of data
  # into a decimal number. Optional parameter 'decimals'
  # will round to specified number of decimal places.
  result=(data[1] + (256 * data[0])) / 1.2
  return (result)

def readLight(addr=DEVICE):
  # Read data from I2C interface
  data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_1)
  return convertToNumber(data)

def main():

  while True:
    lightLevel=readLight()
    print("Light Level : " + format(lightLevel,'.2f') + " lx")
    time.sleep(0.5)

if __name__=="__main__":
   main()

12

(16 odpowiedzi, napisanych Termometr)

Nie chodzi mi o czujnik włącz/wyłącz tylko pokazujący jakieś wartości zależne od natężenia oświetlenia. Na początek podłączyłem BH1750 ale nie za bardzo chce coś pokazać

root@OpenWrt:~# i2cdetect i2c-gpio0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

root@OpenWrt:~# i2cget -y 0 0x23
0x00

Może jest coś innego sprawdzonego? A może prościej zastosować czujnik 1 wire?

13

(2 odpowiedzi, napisanych Oprogramowanie / Software)

Jest w pomocy nc --help -e, --exec=PROGRAM program to exec after connect
ale nie ważne, chodziło o wykonanie skryptu po odebraniu danych i okazuje się że że można tak:
nc -lvp 1234 -e x || /usr/bin/mojskrypt.sh (x to dowolny znak)
Szkoda tylko że nie da się zapisać ip z którego odebrano dane, coś takiego: nasłuch->zapis ip->wykonanie skryptu.

Chcę uruchomić skrypt jeśli na porcie 1234 pojawią się jakieś dane
nc -lvp 1234 -e /usr/bin/mojskrypt.sh
Niestety nie działa...

15

(8 odpowiedzi, napisanych Oprogramowanie / Software)

Dokładnie o to chodziło, dzięki:)

16

(8 odpowiedzi, napisanych Oprogramowanie / Software)

Zainstalowałem gpsd-clients i w cgps i gpsmon dane wyświetlają się bez problemu, niestety cat /dev/ttyUSB0 nic nie pokazuje. Potrzebuję odczyt aktualnej prędkości przez skrypt. Sposób był prosty: cat /dev/ttyUSB0 | head -25 | grep GPVTG | head -1 | cut -c 27-29 ale teraz już nie zadziała. Jest jakiś sposób żeby wyciągnąć pojedynczą linię z cgps lub gpsmon?

Zaktualizowałem z AA do OpenWrt 18.06-SNAPSHOT i teraz polecenie cat /dev/ttyUSB0 nie wypisuje żadnych danych.

root@OpenWrt:~# cat /sys/kernel/debug/usb/devices
T:  Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  3 Spd=12   MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=10c4 ProdID=ea60 Rev= 1.00
S:  Manufacturer=Silicon Labs
S:  Product=CP2104 USB to UART Bridge Controller
S:  SerialNumber=006FC84D
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=cp210x
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms

root@OpenWrt:~# dmesg | grep cp210x
[   11.285599] usbcore: registered new interface driver cp210x
[   11.291415] usbserial: USB Serial support registered for cp210x
[   11.297535] cp210x 1-1.2:1.0: cp210x converter detected
[   11.323709] usb 1-1.2: cp210x converter now attached to ttyUSB0

I tutaj w obrazie AA była dodatkowo taka linia, teraz tego nie ma:
[   32.230000] cp210x: v0.9:Silicon Labs CP210x RS232 serial adaptor driver

18

(51 odpowiedzi, napisanych Oprogramowanie / Software)

Trzeba więc wyświetlić stronę powitalną tym samym sposobem co stronę o przekroczeniu limitu. Dodałem więc do firewal.user przekierowanie na stronę powitalną 8080:
iptables -t nat -C prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 8080 || iptables -t nat -A prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 8080
a w skrypcie allow.cgi (tym który uruchamiamy na stronie powitalnej) usunięcie tego:
iptables -t nat -D prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 8080 > /dev/null 2>&1
Niby działa, ale tylko dla stron http, nie działa dla stron https, nawet jak się wpisze --dport 443 O co chodzi?

19

(51 odpowiedzi, napisanych Oprogramowanie / Software)

Skoro jest informacja o przekroczeniu limitu to przydała by się też informacja że taki limit istnieje. Uruchomiłem więc stronę powitalną zgodnie z poradnikiem. Osobno działa i jedno i drugie, ale razem już nie. Przy takim firewall.user jak poniżej pojawia się strona powitalna, działa limit, ale nie pojawia się strona o przekroczeniu limitu.

root@MiFi:~# cat /etc/firewall.user
iptables -t nat -F prerouting_blokada 2>/dev/null || ( \
iptables -t nat -N prerouting_blokada; \
iptables -t nat -I PREROUTING -i br-lan -j prerouting_blokada; \
)
IP=$(uci get network.lan.ipaddr)
iptables -t nat -A prerouting_blokada ! -d $IP/32 -p tcp -j DNAT --to $IP:8080

QUOTA=$((50 * 1024 * 1024))
iptables -N mac010203040506_limit50mb
iptables -A mac010203040506_limit50mb -m quota --quota $QUOTA -j ACCEPT
iptables -A mac010203040506_limit50mb -j REJECT
iptables -A forwarding_rule -j mac010203040506_limit50mb -s 192.168.11.163
iptables -A forwarding_rule -j mac010203040506_limit50mb -d 192.168.11.163

20

(18 odpowiedzi, napisanych Sprzęt / Hardware)

Niestety modem nie przełącza się jeśli extroot jest na karcie w modemie. Temat był już przerabiany tutaj http://eko.one.pl/forum/viewtopic.php?id=12796&p=2 i wyszło na to że nie da sie nic zrobić.

Ale jeśli uruchomię bez extroota wtedy przełącza się i trzyma aż do odłączenia zasilania (również po reboocie). Aktywuję więc extroot, robię reboot i otrzymuję extroot + działający modem aż do odłączenia zasilania. Dodałem więc do /etc/rc.local linię aktywującą extroota + reboot i działa. Teraz trzeba zdezaktywować extroota we flashu żeby po odłączeniu zasilania router wystartował bez extroota. I tu jest problem. W extroocie podmontowałem /dev/mtdblock3 do /root/flash i w pliku /root/flash/upper/etc/config/fstab dezaktywowałem extroota. Plik się normalnie zapisuje, ale po reboocie wraca do oryginalnego stanu czyli z aktywnym extrootem. Dlaczego tak się dzieje i czy da się jakoś zapisać ten plik na stałe?

21

(18 odpowiedzi, napisanych Sprzęt / Hardware)

Mój E3372s-153 HiLink Firmware 22.300.09.99.99 WebUI 17.100.13.01.03-Mod1.0 w ogóle nie chce działać w OpenWrt, co z nim jest nie tak?

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=ff MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1f01 Rev= 1.02
S:  Manufacturer=HUAWEI_MOBILE
S:  Product=HUAWEI_MOBILE
S:  SerialNumber=0123456789ABCDEF
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=125us

root@OpenWrt:~# logread | grep cdc_ether
Sat Mar 28 07:51:09 2015 kern.info kernel: [   11.450000] usbcore: registered new interface driver cdc_ether

22

(1 odpowiedzi, napisanych Oprogramowanie / Software)

W pliku mam podane zakresy cyfr np.
1000-2000
3500-4000
4215-6217

Jak sprawdzić czy jakaś cyfra mieści się w jednym z zakresów?

23

(12 odpowiedzi, napisanych Oprogramowanie / Software)

Już wiem że to nie zadziała. Wróciłem do standardowej postaci skryptu i wpisałem takie polecenie do wykonania /usr/bin/abc.sh o takiej zawartości:

if [ ! -e /tmp/qwerty ]; then
touch /tmp/qwerty
logger wykonano
sleep 10
rm /tmp/qwerty
fi

Jeśli uruchomię ten skrypcik ręcznie kilka razy w ciągu 10s. to w logu będzie tylko jeden wpis, jeśli przyciskiem to co 10s. będzie się pojawiał nowy wpis.

24

(12 odpowiedzi, napisanych Oprogramowanie / Software)

Według mnie taki zapis będzie działał dla obu przycisków, ale i tak sprawdziłem i niestety bez zmian. Już nie mam pomysłu, chyba będę musiał włączać przekaźnik na 5 sekund który rozłączy kabelki od przycisku...

25

(12 odpowiedzi, napisanych Oprogramowanie / Software)

Nie uwierzysz ale bez zmian nadal polecenie wykonuje tyle razy ile przycisnąłem przycisk.