Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
manipulation de texte sous bash
Envoyé par: klipper

Bonjour,
je tente de faire une petit script qui a pour objectif de m'afficher les partages samba de chacun des PC de mon réseau. pour ce, je commence par faire un scan sur le port 139 (nmap) et pour chaque connections ouvertes (partages anonymous), je visualise le nom netbios (nmblookup). ceci fais, je recupère la liste des partages (smbclient)

tout ca, ca marche bien en manuel mais je voulais automatiser la chose :

#!/bin/sh
for i in `nmap -sS 192.168.2-254 -p139 --open | grep Interesting | cut -c 22-36`; do
j=`basename $i :`;
nmblookup -A $j

done


nmap me retourne un truc du genre "interesting ports on <adresse ip>:" avec d'autres infos en dessous, je récupère la bonne ligne avec grep, j'enlève le debut de la ligne avec cut, puis je vire les ":" avec basename.
au final, j'ai l'adresse IP dans la variable j.
enssuite nmblookup m'affiche un truc du style:

Looking up status of 192.168.0.3
TOTO <00> - B <ACTIVE>
MSHOME <00> - <GROUP> B <ACTIVE>
TOTO <20> - B <ACTIVE>
MSHOME <1e> - <GROUP> B <ACTIVE>
MSHOME <1d> - B <ACTIVE>
..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>

MAC Address = 00-40-D0-XX-XX-XX


et je souhaite lancer la commande

smbclient -A FIFI -I 192.168.0.3


j'ai deja l'adresse ip dans j mais comment récupérer TOTO ?
je pensais récupérer systématiquement la seconde ligne puis me débrouiller avec cut et basename mais pas moyen de récupérer la dite ligne.

j'ai regardé du coté de "sed" mais ca serait du chinois que je comprendrais mieux.
une idée ?

Poste le Monday 15 October 2007 13:21:16
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: oudoubah

Citation
klipper
Looking up status of 192.168.0.3
TOTO <00> - B
<ACTIVE>
MSHOME <00> - <GROUP>
B <ACTIVE>
TOTO <20> - B
<ACTIVE>
MSHOME <1e> - <GROUP>
B <ACTIVE>
MSHOME <1d> - B
<ACTIVE>
..__MSBROWSE__. <01> - <GROUP>
B <ACTIVE>

MAC Address = 00-40-D0-XX-XX-XX


et je souhaite lancer la commande

smbclient -A FIFI -I 192.168.0.3

#!/bin/sh
for i in `nmap -sS 192.168.2-254 -p139 --open | grep Interesting | cut -c 22-36`; do
 j=`basename $i :`;
 nmblookup -A $j 2>&1 | awk -F\< '/^Looking up status of/ {getline ; print "smbclient -A" $1 " -I " ip}' ip=$j | sh

done

Je n'ai pas testé, mais la ligne commençant par nmblookup devrait exécuter la commande "smbclient -A FIFI -I 192.168.0.3"

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Monday 15 October 2007 17:50:55
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: tuxce

salut
mblookup -A adresse_ip 2>/dev/null | grep ACTIVE | awk '{print $1}' | head -1
devrait te récupérer le nom de la première ligne.

Poste le Monday 15 October 2007 18:07:24
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: klipper

cool plein de commandes que je ne connaissait pas !
je regardes ca des que j'ai le temps, merci !

ps: je me suis trompé, c'etait "smbclient -LTOTO -I <ip>" non pas "FIFI"

Poste le Monday 15 October 2007 19:08:03
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: klipper

ca fonctionne par contre je suis curieux, mon interprétation est elle bonne ?

pour "mblookup -A adresse_ip 2>/dev/null | grep ACTIVE | awk '{print $1}' | head -1"

2>/dev/null
ca c'est pour virer les erreurs

grep ACTIVE
ca c'est pour virer la ligne de l'adresse mac

awk '{print $1}'
pour récupérer juste le premier mot (TOTO, MSHOME...)

head -1
pour récupérer la première ligne (l'inverse de tail j'imagine)


pour " nmblookup -A $j 2>&1 | awk -F\< '/^Looking up status of/ {getline ; print "smbclient -A" $1 " -I " ip}' ip=$j | sh"
(un poil plus compliqué)

getline prends la première ligne je pense mais je n'ai pas ce programme

Merci à vous deux en tout cas. je posterais mon script completetement terminé



Poste le Thursday 18 October 2007 22:43:17
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: klipper

#!/bin/sh
for i in `nmap -sS 172.27.48.1-254 -p139 --open | grep Interesting | cut -c 22-36`; do
 ip=`basename $i :`;
 netbiosname=`nmblookup -A $ip 2>/dev/null | grep ACTIVE | awk '{print $1}' | head -1`
 echo "$netbiosname ($ip) :"
 smbclient -N -L$netbiosname -I $ip 2>/dev/null | grep Disk
done

et hop, coucou les partages windowsiens

Poste le Thursday 18 October 2007 22:55:42
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: oudoubah

Utiliser grep avant awk, c'est comme utiliser cat avant sed, awk ou grep : ça fait une commande de plus inutile

Tu peux simplifier ça :
netbiosname=`nmblookup -A $ip 2>/dev/null | grep ACTIVE | awk '{print $1}' | head -1`

comme ça :
netbiosname=`nmblookup -A $ip 2>/dev/null | awk '/ACTIVE/ {print $1 ; exit 0} '

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Friday 19 October 2007 09:54:57
Répondre     Citer    
Re: manipulation de texte sous bash
Envoyé par: klipper

oki, je vais me renseigner sur awk pour la prochaine fois,

merci

Poste le Saturday 20 October 2007 19:37:38
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
manipulation de texte sous bash
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons