giovedì, 28 Marzo 2024

[CCNA] Creare subnet in meno di un minuto (The Enhaced Bob Maneuver)

Oggi vediamo l’utilizzo di un metodo avanzato di subnetting proposto da Scott Empson. A quanto pare l’ideatore di questo metodo era un certo Bob, da cui il nome, manager/istruttore presso SHL.

Il metodo consiste nell’utilizzo della seguente tabella:

Vediamo come usarla per creare 9 subnet su una rete di Classe C, per esempio sull’indirizzo 192.168.1.0/24 come nel precedente esercizio.

1. Anzitutto individuiamo il numero di subnet che vogliamo creare, per fare questo andiamo sull’ultima riga e cerchiamo il primo numero maggiore o uguale a quello desiderato. Quindi se vogliamo creare 9 subnet dobbiamo selezionare il 14.

2. A questo punto ci spostiamo verso l’alto nella riga Bit Place (Posizione dei bit) e troviamo il 4. La riga nera è detta “riga di ordine superiore”, se attraversate questa riga, dovrete invertire posizione. Quindi dal momento che ci spostavamo da destra a sinistra, adesso ci sposteremo da sinistra a destra.

3. Passiamo a questo punto alla riga Target Number (numero target) e partendo da sinistra contiamo verso destra un numero di colonne pari al numero di bit (4).

Raggiungiamo il numero 16.

4. Questo è il numero target per il quale dobbiamo contare, partendo da zero fino a raggiungere o superare 255. Bisogna fermarsi prima di 256. Quindi contando avremo:

0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256 (questo no, abbiamo superato 255!)

Questi sono gli ID di rete cercati.

5. Come nell’esercizio precedente, ricordiamoci la seguente regola:

ID Rete Primo Host Ultimo Host Broadcast
n1 n1+1 n2-2 n2-1
n2

Dove n1 è il primo ID di rete, n2 è il secondo e così via. Nel caso del punto 4 il valore di n1 sarebbe 0, di n2 sarebbe 16, di n3 sarebbe 32 e via discorrendo.

Quindi possiamo completare l’intera tabella nel modo seguente:

ID Rete Primo Host Ultimo Host Broadcast
0 (non valida) 1 14 15
16 17 30 31
32 33 46 47
48 49 62 63
64 65 78 79
80 81
     
224 225 238 239
240 (non valida per via del broadcast) 241 254 255

Faccio notare che ci sono 14 (ehi! ma è il numero di prima) subnet valide (16 – 2).

6. Come ultimo passaggio spostiamoci sopra il numero di target per trovare la subnet mask.

Siccome stiamo calcolando le subnet per una rete di Classe C la subnet mask sarà 255.255.255.240

Come al solito scegliamo, delle 14 subnet, le 10 che preferiamo e ne lasciamo 4 per scopi futuri.

Facile no? 🙂

[CCNA] Subnetting di una rete di classe C utilizzando i numeri binari

Immaginiamo di avere l’indirizzo 192.168.1.0/24 e di dover creare 10 nuove subnet.

Vediamo quali saranno gli schemi IP dei numeri di broadcast, di rete e del numero di host, nonché la subnet mask.

Questa parte teorica si rifà al calcolatore IP che potete trovare a questo link.

1. Calcolialiamo anzitutto il numero di subnet necessarie

Dal momento che le subnet vengono realizzate con i bit di coda dell’indirizzo IP non è possibile creare un qualsiasi numero di subnet, ma queste possono essere solamente potenze di 2.

In particolare le tre classi di indirizzi IP più comunemente utilizzate (A, B e C) hanno dei numeri predefiniti di bit dedicati alla rete (network) e i rimanenti ai host. Lo schema è il seguente:

Indirizzi di classe A N H H H
Indirizzi di classe B N N H H
Indirizzi di classe C N N N H

Dove N sono i bit di rete (network) e H i bit di host.

Questo significa che un indirizzo di classe C avrà i primi 3 ottetti di bit dedicati alla rete e l’ultimo ottetto ai host, da cui potremo ricavare le eventuali sottoreti.

Più in particolare l’espressione binaria dell’indirizzo soprastante potrà essere rappresentata così:

N N N H
192 168 1 0
11000000 10101000 00000001 00000000

Un’altra rappresentazione abbastanza comune è la seguente: NNNNNNNN . NNNNNNNNNNNNNNNN . HHHHHHHH

In questo caso mettiamo in evidenza quali sono i bit di host (H) liberi per la creazione di eventuali sottoreti.

Avendo 8 bit a disposizione il numero massimo di sottoreti che potremo creare sarà dato da 2^N-2

Questo perché gli indirizzi iniziale e finale, ovvero 192.168.1.0 e 192.168.0.255 saranno rispettivamente l’id di rete ed il broadcast e quindi non sono validi ai fini della creazione di una sottorete.

Un’eventuale sottorete che partisse da 192.168.1.0 avrebbe infatti lo stesso ID di rete della rete principale!

Appurato questo abbiamo detto che vogliamo creare 10 sottoreti, ma essendo le sottoreti delle potenze di 2 possiamo crearle solo rispettando il seguente schema:

2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1

Di predefinito la rete 192.168.1.0/24 dispone di 8 bit liberi per i host, quindi H = 8 e N = 0, per quello che concerne le sottoreti, quindi di predefinito abbiamo 2^0 sottoreti, ovvero una singola sottorete che poi è la rete principale.

Se prendessimo dagli H in prestito 3 bit N potremmo creare 8 sottoreti, che però non ci basterebbero, visto che ne vogliamo fare 10, quindi ne dobbiamo prendere 4. In questo modo avremo 14 sottoreti valide 2^4 - 2 = 16 - 2 = 14

Il prestito avviene per “espansione”, cioè estendiamo la notazione N. Quindi nel nostro schema precedente la situazione diventerebbe la seguente:

NNNNNNNN . NNNNNNNNNNNNNNNN . NNNNHHHH

2. Determiniamo la prima subnet valida

Tenendo a mente lo schema NNNNHHHH adesso dobbiamo anzitutto calcolare il primo numero di sottorete.

Se contassimo in numeri decimali il primo numero sarebbero 0, ovvero 0000 in binario. Ricordiamoci che però questo non è valido (perché con N = 0000 e H = 0000 avremmo l’ID di sottorete uguale a quello della rete). Quindi partiamo da 1 e dunque 0001.

Sostituiamo allo schema precedente ed otteniamo 0001HHHH 

Adesso vogliamo calcolare l’ID di rete, ogni ID di sottorete comincia con 0, ovvero con 0000 nel nostro caso. In poche parole comincia con tutti gli H a zero.

Quindi avremo una situazione simile a 00010000

Il broadcast lo avremo sempre con tutti gli H a 1, quindi nel nostro caso a 1111

Il numero di broadcast sarà dunque 00011111

Il primo host valido della sottorete sarà il valore dell’ID di rete + 1, quindi 0000 + 0001 = 0001, mentre l’ultimo host sarà il valore di broadcast – 1, ovvero 1111 – 0001 = 1110 

Schematizzando il tutto quello che avremo sarà quanto segue:

ID prima sottorete 00010000 16 192.168.1.16
Primo host valido 00010001 17 192.168.1.17
Ultimo host valido 00011110 30 192.168.1.30
Broadcast prima sottorete 00011111 31 192.168.1.31

TRUCCO: L’ID di rete è sempre pari, il primo host è sempre dispari, l’ultimo host è sempre pari, il broadcast è sempre dispari!

3. Determiniamo l’ultima subnet valida

Avendo a mente lo schema NNNNHHHH, sappiamo che abbiamo 4 N per determinare la sottorete. L’ultima sottorete sarebbe quindi con N = 1111, ma questa non sarebbe valida, perché il suo broadcast, con tutti gli H a 1, coinciderebbe con quello della rete principale. Quindi l’ultima rete sarà con N = 1110.

A questo punto non ci rimane che ripetere il passaggio precedente, con l’unica differenza che la parte in verde anziché essere su 0001 sarà su 1110. Prendendo la tabella di prima il risultato sarà il seguente:

ID prima sottorete 11100000 224 192.168.1.224
Primo host valido 11100001 225 192.168.1.225
Ultimo host valido 11101110 238 192.168.1.238
Broadcast prima sottorete 11101111 239 192.168.1.239

