Netstat et variables
Résolu
barnabe0057
Messages postés
17074
Statut
Contributeur
-
barnabe0057 Messages postés 17074 Statut Contributeur -
barnabe0057 Messages postés 17074 Statut Contributeur -
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.
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
Athlon X4 750K Quad Core
8 Go DDR3 1866 Mhz
A voir également:
- Netstat et variables
- Netstat - Télécharger - Divers Utilitaires
- Probleme avec netstat - Forum Windows
- Commande netstat - Forum Programmation
- Netstat 127.0.0.1 ✓ - Forum Réseau
- Nuage de points excel 4 variables ✓ - Forum Bureautique
4 réponses
Bonjour,
Je ferais un truc du genre :
---
Trauqnej
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
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 à
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 }'
Salut,
Je vais tenter d'expliquer ce que je veux faire, voilà les grandes lignes : des personnes de mon entourage se connectent via SSH sur mon serveur, je voudrais avoir le statut en temps réel (connecté ou non connecté), pour cela je voudrais créer une sorte de monitoring qui me dira quelle adresse est connectée sur quel port.
Ensuite pour la partie technique, j'envisage d'utiliser NETSTAT pour détecter les tunnels SSH, puis pour chaque résultat pertinent je vais envoyer une requête (via CURL) pour créer un Pastebin contenant l'adresse et le port concerné.
Ensuite depuis Windows, un script viendra lire mes Pastebin pour m'indiquer le statut de mes contacts.
Je vais tenter d'expliquer ce que je veux faire, voilà les grandes lignes : des personnes de mon entourage se connectent via SSH sur mon serveur, je voudrais avoir le statut en temps réel (connecté ou non connecté), pour cela je voudrais créer une sorte de monitoring qui me dira quelle adresse est connectée sur quel port.
Ensuite pour la partie technique, j'envisage d'utiliser NETSTAT pour détecter les tunnels SSH, puis pour chaque résultat pertinent je vais envoyer une requête (via CURL) pour créer un Pastebin contenant l'adresse et le port concerné.
Ensuite depuis Windows, un script viendra lire mes Pastebin pour m'indiquer le statut de mes contacts.
je regarde le
sur Arch, je n'ai pas
adapté facilement des exemples du
peut-on se passer de
mande
netstat, et je me dis qu'un filtre externe n'est peut-être pas nécessaire.
sur Arch, je n'ai pas
netstat, l'équivalent est
ss.
adapté facilement des exemples du
man:
ss --no-header --numeric --options state established dport = :ssh | awk '{split($NF,a,":"); print a[1]}'
peut-on se passer de
awk? ...
Merci pour ton aide, la commande ss me donne des résultats que je ne sais pas interpréter, je vais rester sur netstat.
Très bien on avance, maintenant je vais expliquer la suite :
1) mon script récupère la liste de mes pastebin, ça je sais faire grâce à cURL et à l'API Pastebin
2) je récupère le contenu du premier pastebin, le contenu est de la forme $adresseip:$port
Pour récupérer le contenu, je dois récupérer d'abord la paste_key, as-tu une idée ?
3) je cherche une occurrence de $adresseip dans les résultats de cette commande :
4) je cherche une occurrence de $port dans les résultats de cette commande :
5) si les conditions 3 et 4 sont vraies alors cela signifie qu'un de mes contacts est connecté, dans le cas contraire je dois effacer le pastebin en passant par cURL et l'API Pastebin
J'ai besoin de toi pour les étapes 2, 3, 4, 5
Très bien on avance, maintenant je vais expliquer la suite :
1) mon script récupère la liste de mes pastebin, ça je sais faire grâce à cURL et à l'API Pastebin
curl --max-time 30 --tlsv1.2 -s -d "api_dev_key=ef2fbf05c23084e16a3e32xxxxxxxxxx" -d "api_user_key=0a9cde34c5664632dc8cbdxxxxxxxxxx" -d "api_option=list" "https://pastebin.com/api/api_post.php"
<paste> <paste_key>ziNKA0Y0</paste_key> <paste_date>1557948491</paste_date> <paste_title>[IDEAPAD-PC]</paste_title> <paste_size>18</paste_size> <paste_expire_date>0</paste_expire_date> <paste_private>0</paste_private> <paste_format_long>None</paste_format_long> <paste_format_short>text</paste_format_short> <paste_url>https://pastebin.com/ziNKA0Y0</paste_url> <paste_hits>56</paste_hits> </paste> <paste> <paste_key>KuJgybEd</paste_key> <paste_date>1557396624</paste_date> <paste_title>Mon hash</paste_title> <paste_size>95</paste_size> <paste_expire_date>0</paste_expire_date> <paste_private>0</paste_private> <paste_format_long>None</paste_format_long> <paste_format_short>text</paste_format_short> <paste_url>https://pastebin.com/KuJgybEd</paste_url> <paste_hits>6</paste_hits> </paste>
2) je récupère le contenu du premier pastebin, le contenu est de la forme $adresseip:$port
Pour récupérer le contenu, je dois récupérer d'abord la paste_key, as-tu une idée ?
3) je cherche une occurrence de $adresseip dans les résultats de cette commande :
netstat -n | awk '/ESTABLISHED/ && /163.172.xxx.xxx:22/ { print $5 }'
4) je cherche une occurrence de $port dans les résultats de cette commande :
netstat -n | awk '/ESTABLISHED/ && /127.0.0.1/ { print $5 }'
5) si les conditions 3 et 4 sont vraies alors cela signifie qu'un de mes contacts est connecté, dans le cas contraire je dois effacer le pastebin en passant par cURL et l'API Pastebin
J'ai besoin de toi pour les étapes 2, 3, 4, 5
Salut,
À partir de là, tu boucles sur chaque ligne de sortie et tu passes ça à cURL (via l'affichage "raw") :
Pour récupérer le contenu, je dois récupérer d'abord la paste_key, as-tu une idée ?En partant du fichier donné en exemple :
$ grep -Po '<paste_key>\K[^<]*' pastebin.xml
ziNKA0Y0
KuJgybEd
À partir de là, tu boucles sur chaque ligne de sortie et tu passes ça à cURL (via l'affichage "raw") :
$ curl "https://pastebin.com/raw/ziNKA0Y0"
41.108.53.56:21180
$ curl "https://pastebin.com/raw/KuJgybEd"
4e d7 7b dd 14 5e e2 81 7b 63 ee 71 75 9d d3 9b db 51 7f 8c 72 1f af e1 d6 60 8b 92 68 5a 7f b5
dans le cas contraire je dois effacer le pastebin en passant par cURL et l'API PastebinDe la même façon que tu as pu récupérer ta liste via l'API, tu as dans la doc de l'API les explications pour supprimer le pastebin désiré…
Toujours pas moyen d'afficher mes paste_key à l'aide de la boucle.
Pourtant si je tape la commande curl directement dans le terminal j'obtiens bien la liste voulue.
#! /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.
Voilà mon script est terminé, je peux passer le sujet en "résolu" :
Merci à tous les trois pour votre aide, je vous souhaite une excellente journée.
#! /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.
Merci pour ta réponse, je vais étudier cela de plus près.