Resumo:
getprop net.hostname
(Nome do host do sistema Android, provavelmente nome do tipo android_24412414)
echo $HOSTNAME
(nome do host shell / terminal / env, provavelmente ro.product.device de build.prop)
cat /proc/sys/kernel/hostname
(Nome do host do sistema Linux, provavelmente localhost )
head /etc/hosts
(Nome do host do sistema Linux, provavelmente localhost )
hostname
(O comando nem sempre instalado, se instalado pela caixa de ocupado, lê / proc / sys / kernel / hostname )
Depende da versão do Android que você possui.
Android 4.0 e superior
As versões mais recentes usarão a build.prop
entrada correta . Bem, isto é, o Android lê o build.prop
processo de inicialização normal. Depois que o Serviço de Conectividade é executado, ele verifica se net.hostname está definido nas Configurações e, se estiver vazio, ele usa o "android_" + ID do Android (permanente). Então é tudo o que você precisa fazer.
Adicionar net.hostname=HOSTNAMEHERE
a /system/build.prop
(raiz pode ser necessária). Deixe uma linha em branco no final do arquivo.
ConnectivityService.java de Kitkat, observe a instrução 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 abaixo
Versões mais antigas, Gingerbread, Froyo, etc, acabam com ele. Não se preocupa em verificar. Ele definirá net.hostname como android_24412414 ... não importa o quê. Portanto, você precisará alterá-lo após o término do carregamento do Serviço de Conectividade. Felizmente, ele executa a inicialização apenas uma vez, não em todas as novas conexões. Então, só precisamos correr setprop net.hostname HOSTNAMEHERE
atrás disso para que ele permaneça. Infelizmente, ele é executado bastante tarde no processo de inicialização, portanto, você precisa de algo que faça as alterações no boot_complete. Provavelmente, um aplicativo é executado por si só.
ConnectivityService.java do Froyo :
// 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);
Mas depois há outra questão.
A configuração net.hostname não é copiada para todo o sistema! Se você usar um aplicativo de console / terminal, talvez não obtenha o mesmo nome de host. Meu telefone, um Samsung Sidekick 4G (baseado no semi-Galaxy S), possui um init.rc que é executado hostname localhost
, portanto, todos os comandos abaixo não verão seu nome de host build.prop ou o nome de host android_id! Então você precisa definir isso também.
hostname HOSTNAMEHERE
ou echo HOSTNAMEHERE > /proc/sys/kernel/hostname
Nota: Dependendo de como você está fazendo isso, você precisará executar o comando acima como root para que ele funcione. O Init.rc normalmente está na partição do sistema somente leitura, portanto, é necessário acesso root para editá-lo.
O comando dhcpcd, que é executado para obter um endereço dhcp, não será atualizado para um nome de host fornecido pelo servidor (isso pode ser corrigido adicionando os dhcpcd-run-hooks e dhcpcd.conf) e não fornecerá um nome de host ao servidor dhcp se $(hostname)
(O comando hostname) estiver em branco ou localhost, e ele não usar internamente net.hostname. libnetutils é usado para chamar dhcpcd com -h "net.hostname", mas se por algum motivo decidir não ligar com -h, o DHCPCD AINDA ENVIARÁ O NOME DO HOSTNAME DO SISTEMA via gethostname (), desde que não seja "(nenhum) "," localhost "ou vazio. Em Stock Froyo de qualquer maneira. A Samsung ferrou o cão em alguns dispositivos como o meu. Nenhum nome de host passa, tempo de rede forçado etc.
Minha solução para Gingerbread e abaixo da Samsung, edite a configuração do DHCP Client Daemon:
A última coisa que você pode fazer é editar o /etc/dhcpcd/dhcpcd.conf. Se você adicionar hostname YOURHOSTNAME
ao arquivo, ele será usado, a menos que um nome de host seja fornecido na linha de comando. Isso não corrigirá o problema do android_234etc, mas sim se o nome do host for localhost (problema meu, já que a Samsung ferrou libnetutils e localhost no init.rc). Você precisará do Root, mas isso funciona nas reinicializações. Isso não funcionará se o dhcpcd for chamado com a opção -h Hostname.