Bilgisayarımı Android Wi-Fi ortak erişim noktasına bağlarken, bilgisayarıma bir 192.168.42.x
adres atadı . İş alt ağlarımızdan biriyle çakıştığı için bunu gerçekten değiştirmem gerekiyor - bu mümkün mü?
Bilgisayarımı Android Wi-Fi ortak erişim noktasına bağlarken, bilgisayarıma bir 192.168.42.x
adres atadı . İş alt ağlarımızdan biriyle çakıştığı için bunu gerçekten değiştirmem gerekiyor - bu mümkün mü?
Yanıtlar:
Ne yazık ki, yerleşik bağlama desteği için IP adres aralığını, hatta CyanogenMod'da bile değiştirmenin bir yolu yoktur. Wi-Fi etkin nokta IP'si android.net.wifi.WifiStateMachine.startTethering () içinde kodlanmıştır . USB bağlantısı IP'si com.android.server.connectivity.Tethering'de kodlanmıştır .
Bununla birlikte, telefonunuz köklü ise, IP adres aralığını değiştirme seçeneğine sahip olan birleşme için üçüncü taraf uygulamaları kullanmayı deneyebilirsiniz. Örneğin, yerleşik USB bağlantısı Samsung Galaxy W için CyanogenMod alfalarında bozulduğunda , bu seçeneğe sahip olan Kök Kullanıcıları için Kablolu Bağlantı'yı kullandım . Wi-Fi bağlantısı için , aynı adrese sahip olan ve aynı zamanda IP adres aralığını değiştirme seçeneği de bulunan Kök Kullanıcıları için Kablosuz Bağlantı uygulamasını deneyebilirsiniz .
Google Kodunun kapatıldığından yukarıdaki bağlantılar artık çalışmaz. Bazı insanlar kaynak kodunu bu depolardan GitHub'a aktardılar:
Ancak, başka bir geliştirme etkinliği olmadı ve uygulamalar artık son Android sürümlerinde çalışmaz.
Birisinin bu eski uygulamaları denemek istemesi durumunda, Google Kod Arşivi'nde bazı APK dosyalarını bulabildim :
Android yerleşik wifi bağlantısı sunucu kullanarak 192.168.43.1/24 netd
, kullanarak, bağlama işlemek için tasarlanmıştır dnsmasq
. İlk DNS aralığı 192.168.42.1-254
ve 2. DNS aralığı 192.168.43.1-254
.
Netd'in değiştirilmesi kolay değildir. Onunla iletişim kurmak için bir soket gerektirir ve android bağlamaya başladığında bu soket alınır. Ancak Tethering.java
(Froyo kullandım) kaynak dosyalarına göz atarken görüyoruz:
// usb client will be provided 192.168.42.129
private static final String USB_NEAR_IFACE_ADDR = "192.168.42.129";
private static final String USB_NETMASK = "255.255.255.0";
// FYI - the default wifi is 192.168.43.1 and 255.255.255.0
private String[] mDhcpRange;
private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
private static final String DHCP_DEFAULT_RANGE1_STOP = "192.168.42.254";
private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
private static final String DHCP_DEFAULT_RANGE2_STOP = "192.168.43.254";
Ve daha sonra, BACKUPS AS olarak kullanılan bu aralıkları görüyoruz .
mDhcpRange = context.getResources().getStringArray(
com.android.internal.R.array.config_tether_dhcp_range);
if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
mDhcpRange = new String[4];
mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
}
Dhcp aralıkları için ana kaynak, 42 ve 43 kodlanmış kodları değildir, fakat array.config_tether_dhcp_range'den bir iç dizi dizisidir. Ancak şu anda boş.
Android çerçevesini düzenleyebilirsiniz. Benim telefonumda öyle /system/framework/framework-res.apk
. Bir var tonluk öğreticiler tam tema basit dizeleri, çerçeve-res.apk düzenleme için çevrimiçi. Telefonunuz ve android versiyonunuz için bir tane bulun.
Değiştirmek istediğiniz ana şey /res/values/arrays.xml
Aramak <array name="config_tether_dhcp_range" />
Değişmek:
<string-array name="config_tether_dhcp_range">
<item>192.168.x.y</item>
<item>192.168.x.z</item>
</string-array>
Gerektiği gibi derleyin / zip / sign (bir öğretici izleyin), sonra yeniden yükleyin.
Birden fazla aralık istiyorsanız, iki öğeyi tekrar tekrar kopyalayın. Her zaman her aralık için bir başlangıç ve durdurma sağlamanız gerekir. Onu aynı / 24, yani 192.168.50.
5 ve / 192.168.50.99
veya her neyse tutmaya çalışın . busybox ps | grep dnsmasq
Çalışmakta olduğunu onaylayabilirsiniz veya meşgul kutunuz yoksa, pidinizi ps dnsmasq
kullanın cat /proc/pid/cmdline
. Almalısınız (veya benzeri):
/ sistem / bin / dnsmasq - hayır - arka plan - hayır - anket - hayır - çözüm - dhcp aralığı = 192.168.50.5,192.168.50.99
FWIW, WIFI bağlantım varsayılan dnsmasq
aralıkları kullanıyor , ancak bilgisayarım atandı 192.168.43.147/24
ve ağ geçidi 192.168.43.1/24
. Sizinki neden bir 42.x
adrese varsayılan olduğundan emin değilim .
Bunun eski bir yayın olduğunu biliyorum, ancak güncelleme sağlayabileceğimi düşündüm. Görünen o ki bazı Android üreticileri ve sürümleri artık WiFi sıcak nokta özelliğini kullanırken DHCP sunucusu için IP alt ağ aralığının UI üzerinden değiştirilmesine izin veriyor. İşte Android 6.0 çalıştıran bir HTC One M8'de nerede bulabilirim. YMMV.
Mobile Hotspot ekranından 3 nokta simgesine (daha fazlası) tıklayın, Gelişmiş'e gidin, sonra LAN ayarları. "Yerel IP" altında IP adresini istediğiniz IP olarak değiştirin. "Yerel DHCP" altında, başlangıç IP adresini IP adresinizin alt ağına uyacak şekilde değiştirin.
Trent
NOT: Kök gereklidir.
Varsayılan DHCP IP adres aralığı kodlanmış ( 1 ) , ROM'u değiştirilmiş kaynak koduyla yeniden oluşturmadan değiştiremezsiniz. Ya da küçük bir kesmek kullanın.
Bağlamayı açtığınızda, ne olur (en azından):
hostapd
- erişim noktalarını yöneten arka plan programı - başlatıldı.dnsmasq
- DHCP / DNS sunucusu (Pie'ye kadar) - kodlanmış komut satırı argümanları ( 7 ) ile başlatılır /etc/dnsmasq.conf
( başka şekilde ( 8 ) ile ayarlanabilir ).Böylece /system/bin/dnsmasq
, aradaki sürecin kontrolünü alarak özel bir kabuk betiği ile değiştirebiliriz . Orijinal ikili dosyayı başka bir şeyle yeniden adlandırın:
# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin
Komut dosyası oluştur /system/bin/dnsmasq
:
#!/system/bin/sh
OLD_SUBNET='192.168.43'
NEW_SUBNET='192.168.1'
WIFI_INTERFACE='wlan0'
LOCAL_TABLE='97'
export PATH=/system/bin
# delete old route, add new
ip route del ${OLD_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE
ip route add ${NEW_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE
# set new IP address on Wi-Fi interface
ip address add ${NEW_SUBNET}.1/24 dev $WIFI_INTERFACE
# inject new subnet in hard-coded arguments received from netd
set -- $(printf '%s' "$*" | sed 's/'${OLD_SUBNET}'/'${NEW_SUBNET}'/g')
unset OLD_SUBNET NEW_SUBNET WIFI_INTERFACE LOCAL_TABLE
# execute original binary with new arguments
exec dnsmasq.bin $*
Wi-Fi arayüzünüzün adını onaylayın ( wlan0
genellikle). ip link
Veya ile kontrol edin ls /sys/class/net/
.
Ayrıca yerel ağ yönlendirme tablosu olduğunu teyit 97
: grep local_network /data/misc/net/rt_tables
. Android'in yönlendirmesi her yeni sürümde daha karmaşık hale gelen bir karmaşa. Bu yüzden bunun kalıcı olup olmadığından emin değilim. Ayrıca, herhangi bir değişiklik yapmadan önce, kodunuza ne yazmanız gerektiğini bulmak için yönlendirme politikalarınızı ve tablolarınızı kontrol edin:
~# RULES="$(ip rule | grep -vE 'unreachable|local')"
~# echo "$RULES"
~# for t in $(echo "$RULES" | awk '{print $NF}' | uniq); do ip r s table $t; done
SELinux kuralları ayrıca (tümü veya bazıları) önceden tanımlanmadıysa ve durum ise tanımlanmalıdır enforcing
. Magisk’i suploicy
veya benzeri bir başka araç kullanın sepolicy-inject
:
# execute binaries from /system/bin
allow netd system_file dir { read open getattr search }
allow netd system_file file { read gettattr open execute execute_no_trans }
# execute /system/bin/sh
allow netd shell_exec file { read getattr open execute execute_no_trans }
# execute /system/bin/toolbox and its applets
allow netd toolbox_exec file { read gettattr open execute execute_no_trans }
# configure RPDB rules / routing tables
allow netd netd capability { sys_admin }
Yeniden doğmuş genelinde * kalıcı değildir, bazılarını kullanmak init.d
senaryoyu veya değiştirin /sepolicy
içinderamdisk
Dosyalarda izinleri ayarla:
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
Keyfini çıkarın!
Ya da kendi işlemlerinizi çalıştırarak komut satırından eksiksiz bir bağlantı kurabilirsiniz. Soru farklı olsa da bu cevap talimatları içeriyor.
İLGİLİ: