cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2024-07-17

La synchronisation entre un tĂ©lĂ©phone et un ordinateur Ă  gĂ©nĂ©ralement pour but de copier les photos et vidĂ©os prisent par le tĂ©lĂ©phone sur l’ordinateur. De nombreuses solutions existent (parfois Ă  votre insu) et pour n’en citer qu’une je pense Ă  Nextcloud.

Ici, on parlera de l’opĂ©ration rĂ©ciproque, qui consiste Ă  copier des documents depuis un ordinateur et de les maintenir Ă  jour sur le tĂ©lĂ©phone.


ඏ

Quel type de besoin ?

Eh bien cela dĂ©pend de vos besoins, mais pour donner des exemples je pense aux sons et fonds d’écrans personnalisĂ©s. Mais Ă©galement vos musiques prĂ©fĂ©rĂ©es.

On peut aussi imaginer que vous préparer sur votre ordinateur :

  • Un dossier contenant des films/sĂ©ries Ă  regarder pour vos WE ou dĂ©placement,
  • Un ensemble de dossier contenant une sĂ©lection de vos photos prĂ©fĂ©rĂ©es.

Des dossiers que vous synchroniserez périodiquement.

La solution proposée ci-dessous permet en fait de faire la synchronisation dans les deux sens.

Si vous synchroniser des donnĂ©es de votre ordinateur vers votre tĂ©lĂ©phone, assurez que d’éventuel programmes de synchronisation prĂ©sent sur le tĂ©lĂ©phone ne prennent pas en compte les dossiers oĂč son stoker ces donnĂ©es.


ඏ

La base technique sur l’ordinateur

  • Un client ssh configurer avec une paire de clĂ©,
  • Éventuellement la commande nmap pour rechercher automatiquement l’adresse IP du tĂ©lĂ©phone.

ඏ

La base technique sur le téléphone

Un serveur SSH, je vous propose đŸ» SimpleSSHD un serveur SSH pour Android en utilisant votre clĂ© publique (en gĂ©nĂ©ral ~/.ssh/id_rsa.pub ou ~/.ssh/id_ed25519.pub).

Le tĂ©lĂ©phone et l’ordinateur doivent ĂȘtre sur le mĂȘme rĂ©seau local.

Une fois SimpleSSHD dĂ©marrĂ©, vous verrez un Ă©cran de ce type qui vous donnera les adresses d’écoutes de l’application.

On ignorera les adresses en IPv6 un peu longues Ă  Ă©crire (partiellement floutĂ©es sur la capture d’écran) et vous rechercherez une IP correspondant Ă  un rĂ©seau prĂ©sent sur l’ordinateur.

Ici, il s’agit de l’adresse IP 192.168.2.72.

  • On ignorera les adresses en IPv6 (Celles dont les valeurs sont sĂ©parĂ©es par :)
  • L’adresse Ă  prendre en compte commence par 192.168. (sauf manipulation particuliĂšre sur votre rĂ©seau que montre que vous savez ce que vous faite)
SimpleSSHD

ඏ

Usage basé sur « rsync »

Ici, on suppose que vous avec garder le port par défaut de SimpleSSHD, à savoir le port 2222.

Dans notre exemple l’adresse du tĂ©lĂ©phone sur le rĂ©seau local est : 192.168.2.72.

