Menu

Netstat et variables [Résolu]

Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
- - Dernière réponse : barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
- 18 mai 2019 à 17:06
Bonjour,

Sur ma Dedibox, je voudrais traiter chaque résultat renvoyé par la commande netstat que voici :



1) Quelle boucle choisir ?
2) Comment récupérer les adresses ip et les ports dans des variables ?

Merci d'avance pour votre aide.


Configuration: Win 7 Pro SP1 64bits
Athlon X4 750K Quad Core
8 Go DDR3 1866 Mhz

Afficher la suite 

Votre réponse

4 réponses

Messages postés
143
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
14 mai 2019
20
0
Merci
Bonjour,
Je ferais un truc du genre :
netstat -nla | grep "ESTABLISHED" | while read a b c d e f ; do IP=$(echo $e |cut -d: -f1 ); PORT=$(echo $e |cut -d: -f2 );echo $PORT-$IP; done


---
Trauqnej
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 -
Bonjour,

Merci pour ta réponse, je vais étudier cela de plus près.
Commenter la réponse de trauqnej
Messages postés
171
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
23 mai 2019
6
0
Merci
salut,

il faut être plus précis sur ce que tu veux faire.

de toute façon, laisse tomber le shell, tous ces pipes prennent beaucoup de temps.
passe directement à
awk
:
netstat ... | awk '/ESTABLISHED/ && /163\.172\....\..../{ là, tu fais tes trucs avec $3 et $4 }'
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 > zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
-
Merci beaucoup zipe31.

Je commence l'écriture du script et je me heurte au premier problème, faire une boucle qui fonctionne.

Voilà mon script :

#! /bin/sh

pastebin=--max-time 30 --tlsv1.2 -s -d "api_dev_key=ef2fbf05c23084e16a3exxxxxxxxxxxx" -d "api_user_key=0a9cde34c5664632dc8cxxxxxxxxxxxx"

# boucle sur tous mes pastebin
for key in $( curl $pastebin -d "api_option=list" "https://pastebin.com/api/api_post.php" | grep -Po '<paste_key>\K[^<]*' )

do

echo "$key"

done

J'ai mis quelques options de curl dans une variable $pastebin car je m'en reservirai plus loin dans le script mais on dirait que ça pose problème, sans compter une autre erreur dans mon for que je n'arrive pas à trouver.
zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
3546 > barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
-
#! /bin/sh
C'est quel shell qui est utilisé ? (
readlink -f /bin/sh
)

Avec des quotes autour de la variable ce serait mieux :
pastebin='--max-time 30 --tlsv1.2 -s -d "blabla" -d "blabla"'


Idem sans oublier les accolades ;-(

for key in $( curl "${pastebin}" …
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 > zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
-
readlink -f /bin/sh me répond /bin/dash

J'ai enlevé les double quotes comme ceci : for key in $( curl ${pastebin} …
Sinon j'avais une erreur, je pense que ça faisait double-emploi avec les quotes de $pastebin

Je n'ai plus d'erreur, seulement mon echo ne m'affiche rien, donc je ne suis pas en mesure de contrôler si tout se passe bien.
zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
3546 > barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
-
Donc quelque peu différent du shell bash.
Je ne bosse pas avec dash, donc il se peut que dans mes exemples, certaines syntaxes ne soient pas comprises par dash…
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 > zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
-
Rien ne m'oblige à passer par dash, je vais modifier le shebang pour bash.
Commenter la réponse de lEprofSonDkon
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885
0
Merci
Toujours pas moyen d'afficher mes paste_key à l'aide de la boucle.

#! /bin/bash

# je crée une variable contenant mes identifiants pour l'API Pastebin
pastebin='--max-time 30 --tlsv1.2 -s -d "api_dev_key=ef2fbf05c23084e16a3exxxxxxxxxxxx" -d "api_user_key=0a9cde34c5664632dc8cxxxxxxxxxxxx"'

# je boucle pour récupérer la liste de mes paste_key
for key in $( curl ${pastebin} -d "api_option=list" "https://pastebin.com/api/api_post.php" | grep -Po '<paste_key>\K[^<]*' )

do
echo "$key"
done

sleep 2


Pourtant si je tape la commande curl directement dans le terminal j'obtiens bien la liste voulue.


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 -
C'est bon j'ai trouvé, j'ai enlevé toutes les double-quotes inutiles dans la commande curl.
Commenter la réponse de barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885
0
Merci
Voilà mon script est terminé, je peux passer le sujet en "résolu" :

#! /bin/bash

# je définis les paramètres de cURL
opts='-s --max-time 30 --tlsv1.2'

# je définis l'API à utiliser
api=https://pastebin.com/api/api_post.php

# je crée une variable contenant mes identifiants pour l'API Pastebin
pastebin='-d api_dev_key=ef2fbf05c23084e16a3exxxxxxxxxxxx -d api_user_key=0a9cde34c5664632dc8cxxxxxxxxxxxx'

# je boucle pour récupérer la liste de mes paste_key publiques
for key in $( curl $opts $pastebin -d api_option=list $api | grep -Po '<paste_key>\K[^<]*' | grep -v "AhNgsVqW" | grep -v "KuJgybEd" )
do
        status=0

        # je récupère l'adresse ip et le port
        ip=$(curl $opts "https://pastebin.com/raw/$key" |cut -d: -f1 -s)
        port=$(curl $opts "https://pastebin.com/raw/$key" |cut -d: -f2 -s)

        # je temporise au cas où le tunnel ne serait pas totalement établi
        sleep 30

        # je compare le pastebin avec les tunnels existants
        netstat -nt4 | grep "163.172.xxx.xxx:22" | grep "$ip" && status=$((status+1))
        netstat -nt4 | grep "127.0.0.1" | grep "$port" && status=$((status+1))

        # si le pastebin est obsolète, je le supprime
        if [ $status -lt 2 ]
        then
                curl $opts $pastebin -d api_paste_key=$key -d api_option=delete $api
        fi
done


Merci à tous les trois pour votre aide, je vous souhaite une excellente journée.


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
3546 -
Merci du retour.

Sinon pour éviter les "cut" :
$ ip="41.108.53.56:21180"

$ echo "${ip}"
41.108.53.56:21180

$ echo "${ip%:*}"
41.108.53.56

$ echo "${ip#*:}"
21180

;-)
barnabe0057
Messages postés
12215
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
21 mai 2019
1885 > zipe31
Messages postés
36529
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
23 mai 2019
-
Excellent ! Merci pour l'astuce.
Commenter la réponse de barnabe0057