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

Shell et commandes GNU Discussion :

Port en écoute et détection erreur réseau


Sujet :

Shell et commandes GNU

  1. #21
    Expert éminent
    Citation Envoyé par Florent42 Voir le message
    le read -t1 ne marche pas
    t'as essayé avec un espace entre -t et 1 ?

  2. #22
    Membre à l'essai
    idem le -t ou le -t 1 ou encore le -t1 ne marche pas

    des que je supprime cette option j'ai bien la trame découpée qui arrive

  3. #23
    Membre à l'essai
    J'ai modifié le code pour rassembler les 3 lignes dans une seule trame

    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
     
    #!/bin/bash
     
    host='xxx.xxx.xxx.xxx'
    port='xxxx'
    i=0
    j=0
     
    while true; do
       nc -w3 $host $port | while read line; do
            if [ $j -eq 0 ]
            then
            echo "Trame$i"
            fi
            if [ $j -lt 4 ]
            then
             echo ${line}
            partiel[$j]=${line}
            j=$(($j + 1))
            fi
            if [ $j -eq 3 ]
            then
             i=$(($i + 1))
            trame=$partiel[0]$partiel[1]$partiel[2]
            echo $trame
             j=0
            fi
       done
    done


    Le récupère bien mes 3 lignes par contre la concaténation ne marche pas, j'ai toujours seulement la 1ere ligne qui apparait.
    Plus génant : J'ai des espaces entre les chiffres qui apparaissent et j'ai l'impression qu ils sont changés par rapport a ce que le serveur envoi. En gros j'ai l'impression que Netcat supprime de lui meme des espaces vides...mais pour moi ces espaces définissent des valeurs vides mais bien présentes qd meme

  4. #24
    Expert éminent sénior
    Je comprends rien à ce que tu trafiques. Tu te compliques la vie.

    De plus,
    • faire une boucle infinie n'est pas génial.
    • Ton read ferait bien d'avoir l'option -r si tu ne veux pas avoir un résultat défiguré dès que la trame contient une contre-oblique "\".
    • Nombreuses sont les commandes qui suppriment les espaces; comme echo, par exemple; surtout si tu ne protèges pas tes variables.
    • La conduite crée un sous-processus chaque fois qu'elle est lancée.
      La commande suivante n'a donc aucun effet durable.
      Code :Sélectionner tout -Visualiser dans une fenêtre à part
      j=$(($j + 1))

      C'est évidemment pareil pour $i ou partiel[ ], détruits dès la sortie de la bulle du sous-processus.
    • Connais-tu les substitutions de processus <( ) ?
      Voici un exemple utile pour toi :
      Code :Sélectionner tout -Visualiser dans une fenêtre à part
      1
      2
      3
      4
      while IFS='' read -r ligne
      do 
       
      done < <(nc -w3 $host $port)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #25
    Membre à l'essai
    hello

    La trame n'aura jamais de caractères spéciaux de type "\". Il n y aura que des caractères alphanumérique classiques.

    La variable j ne sert qu a compter le nombre de ligne que je recois
    Vu que je me suis apercu que la trame contenait toujours 3 lignes, j'attends la 3eme ligne pour considérer que la trame est finie. Après j revient a 0. cette variable n'a pas vocation a être durable mais simplement etre sur que la trame est complète.

    La finalité de partielle est identique, aucune vocdation a etre conservée durablement.
    La partie pour l'instant que je n'ai pas intégré dans le script reste l'intégration dans la BDD mais d'autres choses sont a contrôler avant.

    Je ne connais pas spécialement, néanmoins par rapport a ton exemple après l'avoir fait, j'ai du mal a voir la différence?

    bon rapport a mon problème "je récupère bien mes 3 lignes par contre la concaténation ne marche pas, j'ai toujours seulement la 1ere ligne qui apparait."
    => trouvé en fait c'etait plus un problème d'affichage sur prompt qu'autre chose puisque si j'envoi la variable dans un fichier, la tout est complet

    Par contre j'ai toujours mon problème qu'initialement j'avais des espaces qui sont supprimés

  6. #26
    Membre à l'essai
    bon c'est bon pour mon problème d'espace c'était simplement les " " qui manquait autour de ma variable maintenant ca marche

    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
    i=0
    j=0
    IFS=""
     
    while true; do
       while read -r line; do
            if [ $j -eq 0 ]
            then
            echo "Trame $i"
            fi
            if [ $j -lt 4 ]
            then
             echo "${line}"
            partiel[$j]=$line
            j=$(($j + 1))
            fi
            if [ $j -eq 3 ]
            then
             i=$(($i + 1))
            trame="${partiel[0]} ${partiel[1]} ${partiel[2]}"
            origine=$(echo ${trame} | cut -c2-3)
            mysql -uuser -pmdp -e "INSERT INTO jou.t VALUES ('', '${trame}','$origine','');"
             j=0
            fi
       done < <(nc -w3 $host $port)
    done


    Reste maintenant une autre chose :
    comment gérer la perte du réseau?

###raw>template_hook.ano_emploi###