Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   Script Whois di più IP su file TXT o CSV (https://www.hwupgrade.it/forum/showthread.php?t=2898274)


spider81man 26-11-2019 15:40

Script Whois di più IP su file TXT o CSV
 
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 16:01

Se sei sotto linux usa il comando grep nel parsing

spider81man 26-11-2019 16:03

Quote:

Originariamente inviato da Kaya (Messaggio 46503431)
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 16: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 16: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 09: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-h...ine-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 09: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 10:09

Quote:

Originariamente inviato da Kaya (Messaggio 46504497)
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-h...ine-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 11:03

Allora ho creato il file "ip_resolver.sh"

Codice:

#!/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:

Codice:

chmod u+x ip_resolver.sh
Sempre sul Desktop è presente il file “ip_list” contenente gli indirizzi da risolvere.

Quindi eseguo lo scrip:

Codice:

./ip_resolver.sh
ma mi da il seguente errore:

Codice:

.ip_resolver.sh: comando non trovato
Dove sbaglio? Sto eseguendo tutto da UBUNTU.
Grazie

as2k3 27-11-2019 11:04

forse i permessi 775 devi dare al file

spider81man 27-11-2019 11:23

Quote:

Originariamente inviato da as2k3 (Messaggio 46504742)
forse i permessi 775 devi dare al file

Ecco cosa mi risponde

Codice:

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 11: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/no...d-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 11:46

Quote:

Originariamente inviato da Kaya (Messaggio 46504821)
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/no...d-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

Codice:

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 13:18

togli via quegli apici che non servono a nulla.

Kaya 27-11-2019 13:21

Questo è un modo:
Codice:

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

questo un altro

Codice:

#!/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 13:36

Quote:

Originariamente inviato da Kaya (Messaggio 46505104)
Questo è un modo:
Codice:

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

questo un altro

Codice:

#!/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

Codice:

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ì:
Codice:

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ì:

Codice:

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 13: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 14:09

Quote:

Originariamente inviato da Kaya (Messaggio 46505176)
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

Codice:

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

Codice:

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 14: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 14:40

Quote:

Originariamente inviato da Kaya (Messaggio 46505283)
è 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ì

Codice:

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ì

Codice:

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.


Tutti gli orari sono GMT +1. Ora sono le: 16:02.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.