IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

création et connection réseau adhoc


Sujet :

AppleScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    artiste
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : artiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut création et connection réseau adhoc
    Bonjour à tous,

    Pour une installation artistique, j'ai besoin de mettre en réseau adhoc plusieurs machines (mac mini). Une machine maître envoie des données vers quatre machines esclaves.
    J'utilise pour cela un script que j'ai trouvé et adapté (mes connaissance en applescript sont trés faible).
    Ce script scanne le réseau wifi et détecte si un réseau "hnet" existe. Si il existe, il y connecte la machine. Si il n'existe pas, il le crée.
    C'est donc le même script qui tourne sur toutes les machines.
    Deux fois sur dix, ce système ne fonctionne pas pour la raison suivante: Une machine esclave ne voit pas le réseau "Hnet" suffisament rapidement (pour des raison d'encombrement du réseau certainement) et cherche donc a en créer un autre. Cela finit par une erreur "Hnet already exist" et cela bloque ma machine.
    Ce script ne possède pas de boucle de réitération en cas d'échec.

    Je pense qu'il me faut un systême plus simple avec deux script différentié: un qui crée le réseau (machine maître) avec boucle de réitération en cas d'échec, et un qui connecte (machine esclave) avec réitération aussi en cas d'échec.

    Je peux me débrouiller pour trouver de tels script sur internet ou transformer celui que j'ai pour cela.
    Ce que je ne sais pas faire, c'est une boucle pour relancer la détection en cas d'échec.
    Avez vous des idées ?

    Merci beaucoup.


    Ci joint le script que j'utilise (attention, interface en anglais):

    property NetworkName : "Hnet"


    delay 5 -- wait for menu bar startup

    tell application "System Events"
    tell process "SystemUIServer"

    tell menu bar 1
    set menu_extras to value of attribute "AXDescription" of menu bar items
    repeat with the_menu from 1 to the count of menu_extras
    delay 2
    if item the_menu of menu_extras starts with "Wi-Fi" then exit repeat
    end repeat
    tell menu bar item the_menu
    perform action "AXPress"
    delay 2
    if title of menu item 2 of menu 1 is "Turn Wi-Fi On" then
    perform action "AXPress" of menu item "Turn Wi-Fi On" of menu 1
    delay 3
    perform action "AXPress"
    delay 3
    end if

    if title of menu items of menu 1 contains NetworkName then

    say "Joining " & NetworkName
    perform action "AXPress" of menu item NetworkName of menu 1

    say "Media Server Ready"
    error number -128
    end if

    delay 2
    perform action "AXPress" of menu item "Create Network…" of menu 1
    end tell
    end tell
    delay 0.3
    tell window 1

    delay 0.5
    set value of text field 1 to NetworkName
    click button 1
    end tell
    delay 3

    end tell
    end tell

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour Eriver,
    Je n'est pas de solution complète à ton problème, mais voici quelques éléments :
    D'un point de vue réseau et sécurité, le réseau adhoc n'est pas ce qui se fait de mieux. Tel que tu le décris, n'importe quel voisin assez proche (portée limité du WIFI de ton mac) pourrait se connecter à vos 4 machines.
    C'est, en général, la raison pour laquelle on passe du mode adhoc au mode infrastructure avec un routeur (une box ou autre).

    L'un des problèmes des réseaux adhoc, est justement l'absence de routeur qui résulte d'un temps assez long pour obtenir une adresse IP (type APIPA = 169.254.x.y). En effet, le Mac qui se connecte cherche un DHCP pour avoir une adresse IP, n'en trouve pas, et réitère sa demande jusqu'à abandonner et prendre une adresse APIPA (automatique, presque aléatoire). Elle doit ensuite être comparée aux autres adresses du réseau adhoc pour vérifier son unicité… C'est long ! D'où le problème de ton script. Il serait possible de mettre un délai mais quelle valeur ? (par exemple une instruction "delay 5" suspend l'exécution du script 5 secondes).
    Je suggère plutôt de boucler jusqu'à l'obtention d'une adresse (avec une limite dans le temps à quelques 6 à 8 secondes !).

    Par ailleurs, l'utilisation de l'interface utilisateur (simuler les click souris) est risquée sur un script, car le moindre changement de celle-ci par Apple rendra ton script obsolète. Si l'ordre d'un menu change, une fenêtre évolue, voire si l'un des Mac a décoché la présence du menu Wifi dans la barre principale... ça plante.
    Il y a tellement de raisons que cela ne soit pas pérenne ! Il vaut donc mieux passer par un vrai script.
    J'ajoute que ton script regarde si "Hnet" est dans le menu des réseaux Wifi, mais ne fait rien de plus. Si ce réseau vient seulement d'être crée par une autre machine, il n'est sûrement pas reconnu tant que le Mac n'a pas décidé de re-scanner les réseaux à sa portée (ou que tu ne lui as pas demandé de le faire !). C'est aussi de là que vient ton problème.

    Un vrai script est parfaitement possible (et plus simple d'ailleurs) car AppleScript et le Shell disposent de presque toutes les commandes adéquates pour:
    - vérifier l'état du Wifi, le mettre actif si nécessaire,
    - scanner les réseaux Wifi disponibles dans les environs,
    - vérifier si "Hnet" est bien là et s'y connecter,
    - boucler dans l'attente d'une adresse IP valide - même sur réseau adhoc.

    Cela couvre presque tout tes besoins, sauf la création , par le premier Mac, du réseau Hnet.
    J'ai cherché mais je n'ai pas trouvé (pas encore!) comment créer un réseau adhoc sur le premier poste via un script propre.
    J'ai écris un script qui fait le reste.
    Il reste cependant, que pour des raisons de sécurité et aussi parce que il y a sûrement un réseau wifi ou une boxe à porté, que je te conseille de passer en mode infrastructure.

    Voici le script hormis la partie création de réseau adhoc (je continue à chercher !). J'ai mis le maximum de commentaires, et surtout j'ai prévu des cas avec des alertes.
    Si toutefois tu préfères garder ton script initial (interface utilisateur et adhoc), tu peux utiliser la boucle d'attente de l'adresse IP (les 6 dernières lignes), éventuellement en augmentant les 6 secondes à 8 pour un réseau adhoc.
    Tu peux aussi utiliser la partie activation du Wifi, scanne des réseaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    property Mon_SSID : "Hnet"
    
    -- Tester l'activation du réseau WIFI et activer si necessaire
    set Statut to do shell script "networksetup -getairportpower en1" -- donne status WIFI "AirPort Power (en1): On" ou Off
    if "Off" is in Statut then do shell script "networksetup -setairportpower en1 on" --remplacer on par off pour déactiver
    --delay 2 -- mise en route de la carte Wifi
    
    
    -- Re-scanner les réseaux accessibles :
    set Reseaux to do shell script "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s| awk '{print $1}'"
    if Mon_SSID is in Reseaux then -- je peux me connecter car le réseau existe
        try
            do shell script "networksetup -setairportnetwork en1 '" & Mon_SSID & "'" --pas de mot de passe à fournir !
        on error
            display alert "problème de connexion sur " & Mon_SSID
        end try
    else
    -- Mon réseau n'existe pas et je dois créer un réseau adhoc !! en attendant, j'affiche que le réseau n'est pas à portée.
        display alert "le Réseau " & Mon_SSID & " est introuvable"
    --return
    end if
    
    
    --boucle tant qu'une adresse IP n'a pas été attribuée sur le réseau Airport. Boucle limitée à 6 secondes environ
    set IP_ligne to ""
    set Start_Time to current date
    repeat until ((offset of "IP address:" in IP_ligne) = 1) or ((current date) - Start_Time > 6)
        set IP_ligne to do shell script "networksetup -getinfo Airport | grep 'IP address'"
    end repeat
    if (offset of "IP address:" in IP_ligne) = 0 then display alert "Abandon car impossible d'obtenir une adresse IP"
    Cordialement

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    artiste
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : artiste

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    cher Pbell,

    Merci infiniment pour ta longue réponse et ton script.
    Tout d'abord quelques précisions sur le projet:
    Les données qui sont envoyés de la machine maître vers les quatres esclaves sont trés simples: "1" et "2" chaque secondes. Par contre, le timing doit être parfait car ces données font fonctionner des electro-aimants qui actionnent des balanciers (via mon logiciel hôte et des arduinos) qui doivent tous être synchrones. Les machines ont des adresses IP fixes.

    Effectivement, il serait tellement plus simple de passer par un routeur: réseau sécurisé déja créé. Malheureusement, je viens de passer plus d'une journée a essayer de configurer une airport express dans tout les sens et je n'arrive pas à obtenir quelque chose de fiable en terme de régularité: glissements de 100 à 500 ms tout les trois ou quatre battements. J'obtiens le même résultat si je passe par mon routeur domestique (freebox).
    J'ai tout essayé: 5ghz, bridge, non bridge, canaux, modification de la taille des paquets udp, liaison ethernet maître-borne ou non, etc...

    Par contre, en ad hoc, j'ai une synchronisation parfaite (sur 6 machines éloignés de 2-3 mètres).
    le problème reste que le réseau est donc non protégé. Mais d'un autre côté je ne sais pas trop ce que quelqu'un de mal intentionné peut faire de ce réseau sachant qu'il n'y a pas de données sensible qui transite.

    J'ai un peu rationalisé le script:
    J'ai gardé le script que je t'avais communiqué pour créer le réseau sur la machine maître.
    Par contre, j'ai fait un script de connexion simple sur les machines esclaves. Si elle trouve le réseau, elle se connecte, sinon le script se termine sans créer de message d'erreur. C'est mon logiciel hôte qui, si aucune donnée n'arrive a la machine depuis le maître, relance le script toute les 5 secondes jusqu'a ce que le réseau soit accroché.

    Je te remercie beaucoup pour le script. je vais le tester. ce sera effectivement plus solide que l'utilisation de l'interface. mais je ne suis pas assez calé pour faire autre chose.
    La question de la pérennité n'est pas un gros problème: l'installation aura une durée de vie limité (par contre, elle va voyager à l'étranger sans moi et doit donc être vraiment plug and play...)

    Pour le moment, le script de connexion des esclaves n'a pas l'air de me poser de problème. par contre, le script de création du réseau plante de temps à autre. Effectivement c'est toujours des problèmes de timing: il suffit qu'un élément du menu n'apparaisse pas suffisament vite pour qu'un message d'erreur soit généré et bloque le script. je n'ai pas trouvé le moyen de faire se terminer le script proprement en cas d'échec pour pouvoir le faire se réitérer comme sur les esclaves.

    Encore merci.

    Cordialement

Discussions similaires

  1. Problème de connection réseau fedora
    Par gdpasmini dans le forum Réseau
    Réponses: 5
    Dernier message: 08/01/2007, 09h17
  2. création d'un réseau 2postes Win XP
    Par pinocchio dans le forum Windows XP
    Réponses: 7
    Dernier message: 28/04/2006, 14h02
  3. double connection réseau
    Par dirty_boy dans le forum Administration
    Réponses: 4
    Dernier message: 21/03/2006, 15h27
  4. connection réseau P2P
    Par hogan dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/07/2005, 02h37
  5. [MFC] Connections réseau
    Par EuZah dans le forum MFC
    Réponses: 9
    Dernier message: 24/01/2005, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo