Aggiornamento
questo e' la risposta degli sviluppatori
First of all, almost all operating systems on both mobile and laptop/desktop now support the defacto standard Captive Portal Detection (CPD) function designed to facilitate a secure and consistent login to captive portals. This by default uses a cut down browser that is very restricted for security purposes.
What you are seeing on Android is the CPD browser blocking iframes.
On your laptop you will be using your normal browser.
---------------------------------------------------------------------------
Il mio scopo e' quello di far girare NoDogSplash captive portal su GL.iNet AR150 con firmware OpenWRT Stock in modo che la pagina di benvenuto (nel linguaggio di NoDog e' la splash page) mostri contenuti ripresi da un sito web esterno e che sia quindi dinamica
Per prima cosa devo precisare che il firmware stable dell'AR150 monta una versione di NoDogSplash abbastanza vecchiotta ovvero la 0.9_beta9.9.9-5 (ho provato a montare anche il firmware in testing ma le cose migliorano di poco perche' opkg installa la 1.0.2.1)
Per creare il portale captivo ho tolto il WPA all'AP e poi usata la seguente configurazione
In pratica ho aggiunto alle regole di firewalle la possibilita' per utenti non autenticati di poter
raggiungere il sito 150.217.xxx.xxx su porta 80
---------------------------------------------------------------------------------
config instance
# Set to 1 to enable nodogsplash
option enabled 1
# Use plain configuration file as well
#option config '/etc/nodogsplash/nodogsplash.conf'
option network 'lan'
option gatewayname 'OpenWrt Nodogsplash'
option maxclients '250'
option idletimeout '1200'
#option redirecturl 'http://c1p81.altervista.org/montecatini/'
#qoption authenticateimmediately 'yes'
# Your router may have several interfaces, and you
# probably want to keep them private from the network/gatewayinterface.
# If so, you should block the entire subnets on those interfaces, e.g.:
list authenticated_users 'block to 192.168.0.0/16'
list authenticated_users 'block to 10.0.0.0/8'
# Typical ports you will probably want to open up.
list authenticated_users 'allow tcp port 22'
list authenticated_users 'allow tcp port 53'
list authenticated_users 'allow udp port 53'
list authenticated_users 'allow tcp port 80'
list authenticated_users 'allow tcp port 443'
# For preauthenticated users to resolve IP addresses in their
# initial request not using the router itself as a DNS server,
list preauthenticated_users 'allow tcp port 53'
list preauthenticated_users 'allow udp port 53'
llst preauthenticated_users 'allow tpc port 80 to 150.217.xxx.xxx'
# Allow ports for SSH/Telnet/DNS/DHCP/HTTP/HTTPS
list users_to_router 'allow tcp port 22'
list users_to_router 'allow tcp port 23'
list users_to_router 'allow tcp port 53'
list users_to_router 'allow udp port 53'
list users_to_router 'allow udp port 67'
list users_to_router 'allow tcp port 80'
list users_to_router 'allow tcp port 443'
# See https://github.com/nodogsplash for a full list of available options.
----------------------------------------------------------------
in seguito ho modificato lo splash.html come
l'idea e' quella di avere un iframe nel quale visualizzare la pagina derivante
dal sito esterno all'interno della pagina statica splash.html
-----------------------------------------------------------------
<html>
<head>
<title>$gatewayname Entry</title>
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body bgcolor="#DDDDDD" text="#000000">
<table border="0" cellpadding="2" cellspacing="0" width="100%">
<tr>
<td align="center"><h2>Luca $gatewayname</h2></td>
</tr>
<tr>
<td align="center">
<iframe height="710" width="720" src="http://150.217.73.108"></iframe>
</td>
</tr>
<tr>
<td align="center" height="120">
<!--
A client is authenticated by requesting the page $authtarget.
So, href to it here, with an img or link text the user can click on.
Also, note that any images you reference must reside in the
subdirectory that is the value of $imagesdir (default: "images").
-->
<a href="$authtarget">
<!--<img src="$imagesdir/splash.jpg" width="71" height="49" border="0"
alt="Click to enter" title="Click to enter">-->
<img src="http://c1p81.altervista.org/montecatini/img/logo_strong.jpg">
<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png">
</a>
</td>
</tr>
</table>
<form method='GET' action='$authaction'>
<input type='hidden' name='tok' value='$tok'>
<input type='hidden' name='redir' value='$redir'>
<input type='submit' value='Click Here to Enter'>
</form>
</body>
</html>
---------------------------------------------------------------------
la cosa divertente e' che tutto funziona perfettamente se mi collego da portatile con Chrome
mentre la stessa pagina vista dal telefono (Android 9) viene visualizzata cosi'
Una soluzione potrebbe essere la modalita' Forwarding Authentication Service (FAS) (che in pratica reindirizza il login su un server esterno dovre peraltro potrebbe girare anche Php) ma non sembra funzionare (anche perche' tutti i tutorial sono per NoDogSplash 2....)
venerdì 19 ottobre 2018
martedì 16 ottobre 2018
GL-AR150 con Captive Portal in OpenWRT
Ho preso un GL-Inet Mini Router per vedere se riesco realizzare un captive portal per la mia rete casalinga. Si tratta di un oggetto decisamente economico (almeno per quello che fa..circa 30 euro) con due interfacce ethernet ed una wireless piu' OpenWRT (esistono due versioni: un firmware openwrt customizzato ed uno stock))
Per reinstallare il firmware si deve:
1) connettere il cavo Ethernet sulla LAN (non e' neccessario un cavo cross)
2) premere il tasto Reset
3) inserire il cavo di alimentazione
4) attendere che led rosso lampeggi "esattamente" 5 volte
5) impostare il portatile su 192.168.1.2
6) connettersi via browser al 192.168.1.1
7) si effettua l'upload del file firmware
Per reinstallare il firmware si deve:
1) connettere il cavo Ethernet sulla LAN (non e' neccessario un cavo cross)
2) premere il tasto Reset
3) inserire il cavo di alimentazione
4) attendere che led rosso lampeggi "esattamente" 5 volte
5) impostare il portatile su 192.168.1.2
6) connettersi via browser al 192.168.1.1
7) si effettua l'upload del file firmware
8) al riavvio ci si trovera' di fronte al nuovo SSID GL.iNET. La password di default e' goodlife
9) connessi all'AP ci si deve collegare al 192.168.1.1 nel caso di firmware stock o al 192.168.8.1 nel caso di OpenWRT modificato da GL.iNET
Il collegamento puo' essere fatto sia via interfaccia Web che tramite SSH. Preferisco la seconda
Di default la scheda wifi e' gia' in bridge con la WAN per cui non si sono da fare ulteriori impostazioni
Per installare il captive portal ho scelto NoDogSplash perche' a me non serve l'autenticazione ma solo uno splash screen
Per prima cosa ho tolto il wpa sull'access point in modo da risultare in AP libero
opkg update
opkg install nodogsplash
di default il portale captivo non si attiva. Si deve andare nel file di configurazione che si trova in /etc/config/nodogsplash e si deve settare ad 1
option enabled 1
si salva e poi
/etc/init.d/nodogsplah start
per verificare lo stato del portale captivo si usa
ndsctl status
qui si vedono i client loggati
per togliere l'autorizzazione ad un client (utile in fase di debug)
ndsctl deauth (inserire mac od ip del client)
la configurazione della pagina di splash e' in /etc/nodogsplah/htdocs/ e come e' abbastanza evidente e' una semplice pagina html
Ogni volta che un client si collega all'AP free viene indicato dal dispositivo che l'antenna e' un portale captivo e si ha la redirezione verso lo splash screen
In un primo tentativo di creare un portale captivo avevo seguito la strada di dirottare il traffico verso lo splash screen tramite DNS ma cio' ha creato un delirio di problemi con il traffico https per problemi legati ai certificati
lunedì 15 ottobre 2018
WOW FastWeb
WOW....ovvero l'esclamazione che fai quando lo disattivi
Da quando mi sono trasferito a Firenze ho notato che la connessione di dati FastWeb era nettamente peggiore di quella presente nel Comune di Fiesole
Ci ho girato intorno per piu' di mese, pensando anche che qualcuno potesse avere craccato la password (molto improbabile) ma alla fine sono riuscito a venirne a capo.
Mi sono accorto che la lista degli access point nella scheda di ricerca presentava il mio, una serie di AP dei vicini ed un WOW FI FastWeb caratterizzato da avere un segnale particolarmente intenso e paragonabile con il mio AP. ...ho scoperto che, senza essermi stato richiesto e senza nemmeno essere stato avvisato, il mio router aveva attivato un AP virtuale peraltro sullo canale WiFi oltre a quello principale
Una volta disabilitato questo servizio dalla MyFastWebPage
http://www.fastweb.it/myfastpage/abbonamento/wow-fi/
(la disattivazione non e' immediata ma e' arrivata nel giro di qualche ora con conferma via SMS) adesso la rete funzione in modo ottimale
Da quando mi sono trasferito a Firenze ho notato che la connessione di dati FastWeb era nettamente peggiore di quella presente nel Comune di Fiesole
Ci ho girato intorno per piu' di mese, pensando anche che qualcuno potesse avere craccato la password (molto improbabile) ma alla fine sono riuscito a venirne a capo.
Mi sono accorto che la lista degli access point nella scheda di ricerca presentava il mio, una serie di AP dei vicini ed un WOW FI FastWeb caratterizzato da avere un segnale particolarmente intenso e paragonabile con il mio AP. ...ho scoperto che, senza essermi stato richiesto e senza nemmeno essere stato avvisato, il mio router aveva attivato un AP virtuale peraltro sullo canale WiFi oltre a quello principale
Una volta disabilitato questo servizio dalla MyFastWebPage
http://www.fastweb.it/myfastpage/abbonamento/wow-fi/
(la disattivazione non e' immediata ma e' arrivata nel giro di qualche ora con conferma via SMS) adesso la rete funzione in modo ottimale
Abetone Outdoor
Una nuova applicazione...parente stretta di Abetone Trail Park. Ho scoperto che adesso si possono sottomettere al PlayStore solo app con minSDK >=26...il che vuole dire che mi sono giocato circa l'80% del pubblico
mercoledì 26 settembre 2018
DeAuth WiFi Clients con ESP8266
Questo e' un progettino semplice e veloce che pero' mi risolve un problema familiare.
Sono in costante battaglia con mio figlio che passa il tempo sul divano a guardare Youtube sul divano. Quando esagera (e se non bastano un paio di avvisi) gli stacco l'antenna WiFi bloccando pero' tutti gli altri client connessi
Ho scoperto che e' possibile forzare la disconnessione di un client mandando dei pacchetti di DeAutorizzazione DeAuth all'Access Point. Tale pratica peraltro sembra che sia legittima ed insita all'interno del protocollo WiFi e quindi non evitabile
In pratica si prende un comune NodeMCU con ESP 82666 e si installa il firmware esp8266_deauther
si scarica il file a questo indirizzo
https://github.com/spacehuhn/esp8266_deauther/releases/download/v2.0.5/ESP8266_Deauther_v2.0.5_DSTIKE_Deauther_v3_._DSTIKE_NodeMCU-07_v2.bin
per comodita' lo ho rinominato esp8266.bin, poi si installa il file .bin con il seguente comando
esptool.py -p /dev/ttyUSB3 write_flash -fm qio 0x0000 esp8266.bin
Sono in costante battaglia con mio figlio che passa il tempo sul divano a guardare Youtube sul divano. Quando esagera (e se non bastano un paio di avvisi) gli stacco l'antenna WiFi bloccando pero' tutti gli altri client connessi
Ho scoperto che e' possibile forzare la disconnessione di un client mandando dei pacchetti di DeAutorizzazione DeAuth all'Access Point. Tale pratica peraltro sembra che sia legittima ed insita all'interno del protocollo WiFi e quindi non evitabile
In pratica si prende un comune NodeMCU con ESP 82666 e si installa il firmware esp8266_deauther
si scarica il file a questo indirizzo
https://github.com/spacehuhn/esp8266_deauther/releases/download/v2.0.5/ESP8266_Deauther_v2.0.5_DSTIKE_Deauther_v3_._DSTIKE_NodeMCU-07_v2.bin
per comodita' lo ho rinominato esp8266.bin, poi si installa il file .bin con il seguente comando
esptool.py -p /dev/ttyUSB3 write_flash -fm qio 0x0000 esp8266.bin
ci si collega poi all'AP di nome pwned con password deauther (questi nomi possono essere modificati ricompilando il firmware da sorgenti) all'indirizzo 192.168.4.1
Si effettua la scansione degli AP visibili (Scan APS sulla prima pagina dopo il disclaimer) e si seleziona la stazione su cui si voglio deautorizzare i client (si vede il segno di spunta).
Attenzione: la risposta del 8266 e' molto molto lenta
si passa poi al tab Attack e si sceglie l'operazione da effettuare (Start/Stop)
martedì 25 settembre 2018
Captive Portal su Raspberry Pi Zero W
Un esempio di Captive Portal (ovvero un Access Point WiFi che obbliga gli utenti a visualizzare determinate pagine, sia per loggarsi per l'accesso ad internet sia per altri accedere ad un web server interno)
La Raspberry Pi Zero W, non avendo due schede di rete di default come la 3b+, non puo' essere usata per fornire accesso ad internet come router
Per prima cosa si deve installare sulla SD una Raspbian Lite . Dato l'uso in HeadLess mode e' necessario configurare la scheda via SSH, non abilitata di default tramite la porta USB OTG, non abilitata di default
Una volta formattata la scheda SD si monta la partizione boot e
1) si inserisce un file vuoto denominato ssh (senza estensione)
2) si modifica il file config.txt aggiungendo una ultima riga con scritto dtoverlay=dwc2
3) si modifica il file cmdline.txt aggiungendo modules-load=dwc2,g_ether subito dopo rootwait
Fatto cio' si inserisce la SD nella Raspberry e si collega un cavo microUSB nella porta posta piu' centralmente collegando l'altro cavo al PC (l'alimentazione e' data dallo stesso cavo e non e' necessario di collegare la seconda USB)
A questo punto da PC (Linux o Mac) si puo' entrare in shell mediante SSH con il comando
ssh pi@raspberrypi.local
password : raspberry
si passa quindi a configurare la connessione WiFi per l'aggiornamento dei pacchetti con
sudo raspi-config
opzione Netowork Options/Wifi dove si inseriscono i dati dell'Acces Point
si aggiorna il sistema e si installano i pacchetti
apt-get install hostapd dnsmasq apache2 php7.0
(questa configurazione e' stata ripresa da qui togliendo la parte malevola)
rc.local
-----------------------------------------------------------
La Raspberry Pi Zero W, non avendo due schede di rete di default come la 3b+, non puo' essere usata per fornire accesso ad internet come router
Per prima cosa si deve installare sulla SD una Raspbian Lite . Dato l'uso in HeadLess mode e' necessario configurare la scheda via SSH, non abilitata di default tramite la porta USB OTG, non abilitata di default
Una volta formattata la scheda SD si monta la partizione boot e
1) si inserisce un file vuoto denominato ssh (senza estensione)
2) si modifica il file config.txt aggiungendo una ultima riga con scritto dtoverlay=dwc2
3) si modifica il file cmdline.txt aggiungendo modules-load=dwc2,g_ether subito dopo rootwait
Fatto cio' si inserisce la SD nella Raspberry e si collega un cavo microUSB nella porta posta piu' centralmente collegando l'altro cavo al PC (l'alimentazione e' data dallo stesso cavo e non e' necessario di collegare la seconda USB)
A questo punto da PC (Linux o Mac) si puo' entrare in shell mediante SSH con il comando
ssh pi@raspberrypi.local
password : raspberry
si passa quindi a configurare la connessione WiFi per l'aggiornamento dei pacchetti con
sudo raspi-config
opzione Netowork Options/Wifi dove si inseriscono i dati dell'Acces Point
si aggiorna il sistema e si installano i pacchetti
apt-get install hostapd dnsmasq apache2 php7.0
(questa configurazione e' stata ripresa da qui togliendo la parte malevola)
rc.local
-----------------------------------------------------------
service apache2 start sleep 1 hostapd -B /etc/hostapd/hostapd.conf sleep 2 ifconfig br0 up ifconfig br0 10.1.1.1 netmask 255.255.255.0 sysctl net.ipv4.ip_forward=1 iptables --flush iptables -t nat --flush iptables -t nat -A PREROUTING -i br0 -p udp -m udp --dport 53 -j DNAT --to-destination 10.1.1.1:53 iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.1.1.1:80 iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.1.1.1:80 iptables -t nat -A POSTROUTING -j MASQUERADE service dnsmasq start exit 0 ----------------------------------------------------------- hostapd.conf -----------------------------------------------------------
dnsmasq.conf ------------------------------------------------------------
|
venerdì 21 settembre 2018
Leaflet JS e GeoJSon
Alcune volte mi capita di dover convertire delle tracce GPX per visualizzarle con LeafletJS.
In generale il primo lavoro e' quello di rimuovere il dato di quota tramite la app (opzione flatten)
https://wtracks.appspot.com/
per poi semplificare il percorso mediante
https://github.com/stefanocudini/gpx-simplify-optimizer
a questo punto rimane l.ultimo problema...ovvero che il formato GeoJSon usa il formato [lon,lat] mentre Leaflet usa [lat,lon]
per convertire i dati nel giusto formato e formattarli in un array javascript per poterli incollare nell'oggetto ployline di Leaflet ho scritto questo semplice codice che usa la libreria Python GeoJson (pip install geojson)
-------------------------------------------------------------------------------------------
import geojson
with open('svizzera_flat_1069nodes.geojson') as f:
data = geojson.load(f)
for feature in data['features']:
#print feature['geometry']['type']
#print feature['geometry']['coordinates']+'\n'
coo = feature['geometry']['coordinates']
for p in coo: print "["+str(p[1]) + "," + str(p[0])+"],"
In generale il primo lavoro e' quello di rimuovere il dato di quota tramite la app (opzione flatten)
https://wtracks.appspot.com/
per poi semplificare il percorso mediante
https://github.com/stefanocudini/gpx-simplify-optimizer
a questo punto rimane l.ultimo problema...ovvero che il formato GeoJSon usa il formato [lon,lat] mentre Leaflet usa [lat,lon]
per convertire i dati nel giusto formato e formattarli in un array javascript per poterli incollare nell'oggetto ployline di Leaflet ho scritto questo semplice codice che usa la libreria Python GeoJson (pip install geojson)
-------------------------------------------------------------------------------------------
import geojson
with open('svizzera_flat_1069nodes.geojson') as f:
data = geojson.load(f)
for feature in data['features']:
#print feature['geometry']['type']
#print feature['geometry']['coordinates']+'\n'
coo = feature['geometry']['coordinates']
for p in coo: print "["+str(p[1]) + "," + str(p[0])+"],"
Iscriviti a:
Post (Atom)
FigSpec FS-60CL
A lavoro mi hanno rifilato questo sensore iperspettrale cinese (pushbroom 400-1000 nm con larghezza di banda di 0.5 nm compatibile con DJI M...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...












