domenica 13 gennaio 2019

CentOS 7 - Come abilitare il completamento automatico

Il terminale di CentOS 7 al momento dell'installazione mette a disposizione solo per alcuni comandi il completamento automatico (scrivere le prime lettere di un comando e premere il tasto "tab" per completare il comando automaticamente). Tuttavia quelli effettivamente funzionanti sono davvero pochi. 
Per abilitare il completamento automatico su praticamente tutti i comandi di tutte le applicazioni installate sulla vostra CentOS 7 è necessario installare due pacchetti aggiuntivi: 

  • bash-completion
  • bash-completion-extras
Per l'installazione sarà sufficiente dare il seguente comando: 

sudo yum install bash-completion bash-completion-extras

Al termine dell'installazione sarà sufficiente riavviare il terminale, oppure se siete connessi in ssh chiudere e riaprire la connessione ssh per verificare il funzionamento del completamento automatico. 

mercoledì 26 settembre 2018

ActiveMQ: Come creare un broker MQTT con Username e Password su Windows

Con questo articolo vi illustrerò quali sono i passi necessari per installare un broker MQTT.
Innanzitutto facciamo alcuni cenni sull'MQTT: Message Queue Telemetry Transport è un protocollo ampiamente utilizzato nell'ambito delle comunicazioni e ormai anche nel campo della domotica e dell'IoT per lo scambio di messaggi tra dispositivi.
In particolare l'MQTT si basa sul paradigma Publish/Subscribe dove abbiamo dei dispositivi che pubblicano su un Topic e dei sottoscrittori che sottoscrivono dei Topic. Molto spesso mi capita di paragonare questo paradigma alle chat di Whatsapp dove un topic potrebbe essere un gruppo, ed io posso decidere di pubblicare qualcosa su questo gruppo (publisher) oppure semplicemente di leggere quello che scrivono gli altri (Subscriber).
Per mettere in piedi questo protocollo abbiamo bisogno di un broker che si occuperà di gestire topic, pubblicazioni e sottoscrizioni. Il broker di cui vi parlerò è uno dei più utilizzati in ambito professionale, ovvero ActiveMQ.
ActiveMQ oltre che un semplice broker MQTT è in grado di gestire molti altri protocolli di messaggistica (AMQP, OpenWire), ma in questa guida punteremo alla realizzazione di un broker MQTT. La presente guida è rivolta a sistemi operativi Windows e un requisito necessario è la presenza di Java precedentemente installato.
Possiamo scaricare l'ultima versione di ActiveMQ dal seguente link
Una volta scaricato scompattiamo l'archivio, all'interno della cartella bin troviamo due cartelle Win64 e Win32 ed in funzione del tipo di Windows che stiamo utilizzando (32bit, 64bit) apriamo la cartella  corrispondente e cliccando su activemq.bat partirà il nostro server ActiveMQ.
Cliccando su InstallService.bat così come dice la parola verrà installato un servizio che lancerà il nostro server senza avere nessuna finestra di console aperta e inoltre possiamo impostare che il servizio parta all'avvio del pc.
L'mqtt di default utilizza due porte, la 1883 e la 8883 (quest'ultima viene utilizzata per le connessioni sicure abbinate all'utilizzo di certificati), a tal proposito per la connessione al broker da un altro dispositivo bisognerà aprire la porta sul firewall del nostro pc.
Dallo stesso pc sul quale è stato avviato il server mqtt inoltre, aprendo il browser e puntando alla pagina http://localhost:8161/admin e utilizzando admin/admin come username/password sarà possibile accedere alla console web di ActiveMQ dalla quale potremo visionare i client connessi, i topic utilizzati e i connettori attualmente in funzione.

Al primo avvio i client potranno connettersi al broker senza autenticazione, tuttavia se vogliamo impostare username e password per l'accesso al broker MQTT i passi sono molto semplici. Dobbiamo mettere le mani nel file di configurazione che si trova all'interno della cartella conf e si chiama per l'appunto activemq.xml. Si tratta di un file xml e per impostare username e password utilizzeremo un plugin già presente tra quelli scaricati. Il plugin che andiamo ad utilizzare è il SimpleAuthenticationPlugin e per impostarlo e metterlo in funzione andiamo a scrivere nel file di configurazione precedentemente indicato, subito sopra il tag di chiusura broker le seguenti righe:
...
<plugins>
<simpleAuthenticationPlugin> 
<users> 
<authenticationUser username="user" password="password" groups="users"/> 
</users> 
</simpleAuthenticationPlugin>
</plugins>

</broker>
Da questo momento per potersi connetter al broker bisognerà utilizzare come username user e come password password ovvero i termini indicati nel codice appena sopra che possono essere modificati a nostro piacimento.
Con questo terminiamo questo tutorial e concludo indicandovi un buon client MQTT installabile sul vostro pc Windows per testare la connessione, il nome è MQTT Fx e lo trovate al seguente link. 

domenica 27 gennaio 2013

L'algoritmo di Crittografia asimmetrica R.S.A. in Java

Nell’ambito della sicurezza informatica e in particolare della sicurezza nelle comunicazioni, la crittografia ricopre un ruolo fondamentale per garantire la riservatezza. Questa utilizza algoritmi in grado di cifrare in maniera reversibile un messaggio o un documento rendendolo illeggibile da chiunque non sia in possesso della chiave in grado di decifrare lo stesso.
Attualmente possiamo suddividere la crittografia informatica in due categorie:
  • Crittografia Simmetrica
  • Crittografia Asimmetrica
Per Crittografia simmetrica si intende un metodo crittografico che utilizza la stessa chiave per cifrare e per decifrare un documento. Nella Crittografia Asimmetrica invece vengono utilizzate due chiavi:
  • Chiave Pubblica
  • Chiave Privata
E' possibile scegliere con quale delle due chiavi cifrare il documento, dopo di ché la decifratura sarà possibile solo attraverso l'utilizzo dell'altra chiave. Solitamente la chiave pubblica viene resa disponibile a chiunque, mentre quella che deve assolutamente rimanere segreta è la chiave privata. 
L'algoritmo R.S.A. ideato da Rivest Shamir Adleman, implementa la crittografia simmetrica attraverso l'utilizzo di numeri primi e di alcune operazioni tipiche dell'aritmetica modulare. 
Per il mio esame di Sicurezza Informatica ho deciso di implementare nel linguaggio di programmazione Java questo algoritmo. In Java esistono già delle librerie che realizzano questo algoritmo, tuttavia sarebbe stato troppo facile, e allora ho deciso di implementarlo. Per farlo tuttavia ho avuto bisogno di alcune librerie di Java che mi hanno dato una grossa mano con i numeri primi e con l'aritmetica modulare, sto parlando delle classi BigInteger. Il resto dell'applicazione si è basata sull'elaborazione di stringhe per poter permettere la cifratura di un certo numero di caratteri alla volta, ovvero ottenere una cifratura a blocchi
Per chi volesse provare l'applicazione, il file .jar è disponibile al seguente LINK.



giovedì 23 febbraio 2012

Ubuntu per Android

In questo blog vi ho già parlato sia di Ubuntu che di Android, ovvero il primo è una distribuzione Linux per pc e il secondo è un sistema operativo (basato sempre su kernel Linux) per smartphone.
Bene è notizia recente che questi due soggetti si siano messi insieme per fare in modo da avere Ubuntu su Android, ovvero per essere più precisi per avere la distribuzione Ubuntu sui nostri smartphone.
La vera utilità di questa fusione tra i due soggetti è la possibilità di poter collegare il nostro smartphone ad una dock che ci consentirà di utilizzare lo smartphone come un vero e proprio pc, con tanto di monitor, mouse e tastiera.
Una idea molto interessante che sicuramente qualche appassionato smanettone avrà già messo in pratica in passato, ma che ora diventa una realtà per tutti coloro che lo vogliono.
Per precisarmi meglio vorrei dire che diventerà una realtà per tutti coloro che lo desiderano e che hanno la possibilità, perché per creare questa magia, non basta qualsiasi smartphone con Android, ma c'è bisogno di un dispositivo che abbia quanto meno questi requisiti minimi:

  • Processore dual-core da 1Ghz
  • Uscita HDMI (o comunque una uscita video)
  • Almeno 2 GB di memoria disponibile
  • 512 Mb di RAM
  • Accelerazione video
Sono tutti requisiti che sono presenti nelle ultime generazioni di smartphone che comunque hanno un prezzo abbastanza sostanzioso; credo che per acquistare un oggetto del genere bisogna partire almeno dalle 350€.
Dopo questo ennesimo traguardo tecnologico, mi viene da pensare ancora ad una lotta tra gli smartphone, i notebook o i netbook e i tablet. Sono del parere che prima o poi qualcuno di questi scomparirà, e sinceramente sono del parere che la potenza dei notebook (o anche dei netbook di ultima generazione) e la portabilità degli smartphone siano molto dure da attaccare. Vedremo cosa accadrà in futuro, io comunque tifo per gli smartphone e i notebook (o netbook).

sabato 28 gennaio 2012

Tutorial Linguaggio C - Calcolo della Pasqua

In questo nuovo tutorial ho deciso di dedicarmi alla risoluzione di qualcosa che sia molto pratico e spesso nascosto. Mi sono dedicato al calcolo della Pasqua.
Come sappiamo la Pasqua ogni anno cade in un giorno diverso, e la data dipende in un certo senso dai cicli lunari; è inutile stare qui a spiegarvi ora l'influenza precisa dei cicli lunari sul calcolo della Pasqua e per chi volesse approfondire vi rimando alla pagina su Wikipedia dedicata a questo argomento.
In particolare in questa pagina di Wikipedia viene trattato un preciso algoritmo realizzato da Gauss che si basa sul calcolo di alcuni valori (a,b,c,d,e) e che da questi si riesce in qualche modo a ricavare la data della Pasqua.
Nel tutorial che vi mostro di seguito l'utente inserirà l'anno in cui vuole calcolare la data di Pasqua e l'applicazione farà il resto; nel tutorial tuttavia il calcolo della Pasqua è ristretto agli anni 1900 -2099 poiché il calcolo dipende anche da due valori (M e N) che variano in base alla fascia di anni che ci troviamo.
Subito dopo il video tuttavia ho postato il codice dell'applicazione migliorata, ovvero in grado di calcolare la data della Pasqua dal 1583 al 2299 il  ed è in grado anche di effettuare il calcolo più volte, ovvero una volta effettuato il calcolo, l'utente può decidere di continuare ad effettuare altri calcoli o terminare l'applicazione. In più nel codice migliorato è stato anche implementato un controllo iniziale che stabilisce se l'utente ha inserito un numero corretto.
Curiosità: il calendario da noi utilizzato è il calendario Gregoriano ha avuto origine dal calendario giuliano; quest'ultimo utilizzato sino al 1582 prevedeva uno scarto ogni anni di 11 minuti. Arrivati al 1582 lo scarto era diventato di 11 giorni e per questo motivo il Papa Gregorio XII decise di modificare il calendario per porre rimedio a questo errore. Il calendario gregoriano quindi entrò in vigore il 15 ottobre 1582; anche per questo motivo il metodo aritmetico di Gaus funziona fino al 1583.
Non vi resta di augurarvi una buona visione e di provare a testare il codice con i vostri pc.


Di seguito eccovi il codice dell'applicazione migliorata:

#include<stdio.h>
int main()
{
    int y,a,b,c,d,e,p,M,N;
    char s;
    printf("Calcolo della data in cui cade il giorno di Pasqua\n\n");
    printf("Il calcolo puo' essere effettuato su un anno a scelta tra gli anni 1583 e 2299\n\n");
    s='s';
    do{
    printf("Inserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
    scanf("%d",&y);
    while (y<1583 || y>2299){
        printf("\nHai inserito un valore errato\n");
        printf("\nInserisci l'anno in cui vuoi calcolare il giorno di Pasqua nel formato YYYY: \n");
        scanf("%d",&y);
    }
    if (y>=1583 && y<=1699)
    {
        M=22;
        N=2;
    }
    else if (y>=1700 && y<=1799)
    {
        M=23;
        N=3;
    }
    else if (y>=1800 && y<= 1899)
    {
        M=23;
        N=4;
    }
    else if(y>=1900 && y<=2099)
    {
        M=24;
        N=5;
    }
    else if (y>=2100 && y<=2199)
    {
        M=24;
        N=6;
    }
    else if (y>= 2200 && y<=2299)
    {
        M=25;
        N=0;
    }
    a=y%19;
    b=y%4;
    c=y%7;
    d=(19*a + M)%30;
    e=(2*b + 4*c + 6* d + N)%7;
    if ((d+e)<10)
    {
        p = d+e+22;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d marzo.\n",y,p);
    }
    else
    {
        p=d+e-9;
        printf("\nNell'anno %d la Pasqua cadra' nel giorno %d aprile.\n\n",y,p);
    }
    scanf("%c",&s);
    printf("Per continuare premi un tasto qualsiasi, per fermare l'applicazione premi 'n' \n");
    //fflush(stdin);
    scanf("%c",&s);
    }while (s!='n');
}