Netstat et variables

[Résolu/Fermé]
Signaler
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
-
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
-
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
146
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
16 avril 2021
23
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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510
Bonjour,

Merci pour ta réponse, je vais étudier cela de plus près.
Messages postés
209
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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510 >
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021

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
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 291 >
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021

#! /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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510 >
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021

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
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 291 >
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021

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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510 >
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021

Rien ne m'oblige à passer par dash, je vais modifier le shebang pour bash.
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510
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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510
C'est bon j'ai trouvé, j'ai enlevé toutes les double-quotes inutiles dans la commande curl.
Messages postés
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510
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
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 291
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
13650
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
4 août 2021
4 510 >
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021

Excellent ! Merci pour l'astuce.