Sommario:
getprop net.hostname
(Nome host del sistema Android, probabilmente nome tipo android_24412414)
echo $HOSTNAME
(shell / terminal / env hostname, probabilmente ro.product.device da build.prop)
cat /proc/sys/kernel/hostname
(Nome host del sistema Linux, probabilmente localhost )
head /etc/hosts
(Nome host del sistema Linux, probabilmente localhost )
hostname
(Il comando non sempre installato, se installato tramite la casella di occupato, leggerà / proc / sys / kernel / hostname )
Dipende dalla versione di Android che hai.
Android 4.0 e versioni successive
Le versioni più recenti useranno la build.prop
voce giusta . Bene, vale a dire, Android legge build.prop
come è normale processo di avvio. Una volta eseguito il servizio di connettività, verifica se net.hostname è impostato nelle Impostazioni, quindi se è vuoto, utilizza l'ID Android "permanente_" + (permanente). Quindi è tutto ciò che devi fare.
Aggiungi net.hostname=HOSTNAMEHERE
a /system/build.prop
(potrebbe essere necessario il root). Lascia una riga vuota alla fine del file.
Kitivity di ConnectivityService.java, nota l'istruzione IF isEmpty :
// setup our unique device name
if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android-").concat(id);
SystemProperties.set("net.hostname", name);
Android 2.3 e versioni precedenti
Versioni precedenti, Gingerbread, Froyo, ecc. Non si preoccupa di controllare. Imposta net.hostname su android_24412414 ... non importa quale. Quindi dovrai cambiarlo dopo che il servizio di connettività ha terminato il caricamento. Fortunatamente, esegue l'avvio solo una volta, non su ogni nuova connessione. Quindi dobbiamo solo rincorrerlo setprop net.hostname HOSTNAMEHERE
perché si attacchi. Sfortunatamente, viene eseguito abbastanza tardi nel processo di avvio, quindi è necessario qualcosa che apporti le modifiche su boot_complete. Molto probabilmente un'app che funziona da sola.
Froyo's ConnectivityService.java :
// setup our unique device name
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android_").concat(id);
SystemProperties.set("net.hostname", name);
Ma poi c'è un altro problema.
L'impostazione net.hostname, non viene copiata in tutto il sistema! Se si utilizza un'applicazione console / terminale, è possibile che non si ottenga lo stesso nome host. Il mio telefono, un Samsung Sidekick 4G (basato su semi-Galaxy S) ha un init.rc che gira hostname localhost
, quindi tutti i comandi sottostanti non vedranno né il tuo nome host build.prop né il nome host android_id! Quindi è necessario impostare anche quello.
hostname HOSTNAMEHERE
o echo HOSTNAMEHERE > /proc/sys/kernel/hostname
Nota: a seconda di come lo stai facendo, dovrai eseguire il comando sopra come root per farlo funzionare. Init.rc è in genere sulla partizione di sistema di sola lettura, quindi per modificarlo è necessario l'accesso root.
Il comando dhcpcd, che viene eseguito per ottenere un indirizzo dhcp, non verrà aggiornato a un nome host fornito dal server (che può essere risolto aggiungendo i giusti dhcpcd-run-hooks e dhcpcd.conf) e non fornirà un nome host al server dhcp se $(hostname)
(Il comando hostname) è vuoto o localhost e non utilizza internamente net.hostname. libnetutils è usato per chiamare dhcpcd con -h "net.hostname", ma se per qualche motivo decide di non chiamare con -h, DHCPCD ANCORA INVIERA 'IL SISTEMA HOSTNAME tramite gethostname (), purché non sia "(nessuno) "," localhost "o vuoto. A magazzino Froyo comunque. Samsung ha fregato il cane su alcuni dispositivi come il mio. Nessun nome host passante, tempo di rete forzata, ecc.
La mia soluzione per Gingerbread e sotto Samsung, modifica la configurazione del demone client DHCP:
L'ultima cosa che puoi fare è modificare /etc/dhcpcd/dhcpcd.conf. Se si aggiunge hostname YOURHOSTNAME
al file, lo utilizzerà, a meno che non venga fornito un nome host sulla riga di comando. Questo non risolverà il problema android_234etc, ma lo farà se il nome host è localhost (Il mio problema, dal momento che Samsung ha fregato libnetutils e localhost in init.rc). Avrai bisogno di Root, ma questo funziona attraverso i riavvii. Questo non funzionerà se dhcpcd viene chiamato con l'opzione -h Hostname.