Резюме:
getprop net.hostname
(Имя хоста системы Android, скорее всего, имя типа android_24412414)
echo $HOSTNAME
(имя хоста shell / terminal / env, скорее всего ro.product.device из build.prop)
cat /proc/sys/kernel/hostname
(Имя хоста системы Linux, скорее всего localhost )
head /etc/hosts
(Имя хоста системы Linux, скорее всего localhost )
hostname
(Команда не всегда устанавливается, если она установлена через окно занятости, будет читать / proc / sys / kernel / hostname )
Зависит от того, какая у вас версия Android.
Android 4.0 и выше
Более новые версии будут использовать правильную build.prop
запись. Ну, то есть Android читает build.prop
как нормальный процесс загрузки. После запуска службы подключений она проверяет, задано ли в Настройках имя net.hostname, затем, если оно пустое, используется идентификатор android_ + (постоянный). Так что это все, что вам нужно сделать.
Добавить net.hostname=HOSTNAMEHERE
в /system/build.prop
(Root может понадобиться). Оставьте пустую строку в конце файла.
Подключите Kitkat ConnectivityService.java, обратите внимание на оператор 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 и ниже
Старые версии, Gingerbread, Froyo и т. Д., Просто заткните его. Не стоит проверять. Для net.hostname будет установлено значение android_24412414 ... несмотря ни на что. Поэтому вам нужно будет изменить его после того, как служба подключений закончит загрузку. К счастью, он запускает запуск только один раз, а не при каждом новом подключении. Так что нам просто нужно бежать setprop net.hostname HOSTNAMEHERE
за этим, чтобы он придерживался. К сожалению, он запускается довольно поздно в процессе загрузки, поэтому вам нужно что-то, что внесет изменения в boot_complete. Скорее всего, приложение, которое запускается само по себе.
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);
Но тогда есть другая проблема.
Параметр net.hostname не копируется во всю систему! Если вы используете консольное / терминальное приложение, вы можете не получить одно и то же имя хоста. Мой телефон, Samsung Sidekick 4G (на базе полу-Galaxy S), имеет init.rc, который запускается hostname localhost
, поэтому все команды, указанные ниже, не увидят ни ваше имя узла build.prop, ни имя узла android_id! Таким образом, вы должны установить это тоже.
hostname HOSTNAMEHERE
или же echo HOSTNAMEHERE > /proc/sys/kernel/hostname
Примечание. В зависимости от того, как вы это делаете, вам нужно будет выполнить приведенную выше команду от имени пользователя root, чтобы она заработала. Init.rc обычно находится в системном разделе «только для чтения», поэтому для его редактирования необходим root-доступ.
Команда dhcpcd, запускаемая для получения адреса dhcp, не будет обновляться до имени хоста, предоставленного сервером (это можно исправить, добавив правильные dhcpcd-run-hooks и dhcpcd.conf), и не предоставит имя хоста к серверу dhcp, если $(hostname)
(команда hostname) пуста или локальна, и она внутренне не использует net.hostname. libnetutils используется для вызова dhcpcd с -h "net.hostname", но если по какой-то причине он решит не вызывать с -h, DHCPCD ПОСТОЯННО ОТПРАВИТ СИСТЕМНОЕ ХОСТАЙМ через gethostname (), если это не так (нет) "," localhost "или пусто. На складе Froyo все равно. Самсунг прикрутил дворняжку на некоторых устройствах вроде моего. Нет имени хоста, принудительное сетевое время и т. Д.
Мое решение для Gingerbread и ниже Samsung, отредактируйте конфигурацию DHCP-клиента-демона:
Последнее, что вы можете сделать, это отредактировать /etc/dhcpcd/dhcpcd.conf. Если вы добавите hostname YOURHOSTNAME
в файл, он будет использовать его, если в командной строке не указано имя хоста. Это не решит проблему android_234etc, но будет, если имя хоста - localhost (Моя проблема, поскольку Samsung ввел libnetutils и localhost в init.rc). Вам понадобится Root, но это работает через перезагрузки. Это не будет работать, если dhcpcd вызывается с опцией -h Hostname.