PDA

View Full Version : Script Whois di più IP su file TXT o CSV


spider81man
26-11-2019, 14:40
Ciao a tutti,
ho un file .txt, ricavato da un file CSV, con all'interno degli IP, adesso dovrei fare il Whois di ogni IP ma, del WHOIS, mi servirebbe SOLO la parte in cui mi dice l'Internet Service Provider, quindi non tutte le informazioni.
Abbiamo creato un file .bat che lo fa ma genera tutte le informazioni e non ci serve.
Qualcuno potrebbe aiutarci in tal senso?
Grazie

Kaya
26-11-2019, 15:01
Se sei sotto linux usa il comando grep nel parsing

spider81man
26-11-2019, 15:03
Se sei sotto linux usa il comando grep nel parsing

Ciao,
si potrei farlo sotto LINUX, mi potrestmi mettere per bene il comando, perdonami sono un po impedito su queste cose :P

Kaya
26-11-2019, 15:43
Puoi farlo anche sotto windows, col porting di grep sotto win32.

Non ho idea di cosa sottoporti: il comando è "grep" e se gli passi i parametri farà quello che gli dici...
Ma io non ho la più pallida idea di cosa gli passi quindi potrei dirti
grep "IP"
ma non ho idea se su quella riga passi la parola IP...

spider81man
26-11-2019, 15:48
Metti un file TXT con le segnueti righe:

192.198.1.1;32980 (dopo il ";" è la porta)
192.198.1.2;19302
192.198.1.3;32980
192.198.1.4;19302
192.198.1.5;32980
192.198.1.6;19302

Che comando dovrei dare secondo te per far leggere il file, fare fare il WOHIS e far stampare SOLO l'ISP accanto all'IP?

Kaya
27-11-2019, 08:01
Io ti do i suggerimenti.. lo script completo te lo lascio fare a te.
Parliamo in ambiente linux..
Step uno leggere il file ( https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ )
Step due passarlo al comando whois (se esegui solo il whois ti darà l'elenco dei parametri, credo che il -c sia quello che ti serve: trova la corrispondenza più specifica contenente un attributo mnt-irt)

Quello che non capisco è a cosa ti serva la porta in quel file... se devi troncarla basta usare il comando "cut"

spider81man
27-11-2019, 08:12
Cercando ho trovato questa funzione

#!/bin/bash
while read ip
do
whois -r $ip
done<ip_list

a quanto ho capito devo

1) creare un file chiamato ip_list e metterci gli indirizzi IP
2) creare questo script ".sh" ed eseguirlo.

spider81man
27-11-2019, 09:09
Io ti do i suggerimenti.. lo script completo te lo lascio fare a te.
Parliamo in ambiente linux..
Step uno leggere il file ( https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/ )
Step due passarlo al comando whois (se esegui solo il whois ti darà l'elenco dei parametri, credo che il -c sia quello che ti serve: trova la corrispondenza più specifica contenente un attributo mnt-irt)

Quello che non capisco è a cosa ti serva la porta in quel file... se devi troncarla basta usare il comando "cut"

Guarda perdonami continuo a non capire come fare :D :D :D
La posta potrebbe servirmi per dei controlli ma la posso anche eliminare.
Ho creato un file "log_test.txt" dove ci sono gli IP elencati sopra, come posso fare ti prego aiutami.

spider81man
27-11-2019, 10:03
Allora ho creato il file "ip_resolver.sh"

#!/bin/bash
for ip in ‘cat ip_list.txt’
do
echo $ip
‘whois $ip >> whois-results.txt’
done


Da shell di Linux, prima di eseguire il file bash, sono andato sul desktop ed ho dato le autorizzazioni al file stesso:

chmod u+x ip_resolver.sh

Sempre sul Desktop è presente il file “ip_list” contenente gli indirizzi da risolvere.

Quindi eseguo lo scrip:

./ip_resolver.sh

ma mi da il seguente errore:

.ip_resolver.sh: comando non trovato

Dove sbaglio? Sto eseguendo tutto da UBUNTU.
Grazie

as2k3
27-11-2019, 10:04
forse i permessi 775 devi dare al file

spider81man
27-11-2019, 10:23
forse i permessi 775 devi dare al file

Ecco cosa mi risponde

root@Francesco-Latitude-E6230:/home/cesco/Scrivania# chmod 775 ip_resolver.sh
root@Francesco-Latitude-E6230:/home/cesco/Scrivania# ./ip_resolver.sh
bash: ./ip_resolver.sh: /bin/bash^M: interprete errato: File o directory non esistente

Kaya
27-11-2019, 10:38
Perchè hai creato il file in windows (il .sh) e poi lo hai messo in linux.
E si porta dietro la "sporcaria" dei terminatori.

Così risolvi:
https://www.caronteconsulting.com/notizie/how-to/bin-bash-bad-interpreter/

Oppure fai prima a prendere l'editor di linux (va bene il gedit) e cancellare e mettere i ritorni a capo correttamente

spider81man
27-11-2019, 10:46
Perchè hai creato il file in windows (il .sh) e poi lo hai messo in linux.
E si porta dietro la "sporcaria" dei terminatori.

Così risolvi:
https://www.caronteconsulting.com/notizie/how-to/bin-bash-bad-interpreter/

Oppure fai prima a prendere l'editor di linux (va bene il gedit) e cancellare e mettere i ritorni a capo correttamente

Allora ho ricreato il file da gedit, ora me lo fa lanciare ma mi da quest'altro errore

root@Francesco-Latitude-E6230:/home/cesco/Scrivania# ./ip_resolver.sh
‘cat
./ip_resolver.sh: riga 5: ‘whois: comando non trovato
Ip_list.txt’
./ip_resolver.sh: riga 5: ‘whois: comando non trovato
root@Francesco-Latitude-E6230:/home/cesco/Scrivania#

whois è isntallato

Kaya
27-11-2019, 12:18
togli via quegli apici che non servono a nulla.

Kaya
27-11-2019, 12:21
Questo è un modo:
#!/bin/bash
for ip in $(cat ip_list.txt)
do
echo $ip
whois $ip >> whois-results.txt
done

questo un altro


#!/bin/bash
filename='ip_list.txt'
while read ip; do
whois $ip
done < $filename


Non li ho provati ma dovrebbero essere giusti

spider81man
27-11-2019, 12:36
Questo è un modo:
#!/bin/bash
for ip in $(cat ip_list.txt)
do
echo $ip
whois $ip >> whois-results.txt
done

questo un altro


#!/bin/bash
filename='ip_list.txt'
while read ip; do
whois $ip
done < $filename


Non li ho provati ma dovrebbero essere giusti

Guarda ho fatto così e mi funziona


for ip in $(cat ip_list.txt)
do
echo -n "$ip "
whois $ip | grep -Po '^NetName:\s+\K.*'
done > whois-results.txt


e mi tira fuori SOLO il "Netname" se il file "ip_list.txt" è così:

192.198.1.1
192.198.2.1
192.198.1.2
192.198.2.2
192.198.1.3


adesso invece mi piacerebbe fare la stessa cosa SE il file "ip_list.txt" fosse così:


01/01/2019 17:57;192.198.1.1;32980 ;192.198.2.1;32980 (Data ed ora;IP;PORTA;IP;PORTA)
01/01/2019 17:57;192.198.1.2;19302;192.198.2.2;19302
01/01/2019 17:57;192.198.1.3;32980;192.198.2.3;19302
01/01/2019 17:57;192.198.1.4;19302;192.198.2.4;19302
01/01/2019 17:57;192.198.1.5;32980;192.198.2.5;19302
01/01/2019 17:57;192.198.1.6;19302192.198.6.6;19302


ideee?
Grazie

Kaya
27-11-2019, 12:50
anzichè cat, usa awk
"awk -F; '{print $1,$3}' ip_list.txt"
Dando per scondata che sia sempre il secondo e quarto campo separati da ;
Ma a me sfugge perchè hai un input così.. non sarebbe più semplice lavorare sul come ottieni tale lista?

spider81man
27-11-2019, 13:09
anzichè cat, usa awk
"awk -F; '{print $1,$3}' ip_list.txt"
Dando per scondata che sia sempre il secondo e quarto campo separati da ;
Ma a me sfugge perchè hai un input così.. non sarebbe più semplice lavorare sul come ottieni tale lista?

Gurda ho modificato cosi


for ip in $(awk -F; '{print $1,$3}' ip_list.txt)
do
echo -n "$ip "
whois $ip | grep -Po '^NetName:\s+\K.*'
done > whois-results.txt


e mi ha risposto cosi

root@Francesco-Latitude-E6230:/home/cesco/Scrivania/Ip_Resolver2# ./ip_resolver.sh
awk: l'opzione richiede un argomento -- F
Uso: awk [opzioni in stile POSIX o GNU] -f file-prog. [--] file ...
Usage: awk [opzioni in stile POSIX o GNU] [--] 'programma' file ...
Opzioni POSIX: opzioni lunghe GNU: (standard)
-f fileprog --file=file-prog.
-F fs --field-separator=fs
-v var=valore --assign=var=valore
Opzioni brevi: opzioni lunghe GNU: (estensioni)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-D[file] --debug[=file]
-e 'testo-del-programma' --source='testo-del-programma'
-E file --exec=file
-g --gen-pot
-h --help
-i include_file --include=include_file
-l libreria --load=libreria
-L[fatal|invalid] --lint[=fatal|invalid]
-M --bignum
-N --use-lc-numeric
-n --non-decimal-data
-o[file] --pretty-print[=file]
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version

Per segnalare problemi, vedi nodo `Bugs' in `gawk.info', oppure la
sezione `Reporting Problems and Bugs' nella versione a stampa.
Problemi di traduzione, segnalare ad: azc100@gmail.com.

gawk è un linguaggio per scandire e processare espressioni.
Senza parametri, legge da 'standard input' e scrive su 'standard output'.

Esempi:
gawk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' /etc/passwd
./ip_resolver.sh: riga 1: {print $1,$3}: comando non trovato


Dove sbaglio

Kaya
27-11-2019, 13:32
è il ; che rompe, mettici un escape davanti

awk -F\; '{print $1,$3}' ip_list.txt

Un consiglio: senza ogni volta chiedere AIUTO AIUTO, ragiona su quello che stai facendo. :)

spider81man
27-11-2019, 13:40
è il ; che rompe, mettici un escape davanti

awk -F\; '{print $1,$3}' ip_list.txt

Un consiglio: senza ogni volta chiedere AIUTO AIUTO, ragiona su quello che stai facendo. :)

ahahah si hai ragione ma sono in palla ed ho bisogno di aiuto :P

facendo così


for ip in $(awk -F\; '{print $1,$3}' ip_list.txt)
do
echo -n "$ip "
whois $ip | grep -Po '^NetName:\s+\K.*'
done > whois-results.txt


il file whois-results.txt me lo da così

01/01/2019 17:57 32980 01/01/2019 17:57 19302 01/01/2019 17:57 32980 01/01/2019 17:57 19302 01/01/2019 17:57 32980 01/01/2019 17:57 19302

In pratica TOGLIE gli IP e poi non fa il whois.

Kaya
27-11-2019, 14:14
Ripeto: pensa e rifletti.
Se sei in palla non vai da nessuna parte, manco con la pappa pronta.
Magari awk inizia a contare da 0, ma 0 corrisponde a tutta la linea e le colonne invece partono da 1... quindi anziche print $1 potresti..

spider81man
27-11-2019, 14:19
Guarda ho provato ad aggiungere un altro campo, quello "Country" e va bene sono che mi va a capo modifincando cosi

whois $ip | grep -Po '^NetName:\s+\K.*' && whois $ip | grep -Po '^Country:\s+\K.*'

Come faccio a non andare a capo dopo il NetName?
Grazie

Kaya
27-11-2019, 14:39
Il comando 'tr' è tuo amico https://pubs.opengroup.org/onlinepubs/009695399/utilities/tr.html
tr -d '\r'

antonio338
14-01-2020, 22:23
https://www.nirsoft.net/utils/ipnetinfo.html
Copi incolli gli IP.
Esporti in CSV.
Con un foglio elettronico tieni solo le colonne di tuo interesse.