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


416

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


21
Peccato che la getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>risposta sia da qualche parte laggiù vicino al fondo. È il più semplice, non richiede pacchetti extra ed è anche più facile da analizzare da uno script Bash.
0xC0000022L

1
@ 0xC0000022L: La nuova vergogna è che la risposta suggerisce che getent hosts somehost, quando si esegue questa operazione ,somehost si produrrà un indirizzo IPv6 , che è diverso dal modo in cui la maggior parte degli altri strumenti ( ping, sshalmeno) risolvono i nomi e interrompe alcune cose. Usa ahostsinvece di hosts.
j_random_hacker,

@j_random_hacker: chi ti impedisce di richiedere indirizzi IPv4 ( ahostsv4) o IPv6 ( ahostsv6) in particolare? Personalmente non trovo nulla di sbagliato nella richiesta non specifica che restituisce IPv6. Il tuo codice dovrebbe essere preparato. IPv6 è in circolazione da oltre 20 anni.
0xC0000022L

@ 0xC0000022L: Nessuno "mi impedisce" di farlo, ma la risposta suggerisce specificamente hosts, e finora 4 persone hanno votato il commento di vinc17 esprimendo 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 usare una semplice corrispondenza delle stringhe oppure devono sapere molto sulla rete per trovare la risposta "vera". Quest'ultimo è un campo minato, così tanti programmi e sistemi di terze parti - sui quali non ho alcun controllo - usano il primo.
j_random_hacker,

Risposte:


533

Puoi usare getent, che viene fornito con glibc(quindi quasi sicuramente ce l'hai su Linux). Questo si risolve usando gethostbyaddr / gethostbyname2 e quindi controllerà /etc/hosts/ NIS / etc:

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

Oppure, come ha detto Heinzi sotto, puoi usare digl' +shortargomento (interroga direttamente i server DNS, non guarda /etc/hosts/ NSS / etc):

dig +short unix.stackexchange.com

Se dig +shortnon è disponibile, dovrebbe funzionare una delle seguenti opzioni. 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 si desidera stampare un solo IP, quindi aggiungere il exitcomando al awkflusso 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 }'

2
Per impostazione predefinita, l'utilizzo di dig funziona solo con ipv4, dove host fornisce sia risposte ipv4 che ipv6. Questo potrebbe essere inaspettato. Si può 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.
jfg956,

6
DIG non funziona, se è un CNAME non restituirà l'IP.
Sorin,

4
A volte, hostpuò essere scaduto e non restituisce nulla. Per alcuni domini, dig +shortpotrebbe restituire l'alias di dominio nella prima riga. Quindi, per garantire che l'output sia un indirizzo IPv4, utilizzare dig +short example.com | grep -Eo '[0-9\.]{7,15}' | head -1.
Caiguanhao,

9
L'uso getent hosts <host>non è corretto, poiché ad esempio potrebbe fornire un indirizzo IPv6 mentre IPv6 non funziona. La soluzione corretta è utilizzare getent ahosts <host>per provare sia IPv6 che IPv4 se necessario.
vinc17,

5
Vale la pena menzionare: host, dig e nslookup sembrano parlare direttamente con i server elencati in resolv.conf, mentre "host getent" rispettano sia il file hosts locale sia la memorizzazione nella cache a livello di libreria (come nscd) se abilitato.
Saustrup,

141

Con hostdal pacchetto dnsutils :

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

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


4
Intendevi dnsutils ? Comunque, ha hostfunzionato bene, grazie
Eugene Yarmash,

Probabilmente hai ragione. Non ho Arch qui da controllare. (Intendevo aggiungere un commento in seguito menzionandolo, ma la risposta era già stata votata, quindi supponevo di averla inchiodata ...)
Manatwork

1
Vedi la voce di risoluzione di seguito se hai bisogno di risolvere qualcosa che non è nel DNS (es. / Etc / hosts)
Gavin Brock

2
Tieni presente che a hostvolte restituisce un output multilinea (nel caso di reindirizzamenti), ti consigliamo host unix.stackexchange.com | tail -n1se vuoi solo la linea con l'indirizzo IP.
Edward Coffey,

3
Questa risposta merita un grave voto negativo. hostè uno strumento DNS (simile a nslookup), quindi cerca solo host in DNS, non in eg /etc/hosts. Quindi NON è una risposta alla domanda di OP.
Pietro,

54

Ho uno strumento sulla mia macchina che sembra fare il lavoro. La pagina man mostra che sembra venire con mysql ... Ecco come potresti 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

AGGIORNAMENTO 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 la tua sceneggiatura ...


6
Questa sembra essere l'unica soluzione qui che utilizza il risolutore build del sistema operativo, quindi funziona per / etc / hosts e DNS.
Gavin Brock,

8
getent, come dettagliato nell'altra risposta, guarda anche / etc / hosts e viene fornito con glibc, quindi non ha dipendenze su un sistema Linux.
Asfand Qazi,

44

Il seguente comando che digconsente di leggere il risultato direttamente senza sed / awk / etc. Magia:

$ dig +short unix.stackexchange.com
64.34.119.12

digè anche incluso nel dnsutilspacchetto.


Nota : digha un valore di ritorno di 0, anche se non è stato possibile risolvere il nome. Pertanto, è necessario verificare se l'output è vuoto anziché verificare 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 (provare debian.org, ad esempio), verranno restituiti tutti. Questo "problema" riguarda tutti gli strumenti menzionati finora in questa domanda:


2
Se un dominio ha una voce CNAME, il suo dominio potrebbe essere stampato nella prima riga anziché in un indirizzo IP.
pcworld,

40
getent hosts unix.stackexchange.com | cut -d' ' -f1

4
Considera anche ahosts, ahostsv4, ahostsv6con getent.
0xC0000022L

cutnon per getent, che usano \tper separare le colonne. Questo è il caso di Solaris.
ceving il

1
@ceving: su Solaris potrebbe essere necessario eseguire cutsenza -d(impostazione predefinita \tcome delimitatore). Su Linux sono gli spazi, quindi la linea sopra funziona.
sborsky,

27

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

Chris Down e Heinzi hanno discusso brevemente del caso in cui il nome host si risolve in più di un indirizzo IP. In questo caso (e altri di seguito), gli script di base presupponendo che un nome host si risolva direttamente in un singolo indirizzo IP potrebbero non funzionare. Di seguito, un esempio con un nome host che si risolve in 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 l'esempio di seguito:

$ 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.comnon si risolve direttamente in indirizzi IP, ma in un alias che si risolve da solo in più indirizzi IP. Per ulteriori informazioni sugli alias, consultare qui . Naturalmente, è possibile il caso in cui un alias abbia un singolo 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 è si:

$ 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 potrebbe verificarsi il caso.

Più di più indirizzi IP e alias, ci sono altri casi speciali ... che dire di IPv6? Puoi 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. Che dire dei 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 gli indirizzi IPv6 (testato su un IPX solo WinXP IPv e con ipv6.google.com, puoi provarlo su Linux). In questo caso, la risoluzione ha esito positivo, ma un ping ha esito negativo con un messaggio di errore host sconosciuto . Questo potrebbe essere un caso in cui il tuo scripting non riesce.

Spero che queste osservazioni siano state utili.


2
Che grande complemento alla risposta accettata, mostrando tutti i casi limite che uno potrebbe voler affrontare nello scripting. La mia versione hostnon indica nemmeno "ha indirizzo" per le mie caselle.
Mihai Danila,


18
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)


2
L'uso del ping è ciò di cui avevo bisogno in quanto ho bisogno del valore dal file hosts ma il modello sed viene analizzato correttamente ma questo ha funzionato ping -q -c 1 -t 1 your_host_here | grep PING | sed -e "s / ^ [^ (] * [(] //" | sed -e "s /[)×.*$//"
ManiacZX,

1
Per risolvere qualcosa sulla mia rete domestica come myhostname.local questo funziona, quindi per me questa è la risposta migliore.
Matt Friedman,

1
Vorrei suggerire anche questo:ping -q -c 1 -t 1 bahface.local | grep -m 1 PING | cut -d "(" -f2 | cut -d ")" -f1
Matt Friedman,

getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>funziona anche per le dichiarazioni interne /etc/hosts... ed è lo strumento per tutti i tipi di database di sistema (passwd, gruppo, alias, servizi).
0xC0000022L

17

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 l'host esiste ancora. Se l'host punta a CNAME otterrà anche l'IP in quel caso.

Il primo comando restituisce l'indirizzo IPv4 risolto

Il secondo comando restituisce l'indirizzo IPv6 risolto

Il terzo comando restituirà l'indirizzo preferito dai proprietari quale indirizzo IPv4 o IPv6.


Di gran lunga il più semplice. Ed è disponibile per impostazione predefinita. Non come hostquello richiede l'installazione dibindutils
michaelbn il

7

Ecco una leggera variazione pingdell'approccio che tiene conto di "host sconosciuto" (eseguendo il piping tramite stderr) e lo utilizza trper evitare l'uso di sedregexps:

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

Nel caso in cui sia importante acquisire il valore di uscita, 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}'

Adoro questa soluzione, perché funziona senza strumenti extra.
Radon8472,

7

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

  • tiene conto di più IP
  • prende in considerazione uno o più alias (CNAME)
  • non interroga il /etc/hostsfile (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, oppure vuota la stringa se non risolta. con versione di scavo:

    $ dig -v
    DiG 9.8.1-P1

1
Grazie, altre risposte presuppongono che "dig + short" restituisca sempre un singolo indirizzo IP. Non contavano per i CNAME.
jamshid,

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

funziona, ma richiede che php sia installato sul tuo terminale
Radon8472

1
può essere utile su un tipico contenitore docker php in cui "host", "scavare" ecc. non sono disponibili
Fabian Schmengler

5

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

Questa è un'altra variante, usando solo ping e grep:

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

grep -Eper un'espressione regolare estesa e grep -oper restituire solo la parte corrispondente. lo stesso regexp cerca una o più cifre ( [0-9]+) e facoltativamente un punto ( \.?) quattro volte ( {4})


4

Puoi usare 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

4

ecco una ricetta Bash che ho preparato 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
}

Per essere chiari, getent hostsnon è solo una ricerca in / etc / hosts - è una chiamata di risoluzione DNS completa per gethostbyaddr (3) , ed è molto improbabile che fallisca in un caso in cui digci riuscirà. Vedi la pagina man per getent .
Stuart P. Bentley,

@Stuart ha ragione: ho imparato molto da quando l'ho scritto e semplificato un comando potente. getentrimane il mio preferito, anche se mi piace anchedig +short
RubyTuesdayDONO

4
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


3

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 IP IPv4, oltre a tornare 1in caso di errore, mascherando l'output 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

L'IP di Google è 216.58.192.46.

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


3

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


1
Qualche contesto nel modo in cui la risposta migliora rispetto a quelli già esistenti sarebbe fantastico. Inoltre, inserire i comandi per 4 spazi (vedere la sintassi del markdown).
maxschlepzig,

2

1 riga risolve un elenco di nomi host

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

2

Lo sto facendo tutto il tempo sul mio Mac che non ha getent. pingsembra un trucco. Vorrei anche prendere /etc/hostsin considerazione.

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

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

Probabilità del 60% di rottura prima di arrivare ovunque vicino a una soluzione.
dotbit

@dotbit potresti elaborare? L'ho usato settimanalmente dal '17 e non ho mai avuto problemi.
Thomas Jensen,

@Jensen ma tu sei l'unico in assoluto, come sempre. Il resto di noi di solito incontra un GUASTO di un tipo o dell'altro, e sempre.
dotbit

"come sempre" Cosa intendi con questo? "Il resto di noi" Chi è quello? "run in FAIL" Che problema specifico stai riscontrando? Sono curioso.
Thomas Jensen,

2

scavare è troppo lento, nslookup è molto più veloce

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

2

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

ping -a hostname -c 1

Sarà pingil tempo dell'host uno e risolvere il nome host a indirizzo 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

usare ping è buono, perché tutti ce l'hanno, ma è necessario filtrare la parte IP dagli output, se ti piace usarlo in uno script.
Radon8472,

1

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 core, quindi dovrebbero essere disponibili ovunque senza installazione con CPAN.


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 usano ovviamente Pascal Script.
dotbit

In realtà preferisco vedere i messaggi di errore se qualcosa va storto. Can't call method "addr" on an undefined valuenon è esattamente il miglior messaggio di errore, ma può dare un suggerimento sul problema.
Slaven Rezic,

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

1
La versione ruby ​​stampa le virgolette intorno all'indirizzo IP --- probabilmente printdovrebbe essere usato al posto di p.
Slaven Rezic,

grazie, @Slaven Rezic e sentiti libero di votare. poi di nuovo, qui in fondo la sceneggiatura potrebbe essere effettivamente più visibile in realtà ... ;-)
dotbit

-1
host -t a cisco.com

questo comando mostrerà l'indirizzo IP (sostituirà il dominio su IP)


-1

Oltre alla soluzione precedente, è possibile tradurre più nomi host in ip tramite lo script sottostante, l'unica dipendenza è il comando "ping" nel core Unix:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.