Main menu:

Site search

Categories

juillet 2017
L M M J V S D
« Déc    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archive

Utiliser Wireshark en tant que simple utilisateur

Une astuce lue sur le site Nikaro.net et qui permet d’utiliser Wireshark en tant que simple utilisateur et donc sans avoir besoin de droits d’administration.

Ouvrez un terminal et tapez les deux commandes ci-dessous. Lorsqu’on vous demande si vous voulez autoriser les utilisateurs non-privilégiés à capturer des paquets, répondez <OUI>:

$ sudo dpkg-reconfigure wireshark-common
$ sudo usermod -aG wireshark <votre_login>

Ensuite, il suffit de fermer et de ré-ouvrir la session.

Monter un système de fichiers par FTP

L’hébergeur sur les serveurs duquel se trouve ce site web propose dans son offre 40GB pour la sauvegarde de données personnelles en plus des 60GB d’espace réservés à l’hébergement. Le seul inconvénient de cet espace personnel, c’est qu’il n’est, à ma connaissance, accessible que via une connexion FTP.
Ce n’est pas très grave, il existe des solutions permettant de monter un système de fichiers distant via FTP et on va voir dans ce qui suit que c’est très simple.

La solution choisie est d’utiliser curlftpfs basée sur FUSE et qui va se charger de tout le boulot et bien plus puisqu’il permet des reconnexions automatiques par exemple.
On commence donc par installer curlftpfs:

$ sudo aptitude install curlftpfs

Ensuite ajoutez-vous en tant qu’utilisateur au groupe fuse de façon à ne pas devoir être root pour pouvoir monter le système de fichiers distant:

$ sudo usermod -aG fuse <votre_login>

L’inclusion au groupe fuse ne sera effective qu’après vous être déconnecté de votre session et reconnecté. A ce moment, il ne reste plus qu’à monter le répertoire distant dans un répertoire local de votre choix de cette façon:

$ curlftpfs ftp://ftp.mon_site.com/ mon_répertoire_local -o user=user:password,uid=1000,gid=1000

Une fois la commande tapée, le site FTP distant sera monté dans le répertoire que vous avez indiqué. Cela veut dire que vous y aurez accès simplement en utilisant Nautilus par exemple mais tout autre gestionnaire de fichier fera tout aussi bien l’affaire.

Si vous voulez que le site FTP distant soit monté automatiquement au démarrage de votre PC, il faut ajouter une ligne au fichier /etc/fstab au moyen de votre éditeur de texte favori.

$ gksudo gedit /etc/fstab

La ligne à ajouter devra ressembler à ceci:

curlftpfs#login:password@ftp.mon_site.com	mon_répertoire_local	fuse	rw,user,allow_other,uid=1000,_netdev	0	0

Remplacez bien sûr dans les lignes ci-dessus login et password par ceux nécessaires pour se connecter par FTP ainsi que et mon_répertoire_local par celui que vous voulez. l’uid=1000 permet de vous attribuer les fichiers. Si votre uid et gid ne sont pas égal à 1000, mettez la valeur correspondant à votre nom d’utilisateur et à votre groupe.

Autoriser l’accès aux ports séries sous Ubuntu/Debian

Sous Ubuntu ou Debian, un utilisateur non root ne peut avoir accès aux ports série de type ttyS0 ou ttyUSB0 s’il n’est pas membre du groupe dialout ! Autrement dit, il suffit de vous ajouter à ce groupe pour y avoir accès.
Pour cela, il existe une commande très simple:

$ sudo usermod -aG dialout votre_login

C’est tout simple et ça m’évitera de m’énerver la prochaine fois en me demandant pourquoi le programme que j’écris n’a pas accès aux ports série et de perdre ainsi des heures en débogage.

Installer CyanogenMod 9 sur un Samsung Galaxy S2

Après avoir installé ClockWorkMod comme indiqué dans l’article Rooter le Samsung Galaxy S2 sous ICS, le pas suivant est évidemmment d’installer une ROM alternative comme celle de CyanogenMod.
L’intérêt est d’installer un firmware optimisé basé sur Android mais offrant un certain nombre de possibilités supplémentaires. Dans mon cas, il s’agissait aussi de contourner un bug du Wifi qui provoque des plantages de mon mobile sous ICS et également de ne plus être limité par la transformation des sms en mms dès que le nombre de caractères dépasse les 160 caractères fatidiques du sms.

On va donc se servir du mode recovery de ClockWorkMod pour installer la mise à jour vers CyanogenMod. CyanogenMod ne contient pas les applications Google; il faudra, toujours en mode recovery, installer ces applications nous-même. Vous verrez que cela se fait très simplement.

La toute première chose à faire est évidemment de faire un backup de vos données avec un programme comme Titanium Backup d’où l’intérêt d’avoir au préalable des droits root. Ceci vous permettra de restaurer vos données après la mise à jour du firmware.

Une fois le backup fait, téléchargez les fichiers contenant d’une part CyanogenMod 9 Nightly et d’autre part les Google Apps et placez-les sur la sdcard de votre Samsung Galaxy S2 ou sur la carte micro SD externe si vous en avez une.

Eteignez votre smartphone et redémarrez-le en mode recovery par appui simultané sur les touches Volume Up + Home + Power.
Lorsque votre smartphone a redémarré, vous devriez voir le menu recovery de ClockWorkMod s’afficher.
Avant tout, nettoyez la partition de cache et faites un factory reset. Sans cela, l’installation de CyanogenMod risque de ne pas se faire correctement. Dans le menu recovery choisissez d’abord Wipe cache partition puis Wipe data/factory reset.
Ensuite, choisissez Install zip from sdcard, sélectionnez le fichier cm-9-xxxxxxxx-NIGHTLY-galaxys2.zip, confirmez et attendez que ce soit fait. A ce moment, choisissez dans le menu Reboot system now.
Votre smartphone devrait rebooter, afficher le logo CyanogenMod puis devenir opérationnel.

Maintenant que CyanogenMod est installé, si vous parcourez les applications fournies, vous vous apercevrez vite qu’aucune application Google n’est présente même pas le Google Play Store ce qui empêche l’installation simple d’applications.
Comme dit plus haut, les Google Apps doivent être installées séparément au moyen du fichier que vous avez déjà téléchargé et mis sur la sdcard de votre gsm.
Redémarrez votre mobile en mode recovery comme indiqué ci-dessus et installez le fichier gapps-ics-xxxxxxxx-signed.zip en choisissant dans le menu ClockWorkMod recovery, Install zip from sdcard. Lorsque c’est fait, rebootez votre Samsung Galaxy S2 et vous voilà prêt à profiter de CyanogenMod pleinement.

Dans mon cas, l’installation de CyanogenMod a réglé mes problèmes de WiFi et de sms. Je suis donc pleinement satisfait de mon choix. CyanogenMod est de plus très stable et je n’ai rencontré qu’un seul bug vraiment pas gênant du tout – lors de la modification d’un contact, la modification n’est pas toujours enregistrée correctement. Effet colatéral de cette installation, cela redonne un coup de jeune à votre mobile et on a vraiment l’impression d’avoir un nouveau smartphone en main.

Rooter le Samsung Galaxy S2 sous ICS

Rooter un smartphone comme le Samsung Galaxy S2, c’est lui adjoindre des droits root, des droits d’administration. Mais à quoi cela peut-il servir sur un smartphone ? Cela permet d’installer tout un tas d’applications qui ont besoin de ces droits root pour fonctionner (par exemple Titanium Backup qui fait un backup complet du mobile, icônes et positions comprises). C’est aussi nécessaire pour modifier le thème affiché et en règle générale pour toute modification agissant sur le file système.

Etant donné que mon Samsung Galaxy S2 est utilisé de manière professionnelle, je voulais une méthode permettant de le rooter qui ne soit pas trop intrusive. Pas question d’installer une ROM comme CyanogenMod par exemple. Il fallait aussi qu’elle soit sûre et simple avec possibilité de faire machine arrière dans le cas où je devrais supprimer les droits root.
Autant le dire tout de suite, il existe plein de méthodes différentes. Certaines très simples, d’autres nécessitant l’installation de nouveaux kernels au moyen d’un programme spécialisé. Dans les plus simples, il y a par exemple l’application UnlockRoot qui en un click vous promet de rooter votre smartphone. La seule chose qui me pose problème avec cette application est qu’elle impose l’installation des drivers USB, autrement dit l’installation de Samsung Kies et qu’elle ne fonctionne que sous Windows. Comme je suis sous linux, ça me pose évidemment un gros problème.

J’ai finalement opté pour la méthode décrite ici. Elle ne nécessite que le téléchargement de deux fichiers. Le reste du travail est fait par le Galaxy S2:

  1. Téléchargez CMW.zip et SU-Busybox-Installer.zip
  2. Connectez le Galaxy S2 via USB au PC en tant que stockage de masse. Menu Paramètres/Plus…/Utilitaires USB/ et cliquez sur le bouton Connecter le stockage au PC. Ensuite branchez le cordon USB.
  3. Placez ensuite les fichiers téléchargés ci-dessus sur la sdcard.
  4. Eteignez votre smartphone et rallumez-le en mode Eecovery en appuyant simultanément sur les touches Home + Volume Up + Power.
  5. Lorsque le menu apparaît, choisissez Apply update from external storage et sélectionnez le fichier CWM.zip. Un nouveau menu doit apparaître après quelques instants.
  6. Dans le menu de CWM recovery, choisissez Install zip from sdcard. De nouveau, sélectionnez dans la liste le fichier SU-Busybox-Installer.zip
  7. Il suffit ensuite de rebooter le smartphone pour terminer l’installation en choisissant dans le menu Reboot Device.

