Netstat et variables
Résolu/Fermé
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
-
13 mai 2019 à 20:37
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 18 mai 2019 à 17:06
barnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 18 mai 2019 à 17:06
A voir également:
- Netstat et variables
- Netstat - Télécharger - Divers Utilitaires
- Netstat-an whatsapp ne fonctionne pas - Forum Windows
- Netstat -ano - Forum Windows
- Netstat 127.0.0.1 ✓ - Forum Réseau
- Powerpoint variables - Forum Powerpoint
4 réponses
trauqnej
Messages postés
154
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2022
23
14 mai 2019 à 00:44
14 mai 2019 à 00:44
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
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
14 mai 2019 à 03:34
14 mai 2019 à 03:34
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 }'
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
14 mai 2019 à 20:16
14 mai 2019 à 20:16
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.
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
15 mai 2019 à 13:42
15 mai 2019 à 13:42
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? ...
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
Modifié le 15 mai 2019 à 22:21
Modifié le 15 mai 2019 à 22:21
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
lEprofSonDkon
Messages postés
211
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
8 octobre 2022
13
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
Modifié le 16 mai 2019 à 06:07
Modifié le 16 mai 2019 à 06:07
2/ le XML se traite avec XSLT; sinon un grep et deux cut, ou un awk pas trop velu.
3,4/ RTFM : comme je l'ai montré, netstat dispose d'options de filtrage
5/ je ne connais pas l'API pastebin.
tu ne peux pas récupérer les données en ssh avec scp ?
3,4/ RTFM : comme je l'ai montré, netstat dispose d'options de filtrage
5/ je ne connais pas l'API pastebin.
tu ne peux pas récupérer les données en ssh avec scp ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
>
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
17 mai 2019 à 10:37
17 mai 2019 à 10:37
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é…
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
Modifié le 18 mai 2019 à 12:47
Modifié le 18 mai 2019 à 12:47
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.
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
18 mai 2019 à 12:57
18 mai 2019 à 12:57
C'est bon j'ai trouvé, j'ai enlevé toutes les double-quotes inutiles dans la commande curl.
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
Modifié le 18 mai 2019 à 15:23
Modifié le 18 mai 2019 à 15:23
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.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
18 mai 2019 à 17:05
18 mai 2019 à 17:05
Merci du retour.
Sinon pour éviter les "cut" :
;-)
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
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 919
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
18 mai 2019 à 17:06
18 mai 2019 à 17:06
Excellent ! Merci pour l'astuce.
14 mai 2019 à 20:17
Merci pour ta réponse, je vais étudier cela de plus près.