Qual è il numero massimo di caratteri per un nome di host in Unix?

Mi chiedo qual è il numero massimo di caratteri per un nome di host in un sistema Unix. Inoltre c’è qualche variabile definita che può essere utilizzato in programmazione Unix a chiamare quel numero? (cioè il numero di caratteri consentito per un nome di host).

Io sono di programmazione in C.

  • Io non downvote questa, ma IMO si dovrebbe avere riformulato questa domanda più di programmazione-centric. Ho dovuto indovinare sulla base di tag che sono stati forse C.
  • Grazie per il commento. Ho aggiornato la domanda.



6 Replies
  1. 62

    Di solito si può digitare:

    getconf HOST_NAME_MAX

    In aggiunta, si può generalmente includono limiti.h per la vostra applicazione e leggere il valore di definizione.

    Mentre lo standard POSIX dice che è la garanzia di non superare i 255 byte, che non significa necessariamente che ogni implementazione di aderire a quella.

    uomo gethostname sulla propria piattaforma, per ottenere informazioni più dettagliate.

    • Grazie per la risposta precisa. [+1]
    • Su Linux (glibc?), unistd.h è insufficiente, è necessario includere limits.h.
    • in molte versioni di linux (ad esempio, fidati) non è possibile impostare il nome host > 64 caratteri
    • non assomiglia a nessun modo per aggiornare un commento, ma è 64 del kernel 4.13 : github.com/torvalds/linux/…
  2. 49

    tl;dr:

    Codice di comportarsi con i nomi di host fino a 255 byte;
    gli amministratori dovrebbero mantenere la lunghezza del nome host (esclusi dominio) entro il 19 byte,
    e la lunghezza del nome di dominio (esclusi i nomi di host) entro 23 byte.

    • Nome host può essere lunga come 255 byte (alcuni sistemi può limitare a 64)
    • Nomi host utilizzati nel DNS può essere lunga come 253 byte
      come nome di dominio pienamente qualificato (FQDN=host.example.com), nel qual caso:

      • Il primo DNS etichetta (rimozione . e nulla dopo che da il nome host)
        può essere solo fino a 63 byte
      • Il 253 byte limite si applica al intero nome di dominio completo,
        anche se solo il primo marchio è utilizzato per il nome host Unix
    • Nomi host utilizzati gli indirizzi e-mail non deve superare 245 byte
      (per le tradizionali 8 caratteri username limite)
      o 221 byte (moderno massima username lunghezza 32)
      come un nome di dominio pienamente qualificato
    • Nomi host utilizzati per server TLS/SSL certificati non dovrebbe superare 64 byte
      come un nome di dominio pienamente qualificato
    • Nomi di host utilizzato per gli indirizzi di posta elettronica in OpenSSL certificati generati
      non deve superare 31 byte (tradizionali di 8 caratteri username limite)
      come un nome di dominio completo (nomi più lunghi di 8 ridurre questo limite),
    • Se ci sono caratteri non ASCII nel nome host sottrarre 4
      per ogni non-ASCII etichetta di dominio (la parte tra . caratteri)
      da tutti i limiti di cui sopra, e sottrarre un ulteriore 1-2 byte
      (non compresa la codifica UTF-8 overhead di 1-2 byte per carattere)
      per ogni carattere non ASCII.

    Versione lunga:

    Come @Michael dice, POSIX i nomi host sono generalmente limitata a 255 byte, e come @zrvan punti, DNS limita la lunghezza di ogni etichetta in RFC 1035 – tuttavia, tale limite è in realtà 63 (sia in RFC 1035 sezione 2.3.1 e come chiarito in RFC 2181 sezione 11).

    Ci sono altri limiti che entrano in gioco quando si utilizza nomi di host che verrà utilizzato nel DNS, come i nomi di host in certificati SSL o indirizzi e-mail.

    Prima, il nome di dominio completo (FQDN) limite di lunghezza è di 255 ottetti rappresentato nel protocollo DNS come

    “di una serie di etichette, … terminato da un etichetta di lunghezza zero. … Un’etichetta consiste di un ottetto di lunghezza seguita dal numero di caratteri che rappresenta il nome stesso”
    Sul Blog di MSDN “The Old New Thing” (citando RFC 1035, con illustrazioni utili)

    Con questi prefissi di lunghezza (di cui uno per la finale di lunghezza zero in etichetta), il limite effettivo per un nome di dominio pienamente qualificato è 253 byte.

    Se il vostro hostname anche essere usato come il nome DNS di un server, per cui è necessario un certificato TLS/SSL, c’è molto più brevi limite che vi riguardano.
    Appendice A. 1 di RFC 5280 e il suo predecessore Rfc 3280 e 2459 specificare il limite Superiore per i diversi campi di una X. 509 certificate; la ub-common-name-length limite per il campo Nome Comune, che per i certificati server è il server s nome di dominio pienamente qualificato, è 64 byte.

    Se si utilizzano OpenSSL per generare un certificato SSL con un indirizzo di posta elettronica campo più di 40 byte, verrà visualizzato questo errore:

    stringa è troppo lunga, non deve essere inferiore a 40 byte

    Se un nome di host saranno utilizzati gli indirizzi e-mail per OpenSSL certificati generati, il @ e nome utente sarà inoltre necessario per adattarsi all’interno di 40 byte (il “meno” in errore in realtà dovrebbe essere “non di più”), che, per un massimo username lunghezza di 8 byte, implica un massimo hostname nome FQDN lunghezza di 31 byte. Se il massimo username è più lungo di 8 byte, la massima lunghezza del nome host è diminuita di conseguenza – Linux moderni limite di 32 darebbe un massimo FQDN lunghezza di 7 che è impraticabile, anche per i servizi di abbreviazione URL, come bit.ly.

    OpenSSL scelta di un 40 come il limite di lunghezza per un indirizzo di posta elettronica X. 509 nome alternativo oggetto potrebbe essere stato scelto per la compatibilità con il più breve possibile, in alternativa sintassi del nome, E. 163-4 (per i numeri di telefono), ed è probabile che il protocollo TLS/SSL implementazioni (forse anche OpenSSL) supporto utilizzare di certificati con più indirizzi e-mail. C’è un separato limite superiore (ub-emailaddress-length) di 128 byte in RFC 3280, aumentato a 255 byte RFC 5280; questo è in realtà per un altro, eredità inserimento di indirizzi e-mail in X. 509 certificati, ma non sarebbe sorprendente se molte implementazioni che il limite superiore per la rfc822Address e-mail stringhe ia5 così.

    Mentre OpenSSL potrebbe aumentare questo limite in futuro, non c’è problema per questo nel OpenSSL Request Tracker, e sembra difficile che possa essere cambiato.

    Anche se non l’uso di TLS/SSL, il massimo indirizzo di posta elettronica della lunghezza di 254 implica un massimo hostname nome FQDN lunghezza di 245 byte per un tradizionale 8 byte username limite; o 221 byte per un moderno massima username limite di lunghezza di 32.

    Prendendo il minimo di tutti questi massimi e una 2012 mediana .dominio com lunghezza di 11 (guarda caso la lunghezza esatta di example.com), e si ottiene un massimo prima di etichetta lunghezza del nome host del 19 byte per un 40 byte di indirizzo di posta elettronica come
    [email protected].

    Se tutti i vostri indirizzi di posta elettronica associati a un alto livello di nome di dominio con i record MX e indirizzo del MTA di riscrittura, assumendo un più ragionevole username/alias il limite di lunghezza di 16, si ottiene una massima lunghezza del nome di dominio di 23 byte per un 40 byte di indirizzo di posta elettronica come [email protected].

    Infine, camere non-ASCII nomi di host richiedono IDN (internationalized domain name), che codifica
    per l’uso con il DNS; questo comporta una codifica con 4 caratteri xn-- il prefisso per ogni dominio etichetta con caratteri non-ASCII, e un’espansione di 1-2 byte per ogni carattere non ASCII (oltre alla maggiore dimensione risultante dalla codifica UTF-8). Se il nome host ha i caratteri non ASCII, è necessario ridurre tutti i limiti di cui sopra conseguenza.

  3. 18

    Secondo RFC 1035 la lunghezza di un nome di dominio completo è limitato a 255 caratteri, e ogni etichetta (nodo delimitato da un punto davanti al nome host) è limitato a 63 caratteri, quindi in effetti il limite dopo è 63.

    È possibile ottenere questo valore eseguendo getconf HOST_NAME_MAX nel terminale.

  4. 12

    I nomi host sono generalmente limitata a 255 byte. HOST_NAME_MAX (o _POSIX_HOST_NAME_MAX) definita in <limits.h> conterrà il valore specifico.

    • Si sono limitati a, ma questo non significa che ogni implementazione imposta è limite a quello. Hai ancora bisogno di guardare a come è definito nel HOST_NAME_MAX definizione. ad esempio sulla mia macchina FreeBSD, è 255, ma sul mio host linux: getconf HOST_NAME_MAX 64
    • [+1] per la chiarezza della risposta. Grazie
  5. 2

    Ecco un esempio di codice che mette tutto insieme:

    #include <limits.h>
    #include <unistd.h>
    #include <stdio.h>
    
    char host[HOST_NAME_MAX + 1];
    
    host[HOST_NAME_MAX] = 0;
    
    if (gethostname(host, sizeof(host) - 1) == 0)
    {
        printf("hostname is %s\n", host);
    }
  6. 0

    Git 2.13 (Q2 2017) illustra che la lunghezza del nome di limite in C, e ricorda che POSIX non specifica se il buffer sarà terminazione null.

    Si introduce una nuova funzione, xgethostname(), che assicura che ci sia sempre un \0 alla fine del buffer.

    Vedere commettere 5781a9a (18 Aprile 2017) da David Turner (csusbdt).

    (Fusa per David Turner — csusbdt in commettere 5781a9a, 19 Apr 2017)

    utilizzare HOST_NAME_MAX alla dimensione del buffer per gethostname(2)

    POSIX limita la lunghezza dei nomi host HOST_NAME_MAX.

    Esportare il fallback definizione da demone.c e utilizzare questo costante per rendere tutti i buffer utilizzato con gethostname(2) abbastanza grande per ogni possibile risultato
    e una terminazione NUL.

Lascia un commento