Votre question porte sur la compréhension de Modèle OSI . Les proxies utilisent http
/ https
o socks
protocole, je suppose que vous parlez de http
qui est un protocole de la couche application (L7) du modèle OSI. Lorsqu'une application génère http
le message, il est transmis à la couche inférieure. En cas de https
Le message est crypté par SSL/TLS, qui sont des protocoles L6. Au niveau L4, le message reçoit un en-tête TCP, puis au niveau L3, il est converti en un paquet IP. Ce paquet passe par le NAT et le filtrage des pare-feu au niveau L3, et enfin par RRM/PDCP/RLC (si vous utilisez Mobile Data), MAC et le routage du noyau au niveau L2. À L1, il est transmis par Wi-Fi en tant que 802.11
ou des signaux CDMA/TDMA/FDMA sur les données mobiles.
Hotspot, quant à lui, est principalement basé sur deux outils de l'espace utilisateur ; hostapd
- qui crée un point d'accès Wi-Fi au niveau de l'OSI L2 - et dnsmasq
(jusqu'à Android 9) - qui fonctionne comme un serveur DHCP/DNS à OSI L7. Si l'hôte connecté utilise le téléphone comme serveur DNS (tel que configuré par DHCP), le téléphone reçoit les requêtes DNS et les transmet de manière récursive sous forme de paquets UDP/IP au serveur DNS en amont sur Internet (quel que soit le type de serveur DNS). dnsmasq
est configuré pour être utilisé). Le reste du trafic provenant du réseau hotspot est NATé et routé à L3/L2.
Donc vous voyez qu'aucun des (paquets IP) du trafic provenant des hôtes connectés ne passe par http
sur le téléphone Android, qui n'est donc pas transmis au serveur proxy. C'est la responsabilité des applications comme les navigateurs web de faire http(s)
les connexions au serveur proxy, et non directement à l'hôte distant comme le serveur web. Il n'est pas possible de créer un hotspot qui peut être configuré pour utiliser des serveurs proxy. http
proxy à OSI L7. Les paramètres de proxy (hôte/port) que nous définissons pour le Wi-Fi ou l'APN ou globalement sont simplement transmis aux applications, chaque application doit créer une connexion proxy de son côté, ou simplement ignorer les informations du proxy. Vous devez fournir ces informations de proxy aux applications sur chaque hôte connecté par hotspot. Voir la question ci-dessous pour plus de détails.
Cependant, il est possible de rediriger de force l'ensemble du trafic vers un serveur proxy en utilisant les NAT/REDIRECT/TPROXY du noyau Linux/Android (au niveau L3) et la table de routage (au niveau L2). C'est ainsi que fonctionnent les proxifieurs, mais il y a limitations . Les clients de messagerie électronique utilisent les protocoles IMAP/POP3/SMTP (L6/7) qui ne fonctionnent pas avec http GET
au lieu de demander http CONNECT
proxies. Ces derniers ne peuvent transférer que le trafic TCP, pour UDP, il faut au moins un proxy SOCKS5 qui fonctionne à L5. Le DNS et la plupart des jeux et des applications d'appels vocaux génèrent du trafic UDP, ils ne fonctionneront donc pas avec le proxy http
proxies du tout. ping
utility - par exemple - utilise ICMP (à L3) qui ne peut pas être encapsulé dans TCP ou UDP, il ne fonctionnera donc pas non plus avec SOCKS5.
Il n'est donc pas possible, dans le vrai sens du terme, de rediriger tout le trafic vers un serveur distant (proxy) sans utiliser une solution L2/3 comme le VPN. Pour plus de détails, voir Comment configurer le proxy HTTPS du Wi-Fi, et non HTTP, via le shell adb ?
Pourquoi un tel comportement si le hotspot est censé utiliser le réseau mobile et que le proxy est défini dans l'APN pour celui-ci ?
Le hotspot est censé utiliser le réseau mobile, les applications sont censées utiliser le proxy. Le proxy que vous avez configuré dans APN n'est pas appliqué à l'ensemble du système.
Je ne veux pas définir le proxy dans les paramètres avancés de l'option WiFi de l'autre appareil lorsque je choisis ce hotspot.
Malheureusement, il s'agit de la méthode la plus simple. Les autres méthodes nécessitent l'enracinement et/ou l'utilisation d'applications tierces (pour créer un VPN). Voir la question liée ci-dessus sur la façon d'appliquer le proxy de manière transparente.