rsync --compress --copy-links --delete --progress --recursive --update --verbose -e 'ssh -p 2222' ~/Pictures/photos-pour-telephone user@192.168.2.72:/sdcard/Pictures.local/
  • rsync : la commande permet de faire des copies de fichiers efficaces entre deux machines, elle se base sur le protocole SSH.
    • -z, --compress : active la compression des transferts (optionnel)
    • -L, --copy-links : Android ne supporte pas les liens symboliques, en cas de lien, c’est la cible qui est copiĂ©e.
    • --delete : Supprime sur la destination les fichiers qui n’existent pas sur la source.
    • --progress : Informe sur la progression des copies (optionnel)
    • -r, --recursive : copie l’ensemble du contenu des rĂ©pertoires rĂ©cursivement.
    • -u, --update : Saute les fichiers plus rĂ©cents sur la destination que sur la source (optionnel)
    • -v, --verbose : Active un affichage plus loquace
    • -e 'ssh -p 2222', --rsh='ssh -p 2222' : Permet de modifier le shell utilisĂ© par la communication (dĂ©tails ci-aprĂšs)
      • ssh : On garde ssh
      • -p 2222' : mais on change le port de communication (Important)
    • ~/Pictures/photos-pour-telephone : Le dossier source (ici un dossier local de l'ordinateur)
    • user@192.168.2.72:/sdcard/Pictures.local/ : Le dossier destination
      • user : L’application SimpleSSHD ne supporte qu’un seul utilisateur, son nom user
      • 192.168.2.72 :l’adresse IP du tĂ©lĂ©phone
      • /sdcard/Pictures.local/: Le rĂ©pertoire de destination sur le tĂ©lĂ©phone.

On peut faire l’inverse copier des donnĂ©es de tĂ©lĂ©phone sur l’ordinateur :

mkdir -vp ~/Desktop/PhoneCamera # Création du dossier qui va recevoir les médias
rsync --compress --copy-links --delete --progress --recursive --update --verbose -e 'ssh -p 2222' user@192.168.1.73:/sdcard/DCIM/Camera/ ~/Desktop/PhoneCamera

En gĂ©nĂ©ral, on peut accĂ©der aux photos de la camĂ©ra du tĂ©lĂ©phone avec le chemin /sdcard/DCIM/Camera mĂȘme si le chemin rĂ©el est quelque chose comme /storage/emulated/0/DCIM/Camera.

Pour copier vos données, vous devrez utiliser un chemin partant depuis `/sdcard/.


ඏ

Le tĂ©lĂ©phone et l’ordinateur doivent ĂȘtre sur le mĂȘme rĂ©seau local.

Les deux pĂ©riphĂ©riques doivent ĂȘtre sur le mĂȘme rĂ©seau local
 Hum, ça veut dire quoi ?

En fait cela vous laisse pas mal de liberté :

  • Les deux pĂ©riphĂ©riques sont connectĂ©s Ă  la mĂȘme « box » en WIFI ou en RJ45, sans doute la plus triviale des options (Ă  privilĂ©gier pour vos premiers tests),
  • Avec une connexion USB direct entre les deux machines est Ă©galement possible. Il faut soit activer le partage de fichier, soit le partage de connexion via USB. Cette derniĂšre option est pratique en dĂ©placement, elle vous donne accĂšs aux fichiers du tĂ©lĂ©phone et Ă  Internet.
  • Avec une connexion Bluetooth direct, ça marche aussi en activant le partage de connexion via Bluetooth.

ඏ

Rechercher l’IP du tĂ©lĂ©phone depuis l’ordinateur

Dans le cas oĂč plusieurs adresses en IPv4, on peut dĂ©terminer le bon rĂ©seau en regardant les adresses IPv4 prĂ©sentes sur l’ordinateur. Pour ce faire la connexion entre le tĂ©lĂ©phone et l’ordinateur doit ĂȘtre prĂ©alablement Ă©tablie, en USB il suffit que le cĂąble soit brancher entre les deux appareils.

On va d’abord rechercher les rĂ©seaux prĂ©sents et actif sur l’ordinateur (voir le billet : 🎓 Exemples prĂȘts Ă  l’emploi avec la commande « ip ») :

ip -4 --json addr show |
    jq -c 'map( select( .flags | index("LOOPBACK") | not ) | select( .flags | index( "UP") ) | .addr_info[] | { "ip": .local, "len": .prefixlen } )[]'

On va par exemple obtenir quelque chose comme :

{"ip":"192.168.2.143","len":24}
{"ip":"172.17.0.1","len":16}
{"ip":"172.18.0.1","len":16}

Comme dit plus haut, le rĂ©seau qu’utilise commence probablement par 192.168.


ඏ

Automatisation de la recherche de l’IP

L’automatisation peut sembler un peu ardue, elle permet de ne pas avoir Ă  regarder le tĂ©lĂ©phone pour connaĂźtre son adresse IP, cette partie est facultative.

  • Automatisation


    Certains rĂ©seaux sont Ă  Ă©liminer, on va se limiter aux rĂ©seaux de classe C (ceux avec la longueur de masque Ă  24), ce qui d’aprĂšs mes tests est suffisant, par ailleurs l’analyse des rĂ©seaux de classe B (longueur de masque Ă  16) serait beaucoup trop long.

    Sur la base de notre exemple, cela revient à fixer :

    _port_='2222'
    _ip_='192.168.2.143'
    _len_='24'
    
    nmap -n -T4 -oG - -p "${_port_}" "${_ip_}/${_len_}"
    
    • DĂ©tail des paramĂštres de nmap
      • -n : Pas de rĂ©solution DNS
      • -T4 : Utilise le mode agressif pour le scan, c’est le mode conseiller pour les rĂ©seaux avec de temps de rĂ©ponse raisonnable.
      • -oG - : « Sortie Grepable », donne un rĂ©sultat permettant d’automatiser l’analyse des rĂ©sultats vers la sortie standard (le - seul).
      • -p <PORT> : Permet de limiter l’analyse Ă  un seul port.
      • <IP>/<NOMBRE_DE_BITS> : Indique la cible pour la recherche. Dans l’exemple on utilise '192.168.2.143' ce qui n’est pas en terme rĂ©seau correct, il faudrait utiliser '192.168.2.0' qui est l’adresse du rĂ©seau. Mais comme le nombre de bit Ă  prendre en compte est 24 (soit 3 fois 1 octet (8 bits)) la derniĂšre valeur est ignorĂ©e. En gros pour nmap '192.168.2.143' est Ă©gal Ă  '192.168.2.0'

    Il reste du bruit qu’on peut Ă©liminer avec :

    nmap -n -T4 -oG - -p "${_port_}" "${_ip_}/${_len_}" |
      grep -F "${_port_}/open/tcp/" |
      sed -E 's,^.*:[[:blank:]]([0-9.]+)[[:blank:]].*$,\1,g'
    
    • DĂ©tail de l’ensemble des commandes

      Le résultat de la commande nmap est filtré par un grep puis un sed.

      • grep -F '2222/open/tcp/' : Indique l’on ne garde que les lignes oĂč le port 2222 est ouvert pour le tcp. L'option -F servant Ă  prĂ©ciser qu’il ne s’agit pas d’une expression rĂ©guliĂšre, mais bien d’une expression littĂ©rale.
      • sed -E 's,^.*:[[:blank:]]([0-9.]+)[[:blank:]].*$,\1,g' : Isole les caractĂšres 0 Ă  9 et . qui se trouvent juste aprĂšs la sĂ©quence : suivi d’un caractĂšre d’espacement et juste avant une sĂ©quence commençant par un autre caractĂšre d’espacement.

    Si ce résultat vous donne plusieurs résultats, je vous conseille de modifier le port dans la configuration de SimpleSSHD, ainsi que dans le reste de la configuration, par exemple en utilisant 22222.


ඏ

Liens

኿

â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog