Affichage des articles dont le libellé est ubuntu. Afficher tous les articles
Affichage des articles dont le libellé est ubuntu. Afficher tous les articles

Vim

Posted by IT NISRO 0 commentaires

 Vim (acronyme pour Vi Improved) est un éditeur de texte créé par Bram Mooleannaar et datant de 1991. Basé sur l'éditeur de texte des système Unix vi, Vim peu être aussi bien utilisé en ligne de commande qu'avec une interface graphique.


Vim est un outil gratuit et open source qui au fil des années est devenu l'un des standards de l'édition de texte dans le monde informatique.

Son mode de fonctionnement est repris dans diverses applications et je pense qu'il est nécessaire pour de futurs ingénieurs de connaitre le minimum vital pour pouvoir utiliser Vim

Apprendre Vim

Vim est un logiciel très difficile à appréhender car il nécessite un temps d'apprentissage relativement long. En effet, son fonctionnement diffère des éditeurs de texte classique et son utilisation peu être déroutante au premier abord.

On peu assimiler l'apprentissage de Vim comme l'apprentissage de la conduite. Il faut apprendre par étape (d'abord le volant puis les pédales etc ...) et pratiquer régulierement.

Il ne faut surtout pas chercher à mémoriser l'ensemble des commandes par coeur. Même le créateur de Vim affirme ne pas connaitre la totalité des commandes. Les commandes Vim ont un sens et il faut comprendre la logique sous jacente.

Les bases

L'utilisation de Vim est faite sous forme de mode. Chaque mode possède un rôle spécifique et il est possible de passer entre les différents modes.

Voici les principaux modes

  • Le mode normal (mode par défaut)
  • Le mode ligne de commande
  • Le mode insertion
  • Le mode visuel

Mode normal : Mode principal, il permet la manipulation de texte et est utilisé pour changer de mode. On y revient depuis n'importe quel mode en appuyant sur Esc

Mode ligne de commande : Utilisé pour taper une commande vim ou pour la recherche. On peut y accéder en appuyant sur i (insert) ou a (append)

Mode insertion : Utilisé pour inséré du texte. Attention, ce mode ne devrait pas être utilisé pour la manipulation de texte (comme la suppression de caractère). On peut y accéder en appuyant sur : ou / ou ?

Mode visuel : Utilisé selectionner du texte. On peut y accéder en appuyant sur v

Les commandes

Quelques commandes de bases pour l'edition de fichier

  • Editer un fichier :e (edit)
  • Quitter un fichier :q (quit)
  • Quitter un fichier sans sauvegarder :q!
  • Sauvegarder :w (write)
  • Sauvegarder et quitter :wq (write and quit)

Les déplacements

Les déplacements sont à effectuer dans le mode normal.

Les déplacements par caractères:

Les déplacements par mot:

  • Mot par mot w (word)
  • Debut d'un mot b (begin)
  • Fin d'un mot e (end)

Les déplacements par ligne:

  • Debut d'une ligne ^ (cf regexp)
  • Fin d'une ligne $ (cf regexp)
  • Aller à la ligne X :X
  • Début du fichier gg
  • Fin du fichier G

Parler Vim

Les phrases

Vim est différent des éditeurs de texte classique. D'une part à cause de son fonctionnement par mode, mais également à cause de par son approche de l'edition. Il faut voir l'utilisation de Vim comme un dialogue entre l'utilisateur et son editeur. L'utilisateur va demander des requêtes à Vim et ce dernier va effectuer les commandes.

On peut donc parler sous forme de phrase pour réaliser des actions. Chaque phrase est composée de 3 éléments: un "Verbe", un "Modificateur" et un "Objet". Vim étant anglophone il faut penser la construction de phrase en anglais.

Verb → Modifier → Object

Tout de suite un exemple, pour mieux comprendre. Prennons la phrase "Change inner word" qui se traduit par "Change l'interieur du mot". Cette phrase s'effectue sous Vim de cette forme:

  • c (Change)
  • i (Inner)
  • w (Word)

Cet ensemble de touche va supprimer le mot courant et placer Vim en mode insertion.

Une bonne pratique pour apprendre à utiliser Vim est donc de parler en même temps qu'on effectue les commandes.

Verbs

Voyons à présent les différents verbes disponibles.

  • d (Delete)
  • c (Change)
  • y (Yank/copy)
  • p (Paste)
  • v (Visual)

Cette ensemble d'action retrace toute les actions que vous êtes amenés à effectuer lors de l'édition de texte. Les touches sont souvent intuitives et représentes la première lettre de chaque action.

Modifiers

Les modificateurs sont des adjectifs pour la commande. Ils vont permettre de préciser jusqu'où porte la commande. Voici quelques modificateurs :

  • i (Inner/Inside)
  • a (Around)
  • f (Find)
  • t (Til/until)

La différence entre Find et Til est subtile. Til ira jusqu'au caractère recherché sans l'inclure tandis que Find ira jusqu'au caractère recherché en incluant ce dernier

Text objects

Les text objects sont ceux sur quoi la l'action va être réalisée. Voici quelque exemples de text objects :

  • w (Word)
  • s (Sentence)
  • p (Paragraph)
  • b (Block / parenthese)
  • t (Tags xml/html)

On note aussi qu'il est possible de mettre certains caractères comme objet. Ainsi tous les caractères ouvrant-fermant fonctionnement comme (), "", , <>, {}, [].

Supprimer dans une parenthèse revient donc à faire di(

Exemples

Voici quelques exemples pour s'exercer:

  • Delete til the end of line → d$
  • Change til the next 'a' → cta
  • Change in " → ci"

Avec de la pratique vous serez beaucoup plus performant qu'avec un éditeur de texte classique. Cela vous amenera même à trouver des plugins pour modifier le comportement d'autres éditeurs de texte (Sublime text, Brackets, Emacs) pour qu'ils émulent le comportement de Vim.

Usages avancés

Gestion de l'historique

Vim possède une gestion assez fine de l'historique ce qui permet d'être performant lors de certaines tâches répétitves.

  • u (Undo)
  • Ctrl + r (Redo)
  • . (Repeat the last action)

On note que l'action "Redo" n'est pas sur la touche "r" directement celle ci étant déjà dédiée au mode "Replace".

  • / (Search)
  • ? (Reverse Search)
  • * (Search the current word)

Pour l'ensemble de ces commandes, la touche n permet d'aller à l'occurence de recherche suivante (next) et la touche N perment d'aller à l'occurence précédente.

La touche Esc permettant de sortir du mode recherche.

Actions sur les lignes

De la même manière qu'un verbe peut s'appliquer sur un mot, les verbes peuvent aussi s'appliquer directement sur des lignes. Pour cela il suffit de doubler la touche du verbe en question.

  • dd (Delete the curent line)
  • yy (Yank the curent line)
  • cc (Change the curent line)
  • ...

On peut également réindenter la ligne courante avec la commande ==

Le mode insertion ne devant pas servir à insérer des sauts de ligne. La commande o (open) permet d'ouvrir une nouvelle ligne après la ligne courante.

Importance de la casse

Vim ayant énormement de commande, la case à une importance primordial. Voici quelques exemples :

  • O Ouvrir une ligne avant la ligne courante
  • P Coller avant le curseur
  • I Insérer au début de la ligne courante
  • A Insérer à la fin de la ligne courante

Split

Contrairement à d'autre éditeur, Vim permet de modifier deux (ou plus) fichiers simultanément. Pour cela Vim utilise des "split" qui vont découper chaque fichier en plusieurs fenêtres au sein de Vim.

  • :split pour créer un split horizontal
  • :vsplit pour créer un split vertical
  • Ctrl + w pour naviguer récursivement entre les fenêtres

Autocompletion

Comme la plupart des éditeurs récents, Vim possède une fonction d'autocompletion. Vim ne travaillant qu'avec des regexp, cette autocompletion n'est que de l'autocompletion par syntaxe et non contextuelle.

  • Ctrl + n Autocompletion basique
  • Ctrl + x → Ctrl + KEY Autocompletion étendue avec plusieurs sous modes comme autocompletion de lignes etc

Certain plugins arrive tout de fois à avoir une autocompletion plus poussée.

Pour aller plus loin

La communauté

La communauté autour de Vim est assez conséquente. Il ne faut pas hésiter à chercher une astuce et se documenter pour comprendre certaines choses. De nombreux plugins sont mis à disposition faisant diverses choses suivant les goûts et les couleurs. La configuration de Vim est faite pour être personnelle et il ne faut pas hésiter à configurer l'outil afin d'être plus productif.

Références

Pour réaliser cet exposé je me suis inspiré de multiples sources:


.

L'outil SSH

Posted by IT NISRO 0 commentaires

     Comme nous allons le voir, SSH est bien plus qu'un shell distant. C'est aussi un outil qui permet très aisément de creuser différents types de tunnel. Comprendre l'architecture logicielle de SSH et comprendre comment il permet de créer des tunnels nous permettra d'aborder plus facilement n'importe quel outil de tunneling. Aussi SSH sera beaucoup cité dans les exemples mis en oeuvre dans les parties suivantes.

L'outil SSH                                                                                               

SSH (Secure Shell v2) est un protocole de niveau applicatif :



Ce protocole est définit par un ensemble de RFC [4250 - 4255]

C'est essentiellement la RFC 4254 qui va nous intéresser, à savoir la RFC qui décrit comment SSH permet la création de tunnels.

L'archtiecture logicielle de SSH - Les 3 protocoles internes                    

SSH est organisé de 3 protocoles, chacun de ces protocoles répondant aux spécifications des RFC citées précédemment:



Nous allons aborder rapidement les protocoles d'authentification et de transport, ces derniers ayant déjà étudiés en cours. Aussi on portera une attention particulière au protocole de connection.


L'archtiecture logicielle de SSH - SSH Transport Layer Protocol              

Comme vu en cours, le TLP de SSH est responsable de l'établissement d'une connexion chifrée et de l'authentification du serveur. Les principaux mécanismes utilisés ici sont l'échange de clef de session via Diffie Hellman et l'authentification du serveur, qui a lieu penant l'échange Diffie Hellman. Le schéma suivant récapitule l'ensemble de ces différentes étapes:



L'archtiecture logicielle de SSH - SSH Authentication Layer Protocol      

SSH met à disposition plusieurs méthodes pour authentifier le client. Il faut noter que ce protocole d'authentification du client est encapsulé dans le TLP, de ce fait toutes actions mises en oeuvre dans le protocole d'authentification du client sont censées être chifrées et sûres. Ces méthodes sont décrites dans la RFC 4252.

les différentes méthodes sont :

  • PublicKey => Le client dispose d'une clef publique et le serveur a confiance en cette clef.
  • Password => La plus connue et la plus usitée, le client envoie son mot de passe.
  • HostBased => Le même principe que PublicKey mais c'est un "host" qui est authentifié. L'idée est qu'il peut y avoir plusieurs clients provenant d'un même host.

Typiquement, lors de l'utilisation de ce protocole, le client enverra un message formaté comme suit:



L'archtiecture logicielle de SSH - SSH Connection Layer Protocol            

C'est ce protocole qui est utilisé lors de l'établissement d'un shell distant. C'est aussi ce protocole que nous utiliserons lorsque nous aurons besoin de créer des tunnels. A noter qu'ici aussi, ce protocole fonctionne au dessus de TLP et se retrouve donc implicitement chiffré.

Nous ne détaillerons pas l'établissement d'un shell mais bien la création de deux différents types de tunnels, à savoir :

  • Le local port forwarding
  • Le remote port fowarding


Local Port Fowarding

Le client C initie une connexion SSH vers le serveur SSH S. En plus de la connexion active vers le serveur SSH, le client écoute en plus sur un port X d'une interface Y. L'idée est que lorsque qu'une connexion est initiée vers Y:X du client alors ce dernier envoie le message suivant au serveur :


Ce message permet au client de signaler au serveur qu'il doit forwarder ce flux (relatif à un canal de données SSH) vers l'adresse "host to connect" sur le port "port to connect". Nous avons crée un tunnel applicatif!

La commande typique permettant de faire un tunnel de la sorte est la suivante :

ssh -L localhost:7777:bulbizzare:80 IPserveurSSH

Nous obtenons le schéma logique suivant :



Retour au modèle OSI, nous avons bien un tunnel applicatif (ici HTTP)/ applciatif (SSH) :


Voyons maintenant un autre type de tunnel que SSH met à notre disposition.


Remote Port Fowarding

Dans ce scénario le client C initie une connexion SSH vers le serveur SSH S. Pour avertir le serveur de possibles connexions "reverse", le client envoie alors un message formaté comme suit:


En plus de sa connexion SSH, le serveur SSH écoutera alors sur son interface X et sur le port Y. Lorsqu'une connexion sera initiée sur X:Y du serveur, ce dernier enverra au client un message formaté comme suit :


Si le client accepte (normalement c'est le cas..), un canal sera alors ouvert et dédié au tranfert de ce flux, du serveur vers le client.

Bob étant le client, Bulbizzare étant le serveur SSH, la commande typique permettant de faire un tunnel de la sorte est la suivante :

ssh -R ipbulbizzare:7777:ipSalameche:21 IPBulbizzare

Nous obtenons le schéma logique suivant :



Lorsque Alice initiera une connexion sur le port 7777 de l'interface publique de bulbizzare, le trafic sera alors redirigé vers Bob et ce dernier l'enverra vers le serveur FTP salamèche. Cet exemple n'est pas forcément pertinent (ni sécurisé) mais permet de comprendre facilement le cas de "reverse tunneling".


Ce qu'il faut retenir                                                                                 

SSH est un outil puissant pour faire du tunneling. Il permet :

  • Le local port forwarding
  • Le remote port fowarding
  • Une connexion chiffrée et authentifiée



Tunneling

Posted by IT NISRO 0 commentaires

 Avant d'attaquer la notion de tunneling, il est judicieux de savoir ce qu'est concrètement un tunnel réseau. Un tunnel réseau est en fait un concept purement basé sur le modèle OSI. En effet, un tunnel réseau répond à une définition simple:

"Un protocole qui encapsule un protocole de niveau plus bas ou égal."


Rappel OSI                                                                                               

    Ce bref rappel du modèle OSI s'avère capitale pour comprendre la majorité des notions abordées. Le schéma suivant montre l'encapsulation standard des différentes couches réseaux :



  • Ethernet, 802.11 ==> OSI 2
  • IP, ICMP ==> OSI 3
  • TCP, UDP ==> OSI 4
  • TLS/SSL ==> OSI 6
  • DNS, SSH, HTTP, TELNET.. ==> OSI 7

Exemples                                                                                                 

Comme le montre le schéma ci dessous, un exemple typique de tunneling est visible, à savoir un protocole réseau (OSI 3) sur un protocole de transport (OSI 4) :



Un exemple plus concret de tunnel, IP sur GRE (Generic Routing encapsulation) :



Voilà, il n'y a pas grand chose d'autre à dire pour définir ce qu'est un tunnel. Voyons maintenant à quoi correspond le tunneling.

L'art du tunneling ?                                                                                 

    La définition est assez expéditive. "Tunneliser", c'est ni plus ni moins utiliser des tunnels. C'est un concept qui reste très simple mais qui permet de faire de grandes choses.

Nous allons voir, dans les parties suivantes, comment utiliser le tunneling. Cependant il convient d'abord d'étudier l'outil le plus usité dans le monde des tunnels, à savoir SSH.



NFC "Near Field Communication"

Posted by IT NISRO 0 commentaires

     NFC est une technologie qui permet de faire communiquer deux entités dans un faible périmetre. En effet, cette technologie se veut être sans contact c'est à dire que lorsqu'on souhaite faire communiquer ses deux équipements on doit les rapprocher à une distance de l'autre de quelques centimetres seulement.

Historique                                                                                               

    La technologie NFC a vu le jour en fin decembre 2003 conjointement par l'International Organization for Standardization (ISO), l'Internation Electrotechnical Commission (IEC) et par la suite normé par l'European Computer Manufacturers Association (ECMA). Cette norme a permit de definir les differentes caractéristique de la technologie qui venait de voir le jour.

Ces differentes caractéristiques sont les suivantes :
  • Modulation
  • L'encodage
  • Le protocole de transport
  • Le débit
  • La fréquence
  • Le format des trames

Mais ce n'est qu'au forum eponyme (le NFC Forum) en 2004 à l'initiave conjointe de Nokia et Philipps que de nombreuses entreprises se sont intéressés à cette technologie. Le but étant de prévoir l'intégration de la technologie au sein des differents équipements commercialisés dans les années suivantes.

Fonctionnement                                                                                      

    NFC est une technologie qui se base pour beaucoup sur RFID (Radio Frequency Identification). Afin de bien comprendre NFC il faut donc repartir du fonctionnement de RFID.

RFID

RFID est composé de deux entités, la première qu'on apppele le lecteur, tandis que l'autre est l'étiquette.

  • Le lecteur a pour role de générer un champ électromagnétique qui va être receptionner par une puce éléctronique en l'occurence, l'étiquette RFID
  • L'étiquette quant à elle, émet un signal contenant une donnée courte en réponse au lecteur. C'est donc avec l'énergie générée par le champ du lecteur que l'étiquette peut repondre.
NFC "Near Field Communication"

C'est notamment cette technologie qui est largement utilisé à travers le monde dans les centres commerciaux afin que l'antivol émette un signal au lecteur qui va lui l'interpreter et générer le fameux "bip"

NFC "Near Field Communication"

NFC

La technologie NFC reprend le même principe en effet, il y'a désormais un initiateur et une cible. L'initiateur étant celui qui souhaite communiquer et la cible, l'entité avec laquelle il souhaite échanger. Cette communication suit deux modes différents, le mode actif et le mode passif.
  • Le mode passif: un appareil initie la communication , c'est donc lui qui fournit le champ magnétique, ainsi la cible utilisera cette énergie fournit afin de répondre (carte de transport)
  • Le mode actif : les 2 appareils génèrent leur propre champ magnétique. Ils sont donc complètement indépendant énergétiquement parlant. Il n'y donc pas de champ généré pendant la réponse de l'autre entité. On parle de mode de communication alternatif.

Caractéristiques                                                                                      

    Les caractéristiques techniques de NFC sont :

  • Débit de communication : 420kbit/s, ce qui est large pour le type de données échangés qui sont de courtes trames.
  • Distance entre les 2 entités : inférieur à 10 cm dans l'idéal 4 cm pour ne pas etre perturbé par d'autre équipement dans cette tranche de proximité.
  • Fréquence : 13,56MHz ce qui permet d'avoir une plus forte tolérance aux potentiels perturbations.
  • Suit la norme 14443 qui définit la communication des circuits intégrés sans contact.

Pour revenir a la communication des circuits intégrés sans contact, dans le cas du NFC la modulation d'amplitude est utilisé pour la transmission de données. Avec un bit échangé par unité de temps tout en sachant qu'une unité de temps est cindée en deux ce qui implique une variation toutes les demies unités

  • Le codage Manchester : Quand on a un front montant, c'est un 0 tandis que lorsqu'on a un front descendant c'est un 1

NFC "Near Field Communication"

  • Le codage Milner : le 1 est toujours codé de la même manière, à savoir que une pause pendant la seconde partie de l'unité de temps est un 1 tandis qu le 0 dépend du bit précédent, si celui ci était à 0, on aura une pause dans la 1ere unité de temps, si c'était un 1 aucune pause ne sera effectué.
NFC "Near Field Communication"

L'utilisation de codage implique la gestion de potentiel collisions, cependant dans le cas de la technologie NFC, elles sont entraînements rares voire même inexistante. Ceci s'explique par le fait que l'entité qui souhaite communiquer écoute avant d’émettre et ne commence à emettre qu'àprès un temps de garde d'attente.




Comment installer VirtualBox sous Ubuntu 20.04 depuis Logithèque et avec Terminal

Posted by IT2 0 commentaires
Pour l'installation de virtualbox sous linux il'y a plusieurs façon de l'installer.

Aujourd’hui on va prendre le cas de l'installer sous Ubuntu 20.04 a l'aide de l'interface graphique Logithèque et avec terminal.

Partie 1 : l'installation depuis logithèque

Pour cette partie l'installation est très simple il suffit d'aller dans logithèque Ubuntu puis chercher Virtualbox après on lance l'installation .

Partie 2 : Terminal 

Pour Ubuntu 16.04 32 bits:

>_ echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list


Pour Ubuntu 18.04 64 bits et plus:

>_ echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
 Apres ajoutez la clé de signature du dépôt avec la commande :

>_ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

Avant de lance l'installation de virtualbox il faut rafraîchir la liste des paquets disponible. Cela peut se faire dans un terminal avec la commande :

>_ sudo apt update

A la fin on lance l'installation de virtualbox :

>_ sudo apt install virtualbox


Pour le coté pratique voila tutoriel vidéos









Membres

Formulaire de contact

Nom

E-mail *

Message *