bernie a écrit 10 commentaires

  • [^] # Re: le Principe...

    Posté par  . En réponse au message [Résolut] Recevoir une réponse a mon ping (en C). Évalué à 1.

    En relisant mieux la question, je me rends compte que j'ai plutôt bien réussi à répondre à côté de la plaque :)

    Donc on oublie ma réponse précédente, désolé pour le bruit…

  • [^] # Re: le Principe...

    Posté par  . En réponse au message [Résolut] Recevoir une réponse a mon ping (en C). Évalué à 3.

    Bonjour alpha_one_x86,

    Je suis bien conscient que je vais devoir décoder les différents protocole (ethernet, IPv4, ICMP), au même titre que j'ai du encodé mon packet ethernet (OSI Layer 2 oblige).

    Les sources sur internet ne m'ont pas aidé et la plus part utilise directement l'icmp, pas l'ethernet.

    En fait, si ce que tu souhaites faire est bien un ping (au sens ICMP), je ne pense pas qu'il soit nécessaire (ni même vraiment souhaitable d'ailleurs) de descendre jusqu'à la couche Ethernet.
    Une solution à base de socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) doit fonctionner. (ce qui correspond probablement à ce que tu as trouvé sur le net ?)

    Mais comme tu veux que le paquet ICMP echo sorte par la bonne interface, il suffit juste de faire un bind() de cette socket sur l'adresse IP de l'interface de sortie à utiliser. (Tu peux mettre 0 pour le port dans ce cas)

    C'est d'ailleurs exactement ce que fait ping avec l'option -I chez moi (visible avec strace). Je pense que c'est l'option dont parle Neox.

    Ainsi tu ne "descends" pas en dessous de la couche IP, et donc grâce au modèle OSI :

    • tu ne présupposes plus rien quant au type de réseau de niveau 2 (qui n'a pas à être Ethernet forcément)
    • si c'est de l'Ethernet, tu n'as pas à gérer des adresses MAC, il y aura résolution ARP
    • les 2 machines n'ont plus à être sur le même réseau de niveau 2, si demain tu insères un routeur intermédiaire par exemple

    Ça pourrait déjà bien simplifier les choses, y compris pour le décodage de la réponse.

    Sinon, pour voir les paquets réseau qui sortent et rentrent, rien de tel que wireshark, ou tout simplement tcpdump. Par exemple dans ton cas :

    tcpdump -v -n -e icmp
    

    En espérant ne pas répondre trop à côté de a plaque :)

  • # Autre approche, toujours avec bash

    Posté par  . En réponse au message Problème avec les antislash et sed. Évalué à 4.

    Salut Kangs,

    je ne suis pas un spécialiste du shell, donc le reste est à prendre avec des pincettes :)

    • d'après le shebang, tu utilises bash
    • comme tu utilises le flag "/g" de sed, je suppose que tu veux remplacer toutes les occurrences et non pas seulement la première (même si dans ton cas précis ça ne change rien)

    Deux petits détails, à mon avis :

    • sed n'est pas ce que tu cherches je pense, car il s'attend à avoir une regex et non une chaine de caractères basique (comme le fait remarquer biband)
    • Je suis aussi d’accord avec biband sur un autre point : tu as des soucis "d'échappement". Àmha bash, ou n'importe quel shell d'ailleurs, ne t'aide pas trop sur ce point.

    Il faut noter que les doubles quotes (") et les simples quotes (') n'ont pas la même signification pour bash (cf. http://wiki.bash-hackers.org/syntax/quoting). Dans ton cas, tu aurais tout intérêt je pense à utiliser du strong quoting donc des simples quotes, pour éviter les problèmes liés au backslash, qui lui aussi a une signification spéciale.

    Pour la substitution en elle-même, si on considère que sed n'est pas la solution, et que tu utilises bash, ce dernier te permet de faire une substitution basique (http://tldp.org/LDP/abs/html/string-manipulation.html - "Substring replacement")

    Dernier point, je pense que le "exit" à la fin de ton script n'a pas d'effet particulier s'il n'y a plus de code derrière. Il n'est donc pas nécessaire dans ce cas.

    Le script pourrait alors s'écrire :

    #!/bin/bash
    string1='c:\windows\toto'
    string2=rien 
    
    echo "remplace '$string1' par '$string2'"
    echo ${string1//"$string1"/$string2}

    Résultat :

    remplace 'c:\windows\toto' par 'rien'
    rien
    
  • # mkfifo + tail -f ?

    Posté par  . En réponse au message exposer un script comme un service. Évalué à 3.

    Cela pourrait peut-être faire l'affaire :

    mkfifo mafifo
    tail -f mafifo | monscript &
    
    echo "input" > mafifo
    echo "input2" > mafifo
    

    mkfifo permet de créer un tube nommé : ton moyen de communication.
    Le tail -f permet d'éviter la "fin de fichier" qui survient lorsque le echo ferme son côté du tube.

    Si tu veux vraiment en faire quelque chose qui ressemble plus à un service, nohup peut t'intéresser aussi pour le rendre insensible à une déconnexion du terminal.

  • [^] # Re: Système de fichier ?

    Posté par  . En réponse au message Formater une clé USB non reconnue.... Évalué à 2. Dernière modification le 24 février 2014 à 11:13.

    La commande pour formater est mauvaise. On formate une partition, pas le disque entier. Donc plutot sdb1 que sdb.

    S'il existe une table de partition sur le device, alors je suis d'accord avec toi. Mais, ce n'est pas indispensable à priori, et sauf erreur, tu peux très bien formater directement celui-ci sans qu'il dispose d'une table de partition. Le système de fichier occupe alors la totalité de l'espace disponible et tu peux y accéder directement avec /dev/sdb par exemple.
    Comme une disquette il y a quelques années finalement ;)

    D'après [Wikipedia]

    Several partitioning schemes are used by pre-formatted devices. There are two main schemes used by vendors. First puts file system (most commonly FAT32) directly on the device without any partitions, effectively making it start from sector 0, without any additional boot sectors, headers or partitions. Second one, uses DOS partition table (and MBR code), with single (first) partition spanning entire device. […]

    Les fabricants de clés USB utiliseraient donc majoritairement, au choix, les 2 possibilités suivantes :

    • Un système FAT32 directement dès le premier secteur sans table de partition,
    • Une table de partition de type DOS, et une partition unique utilisant l'espace complet.
  • [^] # Re: Système de fichier ?

    Posté par  . En réponse au message Formater une clé USB non reconnue.... Évalué à 1.

    Elle n'est plus reconnue ailleurs non plus, ni la chaine ni Windows… (mais ça c'était prévisible ;) )

    Ça ne sent pas très bon tout ça :)

    Personnellement, vu le prix d'une clé USB aujourd'hui, je ne prendrais pas de risque avec une clé en laquelle je n'ai plus confiance : je la remplacerais.
    Quitte à continuer de chercher / bricoler par ailleurs sur celle qui est défectueuse :)

  • [^] # Re: Système de fichier ?

    Posté par  . En réponse au message Formater une clé USB non reconnue.... Évalué à 1.

    Est-ce que la clé fonctionne toujours sur la chaîne hifi, ou sur une autre machine / os ?

    Comme le suggère lolop, elle est peut-être défectueuse tout simplement :(

    • Par curiosité, quel résultat donne la commande suivante, quand la clé est branchée ? :
    stat /dev/sdb
    
    • En vérifiant qu'elle n'est pas déjà montée, on ne sait jamais (liste obtenue avec mount), tu peux tenter de remettre à zéro le premier secteur, puis recréer une table de partitions (mais ça sent aussi le "Aucun médium trouvé" à plein nez…)
    dd if=/dev/zero of=/dev/sdb bs=512 count=1
    fdisk /dev/sdb
      -> o w

    Attention encore une fois : si ces manips sont faites sur le mauvais disque, ça peut faire mal !

    • Enfin, es-tu sûr qu'il n'y a pas de messages d'erreur dans dmesg après l'affichage d'un "aucun médium trouvé" ?
  • # Système de fichier ?

    Posté par  . En réponse au message Formater une clé USB non reconnue.... Évalué à 2. Dernière modification le 23 février 2014 à 15:03.

    Bonjour,

    Que donnent les commandes :

    file -s /dev/sdb
    
    dd if=/dev/sdb bs=512 skip=1 | file -
    

    Chez moi, par exemple j'obtiens :

    /dev/sdb: DOS/MBR boot sector
    
    /dev/stdin: Microsoft Windows XP/VISTA bootloader BOOTMGR
    

    As-tu des messages d'erreurs d'entrées / sorties dans dmesg ?

    Sinon, si tu ne souhaites pas récupérer les éventuelles données sur ta clé, tu peux essayer de la formater en vfat par exemple pour repartir proprement :

    mkfs.vfat /dev/sdb

    Attention, évidemment :
    --> S'assurer que c'est bien ta clé USB qui est en /dev/sdb et non pas un autre disque !

  • # Ton nouvel ami : man

    Posté par  . En réponse au message Demande de confirmation sur un argument de la commande "scp". Évalué à 1.

    Bonjour,

    La plupart du temps, le plus simple est de regarder la page de manuel associée à la commande.

    Sur ma distribution par exemple, la commande man scp me donne entre autres :

    -p      Preserves modification times, access times, and modes from the original file.
    

    Donc pour répondre à ta question, cette commande permet en effet de conserver les dates et heures de modification, mais aussi les modes (Par exemple droits en écriture / lecture / exécution cf. man chmod).

    En revanche, je pense que le propriétaire et le groupe des fichiers copiés ne sont pas ceux de la machine depuis laquelle tu fais la copie, mais correspondent au compte que tu utilises pour te connecter à la machine distante via scp.

    Par exemple, si l'utilisateur toto qui veut copier le fichier fichier1 sur la machine host fait la commande suivante :

    scp -p fichier1 tutu@host:/tmp
    

    Alors le propriétaire du fichier1 copié sur host dans /tmp ne sera pas toto, mais tutu.
    La notion "d'utilisateur commun" n'existe donc pas.

    En espérant répondre à ta question

  • # lsb_release

    Posté par  . En réponse au message commande de reconnaissance de la distribution hôte. Évalué à 6.

    lsb_release pourrait probablement faire l'affaire :

    $ lsb_release -ds
    Ubuntu 13.04
    

    C'est peut-être même relativement standard :
    http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/lsbrelease.html