Come posso risolvere un nome host in un indirizzo IP in uno script Bash?

Qual è il modo più conciso per risolvere un nome host in un indirizzo IP in uno script Bash? Sto utilizzando Arch Linux .

Commenti

  • Peccato che getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> risponda è da qualche parte laggiù vicino al fondo. ‘ è il più semplice, non richiede pacchetti aggiuntivi ed è più facile da analizzare anche da uno script Bash.
  • @ 0xC0000022L: La nuova vergogna è che quella risposta suggerisce getent hosts somehost, quando lo esegue mentre su somehost produrrà un indirizzo IPv6 , che è diverso dalla maggior parte degli altri strumenti (ping, ssh almeno) risolve i nomi e rompe alcune cose. Utilizza ahosts invece di hosts.
  • @j_random_hacker: che ti impedisce di richiedere specificamente IPv4 (ahostsv4) o indirizzi IPv6 (ahostsv6)? Personalmente non trovo nulla di sbagliato nella richiesta non specifica che restituisce IPv6. Il tuo codice dovrebbe essere preparato. IPv6 esiste da più di 20 anni.
  • @ 0xC0000022L: nessuno ” mi tiene ” da facendo ciò, ma la risposta suggerisce specificamente hosts e finora 4 persone hanno votato positivamente il commento di vinc17 ‘ che esprime il dolore causato da ” improvvisamente IPv6 “. Essere preparati per IPv6 non è sempre il problema: molti programmi hanno bisogno di un modo per determinare se due nomi / indirizzi si riferiscono allo stesso host. Possono utilizzare una semplice corrispondenza di stringhe oppure devono conoscere molto sulla rete per trovare la risposta ” true “. Questultimo è un campo minato, quindi molti programmi e sistemi di terze parti – sui quali non ho alcun controllo – usano il primo.

Risposta

Puoi utilizzare getent, fornito con glibc (quindi quasi certamente ce lhai su Linux) . Questo si risolve utilizzando gethostbyaddr / gethostbyname2, quindi controllerà anche /etc/hosts / NIS / ecc:

getent hosts unix.stackexchange.com | awk "{ print $1 }" 

Oppure, come ha detto Heinzi di seguito, puoi utilizzare dig con largomento +short (interroga direttamente i server DNS, non guarda /etc/hosts / NSS / ecc.):

dig +short unix.stackexchange.com 

Se dig +short non è disponibile, nessuno di quanto segue dovrebbe funzionare. Tutti questi interrogano direttamente il DNS e ignorano altri mezzi di risoluzione:

host unix.stackexchange.com | awk "/has address/ { print $4 }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 }" 

Se desideri stampare solo un IP, aggiungi per awk” flusso di lavoro.

dig +short unix.stackexchange.com | awk "{ print ; exit }" getent hosts unix.stackexchange.com | awk "{ print $1 ; exit }" host unix.stackexchange.com | awk "/has address/ { print $4 ; exit }" nslookup unix.stackexchange.com | awk "/^Address: / { print $2 ; exit }" dig unix.stackexchange.com | awk "/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }" 

Commenti

  • Per impostazione predefinita, lutilizzo di dig funziona solo con ipv4, dove lhost fornisce risposte sia ipv4 che ipv6. Questo potrebbe essere imprevisto. Puoi provare host www.google.com, dig +short www.google.com, host ipv6.google.com, dig +short ipv6.google.com, host www.facebook.com , dig +short www.facebook.com.
  • DIG non funziona, se è un CNAME non restituirà lIP.
  • A volte, host può essere scaduto e non restituisce nulla. Per alcuni domini, dig +short potrebbe restituire un alias di dominio nella prima riga. Quindi, per assicurarti che loutput sia un IPv4 indirizzo, utilizza dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
  • Luso di getent hosts <host> non è corretto, come per instan ce può fornire un indirizzo IPv6 mentre IPv6 ‘ non funziona. La soluzione corretta è utilizzare getent ahosts <host> per provare sia IPv6 che IPv4, se necessario.
  • Vale la pena menzionare: host, dig e nslookup sembrano parlare direttamente con i server elencati in resolv.conf, mentre ” getent hosts ” rispetta sia il file host locale che la memorizzazione nella cache a livello di libreria (come nscd) se abilitata .

