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

Linux Discussion :

Création d'un nombre unique


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Création d'un nombre unique
    Bonjour a tous,

    Voila mon probleme:
    Nombres de serveurs sont installés dans un parc.

    Je voudrais me baser sur un identifiant unique et j'ai choisi le UUID de la MoBo en considerant que les cartes modernes le fournissent ds leur BIOS

    root # dmidecode |grep "UUID"
    me rendra un identifiant unique du type
    UUID: 5E2FDA98-6F4C-11DD-8664-0013200B4F9E

    Je compte acceder à ces machines en montant un tunnel ssh sur un bastion. Voici donc ma question :

    Comment faire pour, en partant du UUID, fabriquer un nombre decimal unique compris entre une valeur a et une valeur b

    Exemple je pars de mon UUID 5E2FDA98-6F4C-11DD-8664-0013200B4F9E
    et je voudrais en sortie un nombre compris entre
    A= 20000 et B=29999 ?

    LE tout en bash idealement

    Merci de votre aide :0)

    Bien cordialement, Wilburt D

  2. #2
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    J'ai du mal à saisir ton besoins....

    Tu n'obtiendras jamais un numéro unique compris en 20000 et 29999 à partir d'un UUID !
    Il y a bien plus d'UUID que de possibilités entre 20000 et 29999... Donc quelque soit ton algo, plusieurs UUID donnerons forcément le même nombre.


    Je ne dois avoir compris ce que tu veux...

    Lilian.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonsoir lilian

    Merci de ton retour...

    Considérons que le UUID est unique.

    Je cherche un algorithme dont la clé serait le UUID (qui assurera donc l'unicité) et qui me permettra de créer un nombre unique et borné.

    C'est algo serait manipulable dans les deux sens, aussi.

    Le but est simple:
    UUID => nombre unique borné => ouverture du tunnel ssh avec comme remote port ce nombre unique.

    Inversement, du cote serveur ou sera ouvert le port j'en deduirait le UUID et ainsi l'origine de l'action demande.

    Ceci me permet de fabriquer un port dynamique et unique pour ouvrir un socket de communication vers mon serveur sans avoir a faire cette association a la livraison du serveur client car je ne maitrise pas cette mise en production...

    J'espere que je suis plus clair....

    Merci de ton aide en tous cas.

  4. #4
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    Je ne crois pas à cet algo. S'il existait il y a bien longtemps qu'on aurait des algo de compression de psychopathe !

    La seule solution pour toi serait d'avoir une base de données dans laquelle tu fais l'association entre un UUID et un numéro.

    Inversement, du cote serveur ou sera ouvert le port j'en deduirait le UUID et ainsi l'origine de l'action demande.
    Quelque soit ton algo, tu risques d'avoir plusieurs UUID possible

    Lilian.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Wilburt Voir le message
    Je cherche un algorithme dont la clé serait le UUID (qui assurera donc l'unicité) et qui me permettra de créer un nombre unique et borné.
    Impossible. Un nombre borné étant borné (d'où l'adjectif qui s'applique ici parfaitement à la qualification du nombre), tout algo transformant un uuid en nombre borné ne pourra pas être bijectif (plusieurs uuid différents donneront le même nombre et inversement, le nombre ne pourra pas remonter à un uuid plutôt qu'un autre).

    Citation Envoyé par Wilburt Voir le message
    J'espere que je suis plus clair....
    Très clair. On a parfaitement compris ton besoin. Hélas on ne peut pas repousser les lois mathématiques.

    Maintenant examinons un peu ton problème. Ton idée (à ce que j'ai compris), c'est que le serveur détecte l'appelant grâce au port utilisé (déjà bonjour si ton uuid génère le nombre 103 utilisé par le serveur de mails pop ou bien le nombre 25 utilisé par smpd).

    Pourquoi tu ne ferais pas un simple client/serveur classique sur un port définit en dur mais en faisant envoyer par le programme appelant le uuid au serveur. Ainsi, le serveur recevant un uuid saurait de qui il s'agit (pour peu qu'il possède la correspondance uuid<=>nom)...

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 408
    Points : 23 802
    Points
    23 802
    Par défaut
    Bonjour,

    Citation Envoyé par Wilburt Voir le message
    UUID => nombre unique borné => ouverture du tunnel ssh avec comme remote port ce nombre unique.
    L'identification d'applications ou de machines à travers un numéro de port TCP, c'est le MAL !
    Je suis désolé, mais on a eu trop d'ennuis au travail avec des applications propriétaires construites de cette façon.

    On en a même vu qui vérifiaient si un processus était déjà lancé en tentant de s'y connecter. Outre le fait que cette information devient visible sur le réseau entier, nous utilisions des serveurs centraux utilisés par des thin clients. Inutile de dire qu'une telle application avait manifestement été conçue sur un P.C. personnel et ne pouvait pas tourner sur un serveur. Et comme le port était choisi arbitrairement, elle entrait aussi en conflit avec d'autres applications.

    Lorsque tu te connectes à une application distante, typiquement le port 80 quand tu consultes une page web, depuis quel port local ton navigateur ouvre-t-il sa connexion ? Réponse : un port aléatoire au dessus de 1024. Donc, si pour une raison ou une autre, une application est en train d'utiliser localement un des ports couverts par ton algorithme, la machine concernée ne pourra se connecter.

    Inversement, du cote serveur ou sera ouvert le port j'en deduirait le UUID et ainsi l'origine de l'action demande.
    Juste par curiosité, quel genre de trafic vas-tu faire circuler à travers ces différents canaux ouverts ?

    Ceci me permet de fabriquer un port dynamique et unique pour ouvrir un socket de communication vers mon serveur sans avoir a faire cette association a la livraison du serveur client car je ne maitrise pas cette mise en production...
    C'est aussi un coup à bloquer toute la pile TCP/IP de ton serveur en bouchant ses ports, et de le mettre à genoux. Du coup, sa panne impacterait toutes les machines qui y sont connectées.

    Est-ce que le serveur en question passe quand même dans tes mains avant d'être envoyé en livraison ? Si c'est le cas, tu peux faire un générateur de certificats X509 local. Tu t'ennuierais largement moins avec l'identification de tes machines ensuite.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Hello et un grand merci a Tous pour vos réponses et vos eclaircissements.

    J'ai finalement tranché et opté pour une maitrise plus pertinente de la machine cliente... qui passe au moins une fois, mm virtuellement, par mes mains.

    Ainsi j'ai repris vos idées:
    Un nombre borné est borné. Quelle evidence !
    C'est ma question qui est a la base completement illogique et parfaitement idiote :0)

    Une simple methode qui a fait ses preuves: associations, pour l'instant ds un fichier plat et plus tard db au choix, du couple (UUID, serial number decrit dans un protocole maison sur n chiffres)
    Ce couple me garantie l'unicite dont j'ai besoin et que je peux reproduire et comparer avec ma base.
    L'extraction du UUID est simple: dmidecode |grep
    Le numero de serie est codé en dur, un simple cat + grep et sed.

    Pour les ports de comm je me servirai de ce sont bon openssh qui fait vraiment des merveilles pour peu que l'on s'interesse a lui.
    L'idée est d'extraire n chiffres de mon serial number puis de fabriquer un port ds la region des 4xyzt et de vérifier la cohérence avec des ports (bien peu nombreux en fait) connus.

    J'ouvre ensuite un port en remote sur mon serveu ssh avec un user sans shell, le tt etant supervise par autossh...

    root# /usr/bin/autossh -M 0 -q -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R rem_port:localhost:22 -i /usr/share/bidon.key -p sshlocalport userwithnoshel@sshpubip &

    Voila pour la mecanique...

    Je peux ensuite me connecter depuis mon serveur ssh
    user# ssh -p rem_port clientuser@localhost

    Si on veut que d'autres serveurs du reseau de serveur ssh puissent acceder a cette fonctionalite, autoriser le serveur ssh a ecouter sur une autre interface que localhost pour les ports remote en ajoutant la directive suivante dans le sshd_config du serveur ssh
    GatewayPorts yes

    Je pense de mm travailler sur l'idée des certificats X509 et monter des vpn pour certains.

    En tt cas merci de votre aide à Tous.

    A bientot

    Wilburt







    Citation Envoyé par Obsidian Voir le message
    Bonjour,



    L'identification d'applications ou de machines à travers un numéro de port TCP, c'est le MAL !
    Je suis désolé, mais on a eu trop d'ennuis au travail avec des applications propriétaires construites de cette façon.

    On en a même vu qui vérifiaient si un processus était déjà lancé en tentant de s'y connecter. Outre le fait que cette information devient visible sur le réseau entier, nous utilisions des serveurs centraux utilisés par des thin clients. Inutile de dire qu'une telle application avait manifestement été conçue sur un P.C. personnel et ne pouvait pas tourner sur un serveur. Et comme le port était choisi arbitrairement, elle entrait aussi en conflit avec d'autres applications.

    Lorsque tu te connectes à une application distante, typiquement le port 80 quand tu consultes une page web, depuis quel port local ton navigateur ouvre-t-il sa connexion ? Réponse : un port aléatoire au dessus de 1024. Donc, si pour une raison ou une autre, une application est en train d'utiliser localement un des ports couverts par ton algorithme, la machine concernée ne pourra se connecter.



    Juste par curiosité, quel genre de trafic vas-tu faire circuler à travers ces différents canaux ouverts ?



    C'est aussi un coup à bloquer toute la pile TCP/IP de ton serveur en bouchant ses ports, et de le mettre à genoux. Du coup, sa panne impacterait toutes les machines qui y sont connectées.

    Est-ce que le serveur en question passe quand même dans tes mains avant d'être envoyé en livraison ? Si c'est le cas, tu peux faire un générateur de certificats X509 local. Tu t'ennuierais largement moins avec l'identification de tes machines ensuite.

  8. #8
    Membre averti
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Points : 328
    Points
    328
    Par défaut
    Vraiment content de lire cette réponse !

    Bon courage,
    Lilian.

Discussions similaires

  1. Mutex pour la création d'un identifiant unique
    Par Jar Jar dans le forum SQL
    Réponses: 1
    Dernier message: 29/02/2008, 17h14
  2. Trouver un nombre unique correspondant à un couple de valeur
    Par le y@m's dans le forum Mathématiques
    Réponses: 16
    Dernier message: 20/08/2007, 12h54
  3. Générer un nombre unique
    Par femtosa dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 12/04/2007, 17h59
  4. [VB6] Génération nombre unique
    Par Overflow64 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 12/10/2005, 16h05
  5. Génération de nombres uniques
    Par developper dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/09/2005, 15h42

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