Netstat et variables [Résolu/Fermé]

Signaler
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
-
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
-
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

4 réponses

Messages postés
143
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
14 mai 2019
21
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
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
Bonjour,

Merci pour ta réponse, je vais étudier cela de plus près.
Messages postés
213
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
27 septembre 2019
14
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 }'
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327 >
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020

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.
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020
5 251 >
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020

#! /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}" …
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327 >
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020

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.
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020
5 251 >
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020

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…
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327 >
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020

Rien ne m'oblige à passer par dash, je vais modifier le shebang pour bash.
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
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.”
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
C'est bon j'ai trouvé, j'ai enlevé toutes les double-quotes inutiles dans la commande curl.
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327
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.”
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020
5 251
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

;-)
Messages postés
12636
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
5 juillet 2020
3 327 >
Messages postés
35015
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 juillet 2020

Excellent ! Merci pour l'astuce.