Une fois votre Galaxy S2 rebooté, il est rooté. Pour vous en convaincre, installez une application comme par exemple Solid Explorer qui est un file Manager et qui vous donne accès, quand le smartphone est rooté, à tout le file système.

Il est possible de supprimer l’accès root en téléchargeant le fichier SU-Uninstaller-Signed.zip et en l’installant comme ci-dessus. Refaites toute la procédure et remplacez au point 6 le fichier SU-Busybox-Installer.zip par SU-Uninstaller-Signed.zip.

Update du 13 janvier 2013:

Un des contributeurs au forum XDA vient de publier un petit soft qui permet de rooter le Galaxy S2 et qui est compatible avec toutes les versions d’Android, de la 2.2 à la 4.1. Seul inconvénient, il n’est disponible que pour Windows. Son nom: Unlock Root 3. Voir le tutoriel ici. Le soft est téléchargeable à cette adresse.

Python: les itérateurs et générateurs

Pour une petite application que j’avais décidé d’écrire en Python, j’avais besoin de parcourir des chaînes de caractères en prenant les caractères 3 par 3. En tant qu’amateur de C++, ma première idée était forcément de créer une boucle for du genre de celle qu’on écrit en C++:

std::string my_string("azertyuiop");
for(unsigned int i  = 0; i < my_string.length(); i+=3)
{
  std::cout << my_string.substr(i, 3) << std::endl;
}

Cette façon d’écrire une boucle n’est pas très compliquée à transcrire en Python. On peut utiliser la fonction range() à laquelle on peut passer des paramètres dont le début, la fin et le ‘pas’ (step) de la boucle. Cela donne quelque chose comme:

my_string = "azertyuiop"
for i in range(0, len(my_string), 3):
  print i, t[i:i + 3]

C’est considéré comme une méthode pas très pythonique. On préférera utiliser un itérateur ou un générateur.
Voyons brièvement et basiquement de quoi il s’agit.

Les itérateurs

Les itérateurs sont des objets permettant de parcourir facilement des containers que ce soient des strings – qui ne sont que des containers de caractères – des listes ou des containers d’objets. Par exemple, pour récupérer tous les caractères constituant une chaîne de caractères, on procède comme ceci:

for c in my_string:
  print c

C’est très simple à utiliser.

Il est très facile aussi de créer soi-même un itérateur de façon à ce qu’il se plie à ce que l’on veut faire. Pour cela, il suffit de créer un objet qui contient deux méthodes: __iter__() et next().
__iter__() est appelé implicitement au début de la boucle et doit renvoyer un objet itérateur.
next() doit lever une exception StopIteration quand on est à la fin de la boucle et qu’il n’y a plus d’éléments à traiter.

Dans le cas d’un itérateur qui renvoie les caractères trois par trois, l’itérateur ressemblerait à ceci:

class triplet:
  def __init__(self, data):
    self.data = data
    self.count = 0
    self.length = len(data)
  
  def __iter__(self):
    return self
    
  def next(self):
    if self.count > len(self.length):
      raise StopIteration
    else:
      result = self.data[self.count:self.count+3]
      self.count += 3
      return result

Et on peut l’utiliser dans une boucle de cette façon:

test = triplet("azertyuiop")
     for item in test:
       print item

Les générateurs

Cette méthode utilisant un objet itérateur me plaît bien. C’est clair, efficace et très OOP.
Il existe une autre méthode qui est très simple et qui utilise les principes de l’itérateur même si c’est bien caché. Il s’agit des fonctions générateurs. Il s’agit en fait d’une fonction qui retourne un itérateur qui, lui-même, peut être utilisé pour contrôler une boucle par exemple.
Le simple fait d’utiliser le mot-clef yield fait de la fonction une fonction générateur. Lorsque ce mot clef est rencontré, il retourne la valeur en argument et l’execution est suspendue jusqu’à la prochaine itération.

Dans notre cas, cela donne ceci:

def triplet(str):
  current=0
  while current <= len(str):
    yield str[current:current+3]
    current += 3

Et on l’utilise dans une boucle comme d’habitude:

for t in triplet("azertyuiop"):
  print t

Comme on l’a vu brièvement ici, les itérateurs et les générateurs sont très simple d’emploi et on les retrouve très fréquemment dans les codes écrits en Python. Je vous renvoie à la documentation si vous voulez en savoir plus.