4. Determiniamo l’elenco di tutte le subnet possibili

A questo punto non ci rimane che ripetere la procedura in modo automatizzato. Se siete degli sfaticati totali come il sottoscritto potete utilizzare un foglio excel per aiutarvi.

Da qui è possibile scaricarlo: Subnetting Classe C

Se lo preferite costruire da voi è sufficiente seguire la seguente procedura:

A1: IP

B1: 192.168.1.

A3: Subnet

B3: Subnet binario

C3: ID Rete

D3: Primo host

E3: Ultimo host

F3: Broadcast

A4: 0

B4: =DECIMALE.BINARIO(A4;4)

C4: =$B$1&BINARIO.DECIMALE(B4&”0000″)

D4: =$B$1&BINARIO.DECIMALE(B4&”0001″)

E4: =$B$1&BINARIO.DECIMALE(B4&”1110″)

F4: =$B$1&BINARIO.DECIMALE(B4&”1111″)

A5: =A4+1

Infine trascinate A5 fino a A19 e la riga B4:F4 fino a B19:F19.

Il risultato dovrebbe venire così:

Subnet Subnet binario ID Rete Primo host Ultimo host Broadcast
0 (non valido) 0000 192.168.1.0 192.168.1.1 192.168.1.14 192.168.1.15
1 0001 192.168.1.16 192.168.1.17 192.168.1.30 192.168.1.31
2 0010 192.168.1.32 192.168.1.33 192.168.1.46 192.168.1.47
3 0011 192.168.1.48 192.168.1.49 192.168.1.62 192.168.1.63
4 0100 192.168.1.64 192.168.1.65 192.168.1.78 192.168.1.79
5 0101 192.168.1.80 192.168.1.81 192.168.1.94 192.168.1.95
6 0110 192.168.1.96 192.168.1.97 192.168.1.110 192.168.1.111
7 0111 192.168.1.112 192.168.1.113 192.168.1.126 192.168.1.127
8 1000 192.168.1.128 192.168.1.129 192.168.1.142 192.168.1.143
9 1001 192.168.1.144 192.168.1.145 192.168.1.158 192.168.1.159
10 1010 192.168.1.160 192.168.1.161 192.168.1.174 192.168.1.175
11 1011 192.168.1.176 192.168.1.177 192.168.1.190 192.168.1.191
12 1100 192.168.1.192 192.168.1.193 192.168.1.206 192.168.1.207
13 1101 192.168.1.208 192.168.1.209 192.168.1.222 192.168.1.223
14 1110 192.168.1.224 192.168.1.225 192.168.1.238 192.168.1.239
15 (non valido) 1111 192.168.1.240 192.168.1.241 192.168.1.254 192.168.1.255

TRUCCO: Fate caso che vanno di 16 in 16? Questo perché abbiamo fatto subnetting con 2^4 = 16

5. Determiniamo la subnet mask

A questo punto non ci rimane che determinare la subnet mask, la cosa più facile in assoluto in questo caso.

Ricordiamo che il nostro schema è: NNNNNNNN . NNNNNNNNNNNNNNNN . NNNNHHHH

Di predefinito la subnet mask per un indirizzo di Classe C è 255.255.255.0, ovvero 11111111.11111111.11111111.00000000

Nel nostro caso abbiamo preso in prestito 4 bit dai bit di host (H) e la subnet diventa: 11111111.11111111.11111111.11110000

Quindi 255.255.255.240 

Oppure /28, perché gli 1 sono 28 di 32. 

6. Conclusione

In principio noi volevamo creare 10 subnet diverse, a partire dalla rete 192.168.1.0/24

Abbiamo visto come possiamo creare 14 subnet, di cui ne sceglieremo 10 a piacere, 4 possono avanzarci per scopi futuri.

Il gruppo di subnet è rappresentabile da 192.168.1.0/28 e le subnet valide vanno dalla 192.168.1.16/28 alla 192.168.1.224/28.

In ognuna delle 14 subnet create (16 – 2) abbiamo  2^H-2 = 2^4 - 2 = 14 host validi.

[linux] Aggiungere file manualmente ad una condivisione su ownCloud (sotto Plesk)

Obiettivo: aggiungere un file manualmente nella partizione utente su ownCloud, senza utilizzare l’interfaccia di gestione

Questa è una soluzione molto interessante qualora si preferisca caricare il file, per svariati motivi, con altri meccanismi, diversi dall’interfaccia utente offerta dalla piattaforma ownCloud. Per esempio avevo bisogno di condividere un file zip di 600MB che però prima andava modificato. In tal caso, scaricarlo sul mio computer e caricarlo di nuovo online, con la connessione a 20 Mega, rischiava di risultare eccessivamente lento e macchinoso, quando potevo invece scaricarlo direttamente sul server e modificarlo da terminale.

Come fare allora per metterlo in condivisione?

L’operazione è semplice: anzitutto dobbiamo collocarci nella partizione dati di ownCloud e trovare la cartella, sotto files, dell’utente al quale vogliamo mettere a disposizione il file.

Una volta nella cartella digitiamo:

In questo modo visualizzeremo il dettaglio dei permessi sui file. Annotiamo utente e gruppo che accedono alla partizione.

Spostiamoci nella cartella di installazione di ownCloud, per esempio con:

Quello che ci interessa è la cartella, di ownCloud, contenente l’eseguibile occ.

A questo punto digitiamo il comando per ricostruire tutta la partizione dell’utente all’interno di ownCloud. Attenzione, questo comando reimposterà tutte le configurazioni delle cartelle su ownCloud gestite dall’utente.

Faccio notare che il nome_utente è l’utente proprietario dei file nella partizione linux, per esempio www-data se siamo sotto apache (lo vediamo con il comando precedente).

utente_owncloud è invece l’utente registrato in ownCloud, ovvero lo username dell’utente a cui appartiene la partizione.

In questo caso verrà utilizzato il PHP predefinito configurato all’interno di Linux, qualora voleste (o doveste) utilizzare un’altra versione, sarà sufficiente digitare il percorso per intero; ad esempio sotto Plesk i file binari del PHP7.0 si possono recuperare in questo modo:

Per maggiori informazioni e dettagli consiglio la pagina della documentazione ufficiale di ownCloud.

Civilization VI: Rise and Fall, creare mappa personalizzata

Abbiamo già visto nel precedente articolo come creare una mappa personalizzata in Civilization VI.

Chiunque ci abbia provato avrà notato che la mappa non funziona quando si utilizza l’espansione Rise and Fall

Perché una mappa personalizzata possa funzionare anche nel’espansione è necessario aggiungerla tra le mappe dedicate all’espansione stessa.

Per farlo spostiamoci su: %ProgramFiles%\Steam\steamapps\common\Sid Meier’s Civilization VI\DLC\Expansion1\Config

Ricordo che %ProgramFiles% è la cartella dove installiamo i programmi, se abbiamo spostato Steam su una cartella o partizione diversa dobbiamo sostituire %ProgramFiles% con tale percorso. Sul mio computer, per fare un esempio, il percorso assoluto è: D:\Programmi\Steam\steamapps\common\Sid Meier’s Civilization VI\DLC\Expansion1\Config

Questo perché ho spostato la cartella di Steam su una partizione diversa da quella di avvio C:

A questo punto andiamo a modificare il file Expansion1_StandardMaps.xml 

Nota: A differenza della versione standard, che legge tutti i file XML presenti nella cartella Config, l’espansione non sembrerebbe farlo, quindi dobbiamo modificare uno dei file esistenti e non possiamo aggiungerne uno nuovo nostro.

A questo punto modifichiamo il file nel modo che segue:

Faccio notare che, al file standard, ho aggiunto solamente la riga evidenziata.

Il percorso dove mettiamo il file Mappa Personalizzata.Civ6Map è solo relativamente importante, purché sia leggibile dall’eseguibile del gioco. Suggerisco di metterlo, come ho fatto io, in %ProgramFiles%\Steam\steamapps\common\Sid Meier’s Civilization VI\Base\Assets\Maps\Extra

Fatto tutto possiamo giocare alle nostre mappe anche con la nuova espansione!

Questo è molto realistico in effetti

Intervento su app e privacy a Risorse, su RTV38

Lo scorso martedì 22 maggio sono stato invitato a partecipare alla puntata di Risorse, su RTV38, dedicata ad app ed internet. Argomento trattato in modo leggero, con l’intervento di numerosi esperti. Per chiunque fosse curioso rimando all’episodio integrale su YouTube.

[xamarin] Errore IDE0006 durante compilazione

Problema: quando si tenta di compilare una app per iOS compare l’avviso con codice IDE0006 e la compilazione non va a buon fine

Soluzione: chiudere Visual Studio, aprire, pulire il progetto e ricompilare di nuovo, assicurandosi che sia connesso il Mac sul quale avviene la compilazione

Cercando di compilare una app per iOS da Visual Studio si potrebbe incorrere nel seguente avviso:

IDE0006 Si è verificato un errore durante il caricamento del progetto. Alcune funzionalità del progetto, come l’analisi della soluzione completa per il progetto in errore e i progetti che dipendono da essa, sono state disabilitate.

Per risolvere il problema dovrebbe essere sufficiente (almeno per me ha sempre funzionato) chiudere Visual Studio e riaprirlo, assicurandosi che prima di avviare il progetto sia connesso al Mac che si usa per compilare. 

Una volta riaperto spostarsi su Compilazione > Pulisci …

Una volta eseguita la pulizia ricompilare l’intero progetto da Compilazione > Ricompila… 

[javascript] Disegnare sistema solare con Three.js e WebGL

Three.js è una fantastica libreria javascript per il rendering interattivo in 2D e 3D su HTML5. Qualche giorno fa mi sono trovato a voler riprodurre dei fittizi sistemi stellari ed ho deciso di riportare di seguito un esempio semplificato per chiunque volesse provare da se. Il risultato che vogliamo ottenere è il seguente (zoom con rotellina del mouse, tasto sinistro per ruotare, tasto destro per spostare):


      

Già che c’ero ho inserito anche un paio di esempi per confronto con sistemi stellari realistici: in particolare il nostro sistema solare con i suoi otto pianeti principali in proporzione, una seconda versione con i pianeti ingranditi, ma proporzionati sempre al Sole ed infine il sistema Glise 581 sempre in proporzione corretta.

Inutile dire che si tratti di una semplificazione estrema (le orbite sono circolari, anziché essere ellittiche, e giacciono tutte sul medesimo piano), ma è sufficiente a darci un’idea della vastità dello spazio. 🙂

Detto questo mettiamoci all’opera.

Anzitutto procuriamoci Three.js e, già che ci siamo, jQuery (non è indispensabile, ma mi divertirò ad unirli insieme).

Adesso creiamo il contenuto della nostra pagina index.htm

Creiamo anche un file main.css per il foglio di stile ed uno main.js per il codice javascript. 

Colleghiamo le librerie jQuery, three.min.jsOrbitControls.jsthree.interaction.js.

Infine inseriamo un div che farà da contenitore per il nostro rendering. 

Potremmo usare anche un canvas, ma Three.js ci permette di aggiungere un rendering anche al comune DOM in HTML.

Fatto tutto questo sistemiamo velocemente il CSS inserendo il seguente codice:

Inutile dire che ci potremmo divertire a personalizzarlo nei modi più disparati, ma per il momento è quanto ci basta per creare un riquadro nero di 800px di lato.

Fatto tutto questo possiamo cominciare a lavorare sullo script. Definiamo anzitutto il minimo indispensabile:

In questo modo abbiamo definito la camera, la scena (è dove aggiungeremo tutti gli oggetti), il renderer che produrrà l’elemento DOM da aggiungere al suddetto div, i controlli che ci permetteranno di muovere la telecamera rispetto alla scena e il sistema di interazione (per sviluppi futuri).

Per far funzionare il tutto creiamo una funzione chiamata init(), il nome è comunque a piacere, che lanciamo all’inizio, ed una funzione animate() che richiamiamo subito dopo.

Grazie a requestAnimationFrame( animate ) animiamo tutto il sistema. Dopo approfondiremo.

Intanto cominciamo disegnando un singolo corpo nello spazio (banalmente una sfera).

Per poter gestire l’oggetto appena creato aggiungiamolo al vettore pianeti che dichiariamo come variabile globale.

Per aggiungere un grosso oggetto al centro ci sarà sufficiente quindi usare, dentro la funzione init() alla riga evidenziata:

Gli oggetto saranno aggiunti su un piano cartesiano tridimensionale, di coordinate x, y e z. La posizione (0,0,0) è quindi all’origine degli assi del piano cartesiano. La telecamera punta direttamente verso questo origine ad una distanza sull’asse z di 10.

Proviamo ad aggiungere una seconda sfera con:

A questo punto vogliamo aggiungere anche il cerchio dell’orbita, che appunto non è altro che una circonferenza (nel nostro caso semplificato eh!):

La nostra funzione accetta come argomento il raggio dell’orbita, che sarà disegnata centrata in (0,0,0).

La circonferenza è composta di 64 segmenti che collegano altrettanti vertici. Creiamo quindi la geometria nella qual inseriamo le coordinate dei vertici, il tutto sarà poi riempito con il materiale di tipo LineBasicMaterial.

Integriamo la funzione in quella per creare i singoli pianeti, utilizzando un argomento apposito per poter decidere se aggiungerla o meno.

Con Math.sqrt(x*x + y*y) calcoliamo il raggio per ciascuna orbita, ossia la distanza del corpo sul piano xy rispetto all’origine degli assi.

Adesso proviamo ad aggiungere i seguenti pianeti:

Dovremmo poter vedere un sistema statico, simile a quello dell’esempio.

Adesso cominciamo ad animarlo, preparando anzitutto la funzione che farà ruotare i pianeti. Per farlo ruotare utilizziamo delle coordinate polari, dove ci sarà sufficiente aumentare l’angolo theta.

La funzione ruota accetta un oggetto m e un valore per la “massa”, che ci permetterà di fare variazioni sulla velocità globale del sistema. Dal momento che la velocità dei pianeti varia con l’inverso della distanza, secondo la seguente formula:

v_{o}\approx {\sqrt {{\frac {GM}{r}}}}

Possiamo approssimare il moto angolare con una variazione di theta come segue:

Quindi applichiamo il movimento per ogni singolo corpo creando una specifica funzione:

In questo modo facciamo due cose. Con:

Facciamo ruotare i corpi attorno a se stessi (rotazione).

Con:

Li facciamo ruotare attorno alla stella (rivoluzione).

Aggiorniamo infine la funzione animate():

Infine aggiungiamo lo sfondo stellato generando dei punti casuali nello spazio tutto intorno con:

Ed impostiamo la telecamera di base:

In questo modo posizioniamo la telecamere con l’inquadratura leggermente inclinata e di lato rispetto al sistema.

L’intero script che utilizziamo è il seguente:

Se abbiamo fatto tutto bene otterremo il risultato di sopra.

[ubuntu] Scaricare WordPress e scompattarlo nella radice del sito web

Questi comandi si applicano ad un qualsiasi file *.tar.gz che si voglia scaricare e scompattare e poi spostare nella cartella desiderata.

Per scaricare WordPress utilizzerò il link alla versione internazionale

In questo modo scompattiamo il file *.tar.gz nella cartella WordPress e poi spostiamo nella radice tutto il contenuto.

Adesso rimuoviamo il file compresso e la cartella.

Infine ricordiamoci di assegnare i permessi giusti al nostro file, per esempio:

Se stiamo usando Plesk i permessi giusti avranno la forma simile a questa:

Dove al posto dell’UTENTE_SITO_WEB va messo l’utente del dominio.

[mysql] Svuotare un database o eliminare tutte le tabelle da terminale (remove o truncate)

Obiettivo: eliminare oppure svuotare tutte le tabelle di un database con un singolo commando da terminale

Questa soluzione è molto utile specialmente se si devono svuotare numerosi database. Abbiamo due possibilità:

1. Eliminare le tabelle (drop)

2. Svuotare le tabelle senza eliminarle (truncate)

In entrambi i casi al posto di USER va messo l’utente del database, al posto di PASSWORD la password dell’utente sul database e al posto di DATABASE il nome del database sul quale vogliamo lavorare.