Risposta

Con host da dnsutils pacchetto:

$ host unix.stackexchange.com unix.stackexchange.com has address 64.34.119.12 

( corretto nome del pacchetto in base ai commenti. Come nota altre distribuzioni hanno host in diversi pacchetti: Debian / Ubuntu bind9-host , openSUSE bind-utils , Frugalware bind .)

Commenti

  • Se è necessario risolvere qualcosa che non è nel DNS (ad es. / Etc / hosts), vedere la voce ResolutionIP di seguito
  • Tenere presente che host a volte restituisce output su più righe (in caso di reindirizzamenti), ‘ vorrai host unix.stackexchange.com | tail -n1 se vuoi solo la riga con lindirizzo IP.
  • Esistono più versioni di ” host ” con diversi formati di output. Per esempio. la maggior parte dei sistemi sembra avere la versione BIND9, ma il mio server Ubuntu 10.04 LTS ha una versione completamente diversa in qualche modo ..
  • se non ‘ non hai host o dig installato puoi utilizzare il ping invece che è sempre disponibile: ping unix.stackexchange.com -c 1 -q 2>&1 | grep -Po "(\d{1,3}\.){3}\d{1,3}" questo non ne ha bisogno pacchetti extra vengono installati sulla maggior parte delle corrispondenze Unix / Linux.
  • Questa risposta merita un grave downvote. host è uno strumento DNS (simile a nslookup) quindi cerca solo host nel DNS, non ad es. /etc/hosts. Quindi NON è una risposta alla domanda di OP ‘.

Risposta

Ho uno strumento sulla mia macchina che sembra fare il lavoro. La pagina man mostra che sembra venire con mysql … Ecco come puoi usarlo:

resolveip -s unix.stackexchange.com 64.34.119.12 

Il valore di ritorno di questo strumento è diverso da 0 se il nome host non può essere risolto:

resolveip -s unix.stackexchange.coma resolveip: Unable to find hostid for "unix.stackexchange.coma": host not found exit 2 

UPDATE Su fedora, viene fornito con mysql-server:

yum provides "*/resolveip" mysql-server-5.5.10-2.fc15.x86_64 : The MySQL server and related files Dépôt : fedora Correspondance depuis : Nom de fichier : /usr/bin/resolveip 

Immagino che creerebbe una strana dipendenza per il tuo script …

Commenti

  • Questa sembra essere lunica soluzione qui che utilizza il risolutore di build del sistema operativo ‘, quindi funziona per / etc / hosts così come DNS.
  • getent, come dettagliato nellaltra risposta, guarda anche / etc / hosts e viene fornito con glibc, quindi non ha dipendenze da un sistema Linux.
  • Non userei risoluzioniip dato che crei una dipendenza da un altro pacchetto. getent è installato per impostazione predefinita. host, nslookup e dig sono tutti in pacchetti opzionali. Sicuramente usa getent in uno script.
  • Mi piace questa risposta ma ‘ t restituisce ipv6

Risposta

Il seguente comando utilizzando dig ti permette di leggere il risultato direttamente senza sed / awk / ecc. magia:

$ dig +short unix.stackexchange.com 64.34.119.12 

dig è incluso anche nel dnsutils pacchetto.


Nota : dig ha un valore di ritorno di 0, anche se il nome non può essere risolto. Pertanto, “devi controllare se loutput è vuoto invece di controllare il valore restituito:

hostname=unix.stackexchange.com ip=`dig +short $hostname` if [ -n "$ip" ]; then echo IP: $ip else echo Could not resolve hostname. fi 

Nota 2 : se un nome host ha più indirizzi IP (prova debian.org, ad esempio), saranno tutti restituito. Questo “problema” interessa tutti gli strumenti menzionati finora in questa domanda:

Commenti

  • Tieni presente che se un dominio ha una voce CNAME il suo dominio può essere stampato nella prima riga invece di un indirizzo IP.

Risposta

getent hosts unix.stackexchange.com | cut -d" " -f1 

Commenti

  • Considera anche ahosts, ahostsv4, ahostsv6 con getent.
  • cut non sarà per getent ‘ s, che utilizzano \t per separare le colonne. Questo è il caso di Solaris.
  • @ceving: Su Sola ris potresti dover eseguire cut senza -d (il valore predefinito è \t come delimitatore). Su Linux sono ‘ spazi, quindi la riga sopra funziona.

Risposta

Le soluzioni fornite finora funzionano principalmente nel caso più semplice: il nome host si risolve direttamente in un singolo indirizzo IPv4. Questo potrebbe essere lunico caso in cui è necessario risolvere i nomi host, ma in caso contrario, di seguito è riportata una discussione su alcuni casi che potrebbe essere necessario gestire.

Chris Down e Heinzi hanno discusso brevemente il caso in cui il nome host risolve a più di un indirizzo IP. In questo caso (e altri sotto), lo scripting di base presumendo che un nome host si risolva direttamente in un singolo indirizzo IP potrebbe non funzionare. Di seguito, un esempio con un nome host che risolve più di un singolo indirizzo IP:

$ host www.l.google.com www.l.google.com has address 209.85.148.147 www.l.google.com has address 209.85.148.103 www.l.google.com has address 209.85.148.99 www.l.google.com has address 209.85.148.106 www.l.google.com has address 209.85.148.105 www.l.google.com has address 209.85.148.104 

Ma cosè www.l.google.com ? È qui che deve essere introdotto il caso alias . Controlliamo lesempio seguente:

$ host www.google.com www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.105 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104 

Quindi www.google.com non risolve direttamente in indirizzi IP, ma in un alias che si risolve in più indirizzi IP. Per ulteriori informazioni sugli alias, controlla qui . Ovviamente, è possibile il caso in cui un alias abbia un unico indirizzo IP , come mostrato di seguito:

$ host g.www.ms.akadns.net g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.190 

Ma gli alias possono essere concatenati?La risposta è sì:

$ host www.microsoft.com www.microsoft.com is an alias for toggle.www.ms.akadns.net. toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net. g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net. lb1.www.ms.akadns.net has address 207.46.19.254 $ host www.google.fr www.google.fr is an alias for www.google.com. www.google.com is an alias for www.l.google.com. www.l.google.com has address 74.125.39.147 www.l.google.com has address 74.125.39.103 www.l.google.com has address 74.125.39.99 www.l.google.com has address 74.125.39.106 www.l.google.com has address 74.125.39.104 www.l.google.com has address 74.125.39.105 

Non ho trovato alcun esempio in cui un nome host si risolva in un alias che non si risolve in un indirizzo IP, ma penso che il potrebbe verificarsi.

Più che più indirizzi IP e alias, ci sono altri casi speciali … che dire di IPv6? Potresti provare:

$ host ipv6.google.com ipv6.google.com is an alias for ipv6.l.google.com. ipv6.l.google.com has IPv6 address 2a00:1450:8007::68 

dove il nome host ipv6.google.com è un nome host solo IPv6. E i nomi host dual-stack:

$ host www.facebook.com www.facebook.com has address 66.220.153.15 www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c:: 

Ancora su IPv6, se il tuo host è solo IPv4, puoi comunque risolvere indirizzi IPv6 (testato su un solo IPv4 WinXP e con ipv6.google.com, potresti provarlo su Linux). In questo caso, la risoluzione ha esito positivo, ma un ping non riesce con un messaggio di errore host sconosciuto . Questo potrebbe essere un caso in cui il tuo scripting fallisce.

Spero che queste osservazioni siano state utili.

Commenti

  • Che grande complemento alla risposta accettata, mostrando tutti i casi limite che si potrebbero voler affrontare nello scripting. La mia versione host non riporta nemmeno ” ha lindirizzo ” per le mie scatole.

Risposta

Per evitare il problema con gli alias e ottenere sempre un unico indirizzo IP pronto per luso:

python -c "import socket; print socket.gethostbyname("www.example.com")" 

Commenti

Risposta

ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" 

funziona senza dipendenze da altri sistemi (e per host specificati in / etc / hosts)

Commenti

  • Luso del ping è ciò di cui avevo bisogno perché ho bisogno del valore dal file hosts ma il pattern sed viene analizzato correttamente ma ha funzionato ping – q -c 1 -t 1 your_host_here | grep PING | sed -e ” s / ^ [^ (] * [(] // ” | sed -e ” s / [)]. * $ // ”
  • Per risolvere qualcosa sulla mia rete domestica come myhostname.local funziona così per questa è la risposta migliore.
  • Posso suggerire anche questa: ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
  • getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname> funziona anche per le dichiarazioni allinterno di /etc/hosts … ed è ‘ è lo strumento da utilizzare per tutti i tipi di database di sistema (passwd, gruppo, alias, servizi).

Risposta

Semplice ma utile :

  1. getent ahostsv4 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
  2. getent ahostsv6 www.google.de | grep STREAM | head -n 1 | cut -d " " -f 1
  3. getent hosts google.de | head -n 1 | cut -d " " -f 1

Tutti i comandi risolveranno un indirizzo IP se lhost esiste ancora. Se lhost punta a un CNAME, riceverà anche lIP in quello case.

Il primo comando restituisce lindirizzo IPv4 risolto.

Il secondo comando restituisce il res olved IPv6.

Il terzo comando restituirà lindirizzo preferito del proprietario, che può essere un indirizzo IPv4 o IPv6.

Commenti

  • Di gran lunga il più semplice. Ed è disponibile per impostazione predefinita. Diverso da host che richiede linstallazione di bindutils

Risposta

Ecco una leggera variazione dellapproccio ping che prende in considerazione “host sconosciuto” (piping attraverso stderr) e utilizza tr per evitare luso di sed regexps:

ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}" 

In caso è importante acquisire il valore di uscita, quindi funzionerà quanto segue (sebbene meno elegante):

ping -c1 -t1 -W0 www.example.com &>/dev/null && ping -c1 -t1 -W0 www.example.com 2>&1 | tr -d "():" | awk "/^PING/{print $3}" 

Commenti

  • Adoro questa soluzione, perché funziona senza strumenti aggiuntivi.

Risposta

Per completare la risposta di Chris Down e indirizzare i commenti di jfgagne sugli alias (possibilmente concatenati), ecco una soluzione che:

  • prende in considerazione più IP
  • prende in considerazione uno o più alias (CNAME)
  • non interroga il file /etc/hosts ( nel mio caso non lo volevo); per interrogarlo, la soluzione python di dbernt è perfetta)
  • non usa awk / sed

    dig +short www.alias.com | grep -v "\.$" | head -n 1 

Restituisce sempre il primo indirizzo IP o tring vuoto se non risolto. con la versione di dig:

 $ dig -v DiG 9.8.1-P1 

Commenti

  • Grazie, altre risposte presumono che ” dig + short ” sempre ritorni un singolo indirizzo IP. Non erano ‘ responsabili dei CNAME.

Risposta

 php -r "echo gethostbyname("unix.stackexchange.com");" 

Commenti

  • funziona, ma richiede che php sia installato sul tuo terminale
  • può essere utile su un tipico container docker php dove ” host “, ” dig ” ecc. non sono disponibili

Risposta

Mi sarebbe piaciuto aggiungere questo come commento a Andrew McGregor Re: ping. Tuttavia non me lo permetterebbe, quindi devo aggiungerla come unaltra risposta. (Se qualcuno può spostarla in un commento, sentiti libero di farlo.)

Questa è unaltra variante, usando solo ping e grep :

ping -q -c1 -t1 your_host_here | grep -Eo "([0-9]+\.?){4}" 

grep -E per lespressione regolare estesa e grep -o a restituisce solo la parte corrispondente. la regexp stessa cerca una o più cifre ([0-9]+) e, facoltativamente, un punto (\.?) quattro volte ( {4})

Risposta

Puoi utilizzare host:

hostname=example.org # strips the IP IP=$( host ${hostname} | sed -e "s/.*\ //" ) # checks for errors if [ $? -ne 0 ] ; then echo "Error: cannot resolve ${hostname}" 1>&2 exit 1; fi 

Rispondi

qui “una ricetta Bash Ho inventato usando le risposte di altre persone: prima prova /etc/hosts, poi torna a nslookup:

 resolveip(){ local host="$1" if [ -z "$host" ] then return 1 else local ip=$( getent hosts "$host" | awk "{print $1}" ) if [ -z "$ip" ] then ip=$( dig +short "$host" ) if [ -z "$ip" ] then echo "unable to resolve "$host"" >&2 return 1 else echo "$ip" return 0 fi else echo "$ip" return 0 fi fi }  

Commenti

  • Per essere chiari, getent hosts non è ‘ t solo una ricerca in / etc / hosts – è ‘ una chiamata completa di risoluzione DNS a gethostbyaddr (3) ed è ‘ molto improbabile che fallisca in un caso in cui dig avrà successo. Vedi la pagina man di getent .
  • @Stuart ha ragione – i ‘ ho imparato molto da quando lho scritto e ha semplificato troppo un comando potente. getent rimane il mio preferito, anche se mi piace anche dig +short

Risposta

nmap -sP 192.168.178.0/24|grep YOUR_HOSTNAME|sed -n "s/.*[(]\([0-9\.]*\)[)].*/\1/p" 

era la soluzione che ho trovato senza server DNS

Risposta

Forse non il più conciso, ma sembra essere robusto ed efficiente:

# $(get_host_dns_short "google.com") # # Outputs the IPv4 IP Address of a hostname, resolved by DNS. Returns 0 if DNS # responded successfully; 1 otherwise. Will mask error output. function get_host_dns_short() { ( set -o pipefail host -4 -W1 -t A "$1" 2>/dev/null | awk "/has address/ { print $NF; exit }" ) && return 0 || return 1 } 

Questo produrrà un singolo IPv4 IP, oltre a restituire 1 in caso di errore, mascherando loutput di stderr.

Puoi usarlo in questo modo:

GOOGLE_IP="$(get_host_dns_short "google.com")" if [[ $? -eq 0 ]]; then echo "Google"s IP is ${GOOGLE_IP}." else echo "Failed to resolve Google"s IP." fi 

LIP di Google “è 216.58.192.46.

Se invece desideri un indirizzo IPv6, sostituisci -4 con -6.

Risposta

dig +noall +answer +nocomments example.com | awk "{printf "%-36s\t%s\n", $1, $5 }"

Commenti

  • Qualche contesto in cui quella risposta migliorerebbe rispetto a quelle già esistenti essere grande. Inoltre, fai rientrare i comandi di 4 spazi (vedi la sintassi markdown).

Answer

anche dig lento, nslookup è molto più veloce

nslookup google.com | grep -Po "Address:\s*[0-9.]+" | tail -1 | sed -e "s/Address:\s*//g" 

Risposta

1 riga risolve un elenco del nome host

for LINE in `cat ~/Desktop/mylist`; do a=$(nslookup $LINE | awk "/^Address: / { print $1 }"); echo $a >> ~/Desktop/ip; done 

Risposta

Lo faccio sempre sul mio Mac che non dispone di getent. ping sembra un hack. Vorrei prendere in considerazione anche /etc/hosts.

Quindi, ho scritto uno stupido wrapper per dns.lookup per tu che hai installato Node.js per fornire una CLI:

$ npm install -g lookup-hostname $ lookup google.com 62.243.192.89 

Commenti

  • 60% di possibilità di rottura prima che tu possa avvicinarti a una risoluzione.
  • @dotbit potresti elaborare? ‘ utilizzo questo settimanale dal ‘ 17 e non ho mai avuto problemi.
  • @Jensen ma tu ‘ sei lunico in assoluto, come sempre. Il resto di noi di solito si imbatte in FAIL di un tipo o dellaltro, e sempre.
  • ” come sempre ” Cosa intendi con questo? ” Il resto di noi ” Chi ‘ è quello ? ” si è imbattuto in FAIL ” Quale problema specifico stai riscontrando? ‘ sono curioso.

