สรุป:
getprop net.hostname
(ชื่อโฮสต์ระบบ Android อาจเป็นชื่อประเภท android_24412414)
echo $HOSTNAME
(ชื่อโฮสต์ของเชลล์ / เทอร์มินัล / 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 ตั้งอยู่ในการตั้งค่าจากนั้นถ้าว่างเปล่าจากนั้นจะใช้ ID Android "android_" + (ถาวร) นั่นคือทั้งหมดที่คุณต้องทำ
เพิ่มnet.hostname=HOSTNAMEHERE
ไปที่/system/build.prop
(อาจจำเป็นต้องใช้รูท) เว้นบรรทัดว่างไว้ท้ายไฟล์
ConnectivityService.java ของ Kitkat สังเกตคำสั่ง 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
หมายเหตุ: คุณจะต้องเรียกใช้คำสั่งดังกล่าวเป็นรูทเพื่อให้มันทำงานได้ Init.rc โดยปกติจะอยู่ในพาร์ติชันระบบแบบอ่านอย่างเดียวดังนั้นจำเป็นต้องเข้าถึงรูทเพื่อแก้ไข
คำสั่ง dhcpcd ซึ่งถูกเรียกใช้เพื่อรับที่อยู่ dhcp จะไม่อัปเดตเป็นชื่อโฮสต์ที่ระบุโดยเซิร์ฟเวอร์ (ที่สามารถแก้ไขได้โดยการเพิ่ม dhcpcd-run-hooks ที่เหมาะสมและ dhcpcd.conf) และจะไม่ให้ชื่อโฮสต์ ไปยังเซิร์ฟเวอร์ dhcp หาก$(hostname)
(คำสั่ง hostname) ว่างเปล่าหรือ localhost และไม่ใช้ net.hostname ภายใน libnetutils ใช้สำหรับการเรียก dhcpcd ด้วย -h "net.hostname" แต่ถ้าด้วยเหตุผลบางอย่างมันจะไม่โทรด้วย -h, DHCPCD จะส่งระบบโฮสต์ผ่านทาง gethostname () ตราบใดที่มันไม่ใช่ "(ไม่มี) "," localhost "หรือว่างเปล่า ในสต็อก Froyo อยู่ดี ซัมซุงเมาบนอุปกรณ์บางอย่างเช่นของฉัน ไม่มีชื่อโฮสต์ผ่านเวลาเครือข่ายบังคับ ฯลฯ
โซลูชันของฉันสำหรับ Gingerbread และ Samsung ด้านล่างแก้ไขการกำหนดค่า DHCP Client Daemon:
สิ่งสุดท้ายที่คุณทำได้คือแก้ไข /etc/dhcpcd/dhcpcd.conf หากคุณเพิ่มhostname YOURHOSTNAME
ไฟล์มันจะใช้สิ่งนั้นเว้นแต่ว่าได้รับชื่อโฮสต์ใน commandline สิ่งนี้จะไม่แก้ไขปัญหา android_234etc แต่จะถ้าชื่อโฮสต์เป็น localhost (ปัญหาของฉันเนื่องจาก Samsung ขัน libnetutils และ localhost ใน init.rc) คุณจะต้องรูท แต่วิธีนี้ใช้ได้กับการรีบูต สิ่งนี้จะไม่ทำงานหาก dhcpcd ถูกเรียกด้วยตัวเลือก -h Hostname