Podsumowanie:
getprop net.hostname
(Nazwa hosta systemu Android, prawdopodobnie nazwa typu android_24412414)
echo $HOSTNAME
(nazwa hosta powłoki / terminala / env, prawdopodobnie ro.product.device z build.prop)
cat /proc/sys/kernel/hostname
(Nazwa hosta systemu Linux, prawdopodobnie localhost )
head /etc/hosts
(Nazwa hosta systemu Linux, prawdopodobnie localhost )
hostname
(Polecenie nie zawsze instalowane, jeśli jest instalowane przez zajętą skrzynkę, odczyta / proc / sys / kernel / hostname )
Zależy od posiadanej wersji Androida.
Android 4.0 i nowszy
Nowsze wersje będą używać właściwego build.prop
wpisu. To znaczy, że Android odczytuje build.prop
normalny proces uruchamiania. Po uruchomieniu usługi łączności sprawdza, czy w ustawieniach ustawiony jest net.hostname, a następnie, jeśli jest pusty, używa identyfikatora „android_” + (stały) android. To wszystko, co musisz zrobić.
Dodaj net.hostname=HOSTNAMEHERE
do /system/build.prop
(może być konieczne rootowanie). Pozostaw pustą linię na końcu pliku.
Kitkat's ConnectivityService.java, zwróć uwagę na instrukcję 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 i nowsze wersje
Starsze wersje, Gingerbread, Froyo itp., Po prostu go kasują. Sprawdzanie nie przeszkadza. Ustawi nazwę net.hostname na android_24412414 ... bez względu na wszystko. Musisz go zmienić po zakończeniu ładowania usługi łączności. Na szczęście uruchamia start tylko raz, a nie przy każdym nowym połączeniu. Musimy więc setprop net.hostname HOSTNAMEHERE
po tym pobiec , żeby się przylgnął. Niestety, działa dość późno w trakcie uruchamiania, więc potrzebujesz czegoś, co wprowadzi zmiany w boot_complete. Najprawdopodobniej aplikacja działa sama.
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);
Ale jest jeszcze jeden problem.
Ustawienie net.hostname nie jest kopiowane do całego systemu! Jeśli używasz aplikacji konsoli / terminala, możesz nie otrzymać tej samej nazwy hosta. Mój telefon, Samsung Sidekick 4G (oparty częściowo na Galaxy S), ma plik init.rc, który działa hostname localhost
, więc wszystkie poniższe polecenia nie będą widzieć ani nazwy hosta build.prop ani nazwy hosta android_id! Więc musisz to również ustawić.
hostname HOSTNAMEHERE
lub echo HOSTNAMEHERE > /proc/sys/kernel/hostname
Uwaga: w zależności od tego, jak to robisz, musisz uruchomić powyższe polecenie jako root, aby działało. Plik Init.rc znajduje się zwykle na partycji systemowej tylko do odczytu, więc do jego edycji potrzebny jest dostęp do konta root.
Polecenie dhcpcd, które jest uruchamiane w celu uzyskania adresu dhcp, nie zostanie zaktualizowane do nazwy hosta podanej przez serwer (można to naprawić, dodając odpowiednie dhcpcd-run-hooks i dhcpcd.conf) i nie poda nazwy hosta do serwera dhcp, jeśli $(hostname)
(polecenie hostname) jest puste lub localhost i nie używa wewnętrznie net.hostname. libnetutils służy do wywoływania dhcpcd przy pomocy -h „net.hostname”, ale jeśli z jakiegoś powodu zdecyduje się nie wywoływać przy pomocy -h, DHCPCD BĘDZIE WYSYŁAĆ NAZWĘ HOSTA SYSTEMOWĄ poprzez gethostname (), o ile nie jest to „(brak) ”,„ localhost ”lub pusty. W każdym razie na magazynie Froyo. Samsung przykręcił kundla do niektórych urządzeń, takich jak moje. Nie przechodzi nazwa hosta, wymuszony czas sieci itp.
Moje rozwiązanie dla Gingerbread i poniżej Samsunga Edytuj konfigurację demona klienta DHCP:
Ostatnią rzeczą, którą możesz zrobić, jest edycja /etc/dhcpcd/dhcpcd.conf. Jeśli dodasz hostname YOURHOSTNAME
do pliku, użyje go, chyba że w wierszu poleceń podano nazwę hosta. To nie rozwiąże problemu android_234etc, ale zrobi to, jeśli nazwa hosta to localhost (Mój problem, ponieważ Samsung wkręcił libnetutils i localhost w init.rc). Będziesz potrzebował rootowania, ale działa to przy restartach. To nie zadziała, jeśli dhcpcd zostanie wywołany z opcją -h Nazwa hosta.