Come configurare le impostazioni DHCP di WIFI Tethering (Hotspot) su Android?


27

Quando si collega il mio PC all'hotspot Wi-Fi Android, ha assegnato un 192.168.42.xindirizzo al mio PC. Devo davvero cambiarlo perché è in conflitto con una delle nostre sottoreti di lavoro - è possibile?


2
Il mio cellulare è rootato. Non mi dispiace cambiare i file di sistema, se necessario.
VVK,

Proprio come la risposta alle sfumature in alcune delle grandi risposte sopra, nella mia pratica la gamma 192.168.43.0/24 è assegnata per impostazione predefinita da Android / fornitore per il tethering WiFi e 192.168.42.0/24 è per il tethering USB.
Jim Klimov,

Risposte:


25

Sfortunatamente, non è possibile modificare l'intervallo di indirizzi IP per il supporto di tethering incorporato, anche in CyanogenMod. L'IP dell'hotspot Wi-Fi è codificato in android.net.wifi.WifiStateMachine.startTethering () ; l'IP tethering USB è codificato in com.android.server.connectivity .

Tuttavia, se il tuo telefono è rootato, puoi provare a utilizzare app di terze parti per il tethering che hanno l'opzione per modificare l'intervallo di indirizzi IP. Ad esempio, quando il tethering USB incorporato è stato interrotto in CyanogenMod alfa per Samsung Galaxy W, ho usato Wether Tether per gli utenti root , che ha tale opzione. Per il tethering Wi-Fi puoi provare l' app Wireless Tether for Root Users degli stessi autori, che ha anche la possibilità di modificare l'intervallo di indirizzi IP.


Poiché il codice di Google è stato chiuso, i collegamenti sopra non funzionano più. Alcune persone hanno esportato il codice sorgente da quei repository su GitHub:

Tuttavia, non ci sono state ulteriori attività di sviluppo e le app probabilmente non funzionano più con le recenti versioni di Android.

Nel caso in cui qualcuno volesse provare quelle app obsolete, sono stato in grado di trovare alcuni file APK nell'Archivio codici di Google :


+1 per le informazioni. Il mio dispositivo è rootato, ma l'app Wireless Tether for Root Users non funziona sul mio cellulare. Dovrebbe esserci un modo per cambiare l'intervallo IP sul telefono root, C'Mon Man !, Dopotutto Android è un sistema operativo aperto.
VVK,

@VVK C'è un modo. Basta ricompilare la fonte.
Syakur Rahman,

Le app che menzioni sembrano non esistere più. Riesci a trovare nuove versioni online, poiché conosci il nome degli editori? Ne ho trovati altri, ma nessuno di questi era gratuito ...
pgr

@pgr Trovato alcuni collegamenti funzionanti, ma nessuna versione più recente.
Sergey Vlasov,

21

Il tethering wifi integrato di Android è progettato per utilizzare 192.168.43.1/24 come server, con la netdgestione del tethering tramite dnsmasq. Il primo intervallo DNS è 192.168.42.1-254e il secondo intervallo DNS è 192.168.43.1-254.

Netd non è facile da cambiare. Richiede un socket per comunicare con esso e quel socket viene preso quando Android inizia il tethering. Ma esaminando i file di origine per Tethering.java(ho usato Froyo) vediamo:

// 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";

E più avanti vediamo quelle gamme utilizzate, COME BACKUPS .

    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;
    }

La fonte principale per gli intervalli dhcp non sono gli hardcoded 42 e 43, ma letti da array.config_tether_dhcp_range, un array di stringhe interno. Ma al momento è vuoto.

È possibile modificare il framework Android. Sul mio telefono, lo è /system/framework/framework-res.apk. Ci sono un sacco di tutorial online per l'editing quadro-res.apk, dalle stringhe semplici a pieno tematizzazione. Trova uno per il tuo telefono e la versione Android.

La cosa principale che vuoi cambiare è la /res/values/arrays.xml

Cercare <array name="config_tether_dhcp_range" />

Passare a:

<string-array name="config_tether_dhcp_range">
     <item>192.168.x.y</item>
     <item>192.168.x.z</item>
</string-array>

compilare / zip / sign secondo necessità (seguire un tutorial), quindi reinstallare.

Se si desidera più di un intervallo, è sufficiente copiare i due elementi più e più volte. È sempre necessario fornire un inizio e una fine per ciascun intervallo. Cerca di mantenerlo nella stessa / 24, ovvero 192.168.50.5 e 192.168.50.99quant'altro. Puoi confermare che funziona con busybox ps | grep dnsmasqo se non hai busybox ps dnsmasqquindi usa il pid in cat /proc/pid/cmdline. Dovresti ottenere (o simili):

/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-range = 192.168.50.5.192.168.50.99,1h

FWIW, il mio tethering WIFI utilizza gli dnsmasqintervalli predefiniti , ma il mio computer è stato assegnato 192.168.43.147/24e gateway 192.168.43.1/24. Non sono sicuro del motivo per cui il tuo è impostato automaticamente su un 42.xindirizzo.


2
42 è per USBNET 43 è per wifi
Zibri

bella scoperta, dove lo vedi?
cde

1
Perché se tethering tramite USB ottieni 42. Se tethering tramite Wi
Fi

5

So che questo è un vecchio post, ma ho pensato di fornire un aggiornamento. Sembra che alcuni produttori e versioni di Android ora consentano la modifica dell'intervallo di sottorete IP per il server DHCP attraverso l'interfaccia utente quando si utilizza la funzionalità hotspot WiFi. Ecco dove trovarlo su un HTC One M8 con Android 6.0. YMMV.

Dalla schermata Hotspot mobile, fai clic sull'icona a 3 punti (altro), vai su Avanzate, quindi su Impostazioni LAN. In "IP locale" cambia l'indirizzo IP nell'IP desiderato. In "DHCP locale" modifica l'IP iniziale in modo che corrisponda alla sottorete del tuo indirizzo IP.

Trent


Sai se anche i nuovi telefoni HTC hanno questa opzione?
Arya,

1

NOTA: è richiesto il root.

L'intervallo di indirizzi IP DHCP predefinito è hardcoded ( 1 ) , non è possibile modificarlo senza ricostruire la ROM con il codice sorgente modificato. O usa un piccolo trucco.

Quando si attiva il tethering, cosa succede (almeno):

  • hostapd - il demone che gestisce i punti di accesso - viene avviato.
  • Le interfacce di rete sono configurate, l'indirizzo IP viene aggiunto all'interfaccia Wi-Fi (codificato prima di Android Pie ( 2 , 3 ) , successivamente randomizzato ( 4 ) ) e viene aggiunta la tabella di routing ( 5 ) per la rete locale ( 6 ) .
  • dnsmasq- il server DHCP / DNS (fino a Pie) - viene avviato con argomenti a riga di comando codificati ( 7 ) (che possono essere impostati tramite /etc/dnsmasq.conf ( 8 ) in caso contrario).

Quindi possiamo sostituire /system/bin/dnsmasqcon uno script di shell personalizzato, prendendo il controllo del processo tra. Rinomina il file binario originale in qualcos'altro:

# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin

Crea script /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 $*

Conferma il nome della tua interfaccia Wi-Fi (di wlan0solito). Verificare con ip linko ls /sys/class/net/.

Anche confermare la tabella di routing di rete locale è 97: grep local_network /data/misc/net/rt_tables. Il routing di Android è un casino, diventando più complesso con ogni nuova versione. Quindi non sono sicuro che sia stato persistente o meno. Inoltre, prima di apportare qualsiasi modifica, controlla le politiche e le tabelle di routing per capire cosa dovresti inserire nel tuo script:

~# 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

Le regole di SELinux devono anche essere definite se (tutte o alcune) non sono già state definite e se lo è enforcing. Usa Magisk suploicyo altri strumenti simili come 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 }

* Non è persistente dopo il riavvio, utilizzare alcuni init.dscript o sostituire /sepolicyinramdisk

Imposta le autorizzazioni sui file:

~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*

Godere!

Oppure puoi impostare il tethering completo dalla riga di comando, eseguendo i tuoi processi. Questa risposta include le istruzioni, sebbene la domanda sia diversa.

RELAZIONATO:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.