Risposta

Io non ” Non conosco il modo più semplice per uno script bash ma se vuoi risolvere un nome host e vedere se lhost è attivo, usa ping!

ping -a hostname -c 1 

ping lhost una volta e risolverà il nome host nellindirizzo IP.

$ ping -a www.google.com -c 1 PING www.google.com (216.58.211.132) 56(84) bytes of data. 64 bytes from arn09s10-in-f4.1e100.net (216.58.211.132): icmp_seq=1 ttl=54 time=1.51 ms 

Commenti

  • usare ping è buono, perché tutti ce lhanno, ma tu devi filtra la parte IP dagli output, se desideri utilizzarla in uno script.

Answer

Sì, ci sono già molte risposte, ma manca una soluzione che utilizza perl:

perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com 

In uno script bash potrebbe essere usato in questo modo:

#!/bin/bash ipaddr=$(perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" unix.stackexchange.com) echo $ipaddr 

I moduli utilizzati qui sono moduli principali, quindi dovrebbero essere disponibili ovunque senza installazione con CPAN.

Commenti

  • perl -MSocket -MNet::hostent -E 'say inet_ntoa((gethost shift)->addr)' unix.stackexchange.com 2>/dev/null è molto più pulito. ma nessuno tranne noi due sta usando p ö rl, tutti gli altri ovviamente usano Pascal Script.
  • In realtà preferisco vedere i messaggi di errore se non altro va storto. Can't call method "addr" on an undefined value non è ‘ è esattamente il miglior messaggio di errore, ma può fornire un suggerimento sul problema.

Risposta

#!/bin/bash systemd-resolve RT.com -t A | awk "{ print $4 ; exit }" systemd-resolve unix.stackexchange.com -t A --legend=no | awk "{ print $4 ; exit }" resolveip -s RT.com dig +short RT.com host RT.com | awk "/has address/ { print $4 }" nslookup RT.com | awk "/^Address: / { print $2 }" ping -q -c 1 -t 1 RT.com | grep PING | sed -e "s/).*//" | sed -e "s/.*(//" ruby -rresolv -e " print Resolv.getaddress "RT.com" " python2 -c "import socket; print socket.gethostbyname("RT.com")" perl -MSocket -MNet::hostent -E "say inet_ntoa((gethost shift)->addr)" RT.com 2>/dev/null php -r "echo gethostbyname( "RT.com" );" echo " all do work for me - take your pick! " 

Commenti

  • La versione ruby stampa virgolette attorno allindirizzo IP — probabilmente dovrebbe essere usato print invece di p.
  • grazie, @Slaven Rezic e sentiti libero di votare. poi di nuovo, qui in basso lo script potrebbe essere effettivamente più visibile … 😉

Answer

host -t a cisco.com 

questo comando mostrerà lindirizzo IP (ridurrà il dominio a IP)

Rispondi

Oltre alla soluzione sopra, puoi tradurre più nomi host in ip tramite lo script sottostante, lunica dipendenza è il comando “ping” in Unix core:

getip(){ ping -c 1 -t 1 $1 | head -1 | cut -d " " -f 3 | tr -d "()" 2>&1 | tee >> /tmp/result.log & } getip "hostname.number1.net" getip "hostname.number2.net" getip "hostname.number3.net" getip "hostname.number4.net" getip "hostname.number5.net" getip "hostname.number6.net" getip "hostname.number7.net" getip "hostname.number8.net" 
$ cat /tmp/result.log ABC.DEF.GHI.XY1 ABC.DEF.GHI.XY2 ABC.DEF.GHI.XY3 ABC.DEF.GHI.XY4 ABC.DEF.GHI.XY5 ABC.DEF.GHI.XY6 ABC.DEF.GHI.XY7 ABC.DEF.GHI.XY8 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *