Lors de la connexion de mon PC au point d'accès Wi-Fi Android, il a attribué une 192.168.42.x
adresse à mon PC. J'ai vraiment besoin de changer cela car il entre en conflit avec l'un de nos sous-réseaux de travail - est-ce possible?
Lors de la connexion de mon PC au point d'accès Wi-Fi Android, il a attribué une 192.168.42.x
adresse à mon PC. J'ai vraiment besoin de changer cela car il entre en conflit avec l'un de nos sous-réseaux de travail - est-ce possible?
Réponses:
Malheureusement, il n'y a aucun moyen de modifier la plage d'adresses IP pour la prise en charge du partage de connexion intégré, même dans CyanogenMod. L'IP du hotspot Wi-Fi est codé en dur dans android.net.wifi.WifiStateMachine.startTethering () ; l'IP du partage de connexion USB est codé en dur dans com.android.server.connectivity.Tethering .
Cependant, si votre téléphone est enraciné, vous pouvez essayer d'utiliser des applications tierces pour le partage de connexion qui ont la possibilité de modifier la plage d'adresses IP. Par exemple, lorsque le partage de connexion USB intégré a été rompu dans CyanogenMod alphas pour Samsung Galaxy W, j'ai utilisé le câble câblé pour les utilisateurs root , qui a une telle option. Pour le partage de connexion Wi-Fi, vous pouvez essayer l'application Wireless Tether pour les utilisateurs racine des mêmes auteurs, qui a également la possibilité de modifier la plage d'adresses IP.
Étant donné que Google Code a été fermé, les liens ci-dessus ne fonctionnent plus. Certaines personnes ont exporté le code source de ces référentiels vers GitHub:
Cependant, il n'y a eu aucune activité de développement supplémentaire et les applications ne fonctionnent probablement plus sur les versions récentes d'Android.
Juste au cas où quelqu'un voudrait essayer ces applications obsolètes, j'ai pu trouver des fichiers APK dans Google Code Archive :
Le partage de connexion wifi intégré à Android est conçu pour utiliser 192.168.43.1/24 comme serveur, avec la netd
gestion du partage de connexion, à l'aide de dnsmasq
. La première plage DNS est 192.168.42.1-254
et et la deuxième plage DNS est 192.168.43.1-254
.
Netd n'est pas facile à changer. Il nécessite une prise pour communiquer avec elle, et cette prise est prise lorsque Android commence à utiliser le modem. Mais en parcourant les fichiers source pour Tethering.java
(j'ai utilisé Froyo), nous voyons:
// 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";
Et plus tard, nous voyons ces plages utilisées, COMME SAUVEGARDES .
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 source principale des plages DHCP n'est pas les codes durs 42 et 43, mais lus à partir de array.config_tether_dhcp_range, un tableau de chaînes internes. Mais il est actuellement vide.
Vous pouvez modifier le cadre Android. Sur mon téléphone, ça l'est /system/framework/framework-res.apk
. Il y a une tonne de tutoriels en ligne pour éditer framework-res.apk, des chaînes simples aux thèmes complets. Trouvez-en un pour votre téléphone et votre version Android.
La principale chose que vous voulez changer est la /res/values/arrays.xml
Chercher <array name="config_tether_dhcp_range" />
Changer pour:
<string-array name="config_tether_dhcp_range">
<item>192.168.x.y</item>
<item>192.168.x.z</item>
</string-array>
compilez / zippez / signez au besoin (suivez un tutoriel), puis réinstallez.
Si vous voulez plus d'une plage, copiez simplement les deux éléments encore et encore. Vous devez toujours prévoir un départ et un arrêt pour chaque plage. Essayez de le garder dans le même / 24, c'est-à-dire 192.168.50.
5 et 192.168.50.99
ou autre chose. Vous pouvez confirmer qu'il fonctionne avec busybox ps | grep dnsmasq
ou si vous n'avez pas de boîte occupée, ps dnsmasq
utilisez le pid in cat /proc/pid/cmdline
. Vous devriez obtenir (ou similaire):
/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-range = 192.168.50.5,192.168.50.99,1h
FWIW, mon partage de connexion WIFI utilise les dnsmasq
plages par défaut , mais mon ordinateur a été affecté 192.168.43.147/24
et une passerelle 192.168.43.1/24
. Je ne sais pas pourquoi le vôtre a été transféré par défaut à une 42.x
adresse.
Je sais que c'est un ancien message, mais j'ai pensé que je fournirais une mise à jour. Il semble que certains fabricants et versions d'Android autorisent désormais le changement de la plage de sous-réseaux IP pour le serveur DHCP via l'interface utilisateur lors de l'utilisation de la fonction de point d'accès WiFi. Voici où le trouver sur un HTC One M8 fonctionnant sous Android 6.0. YMMV.
Depuis l'écran Mobile Hotspot, cliquez sur l'icône 3 points (plus), accédez à Avancé, puis Paramètres LAN. Sous "IP locale", changez l'adresse IP en IP désirée. Sous "DHCP local", changez l'adresse IP de départ pour qu'elle corresponde au sous-réseau de votre adresse IP.
Trent
REMARQUE: Root est requis.
La plage d'adresses IP DHCP par défaut est codée en dur ( 1 ) , vous ne pouvez pas la changer sans reconstruire la ROM avec un code source modifié. Ou utilisez un petit hack.
Lorsque vous activez le partage de connexion, que se passe-t-il (au moins):
hostapd
- le démon qui gère les points d'accès - est démarré.dnsmasq
- le serveur DHCP / DNS (jusqu'à Pie) - est démarré avec des arguments de ligne de commande codés en dur ( 7 ) (qui peuvent être définis via /etc/dnsmasq.conf
( 8 ) sinon).Nous pouvons donc remplacer /system/bin/dnsmasq
par un script shell personnalisé, en prenant le contrôle du processus entre les deux. Renommez le binaire d'origine en autre chose:
# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin
Créer un 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 $*
Confirmez le nom de votre interface Wi-Fi ( wlan0
généralement). Vérifiez avec ip link
ou ls /sys/class/net/
.
Assurez -vous également votre table locale de routage du réseau est 97
: grep local_network /data/misc/net/rt_tables
. Le routage d'Android est un gâchis, devenant plus complexe avec chaque nouvelle version. Je ne sais donc pas si cela a persisté ou non. Avant de faire des changements, vérifiez également vos politiques de routage et vos tableaux pour savoir ce que vous devez mettre dans votre 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
Les règles SELinux doivent également être définies si (tout ou partie) ne sont pas déjà définies et si le statut l'est enforcing
. Utilisez Magisk suploicy
ou un autre outil similaire comme 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 }
* Pas persistant entre les redémarrages, utilisez un init.d
script ou remplacer /sepolicy
dansramdisk
Définissez les autorisations sur les fichiers:
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
Prendre plaisir!
Ou vous pouvez configurer le partage de connexion complet à partir de la ligne de commande, en exécutant vos propres processus. Cette réponse comprend les instructions, bien que la question soit différente.
EN RELATION: