Dispositivos Samsung: redes duales

Tengo la siguiente configuración: un dispositivo Wi-Fi que NO está conectado a Internet, como un dron o un dispositivo IoT. Los datos del dispositivo se cargarán en Internet.

Si bien es posible conectarse a ambas redes dentro de una aplicación usando ConnectivityManager, no es posible usar Internet móvil fuera de la aplicación. Los dispositivos tienen Android 6.0 o superior, por lo que debería ser compatible con el sistema Android. Pero me parece que Samsung no implementó ese soporte.

¿Cómo uso Internet móvil, por ejemplo, para recibir correos electrónicos o notificaciones automáticas mientras estoy conectado a un Wi-Fi que no tiene Internet?

Gracias.

Respuestas (1)

Se han hecho preguntas similares aquí:

Sin embargo, debido a la descripción de la recompensa, intentaré agregar estos datos y ampliarlos un poco, ya que las respuestas no se marcaron como aceptadas.

Respuesta corta: es posible tener redes duales, pero las soluciones alternativas difieren ligeramente.


  1. De esta fuente: cambie sin problemas entre WiFi y celular con Multipath-TCP Puede utilizar Multi-TCP.

Multipath TCP (MPTCP) es Multipath-TCP es una extensión de TCP que permite el uso paralelo de múltiples conexiones a Internet. Multipath-TCP ya está implementado para el kernel de Linux, pero aún no está integrado en el kernel upstream oficial.

El código fuente (y algunos núcleos precompilados, incluidas las compilaciones de Android) se pueden encontrar aquí: http://multipath-tcp.org

Fuente adicional con referencia al dispositivo Samsung: MPTCP en dispositivos Android e implementación MultiPath TCP - Linux Kernel .


  1. En otra fuente, habilite la conexión inalámbrica y 4g al mismo tiempo. Los usuarios afirman que pudieron habilitar la red dual con la siguiente solución (citado):

    1. Apague wifi de la manera normal (desde la interfaz de usuario del teléfono) si aún no está apagado.

    Todos los siguientes pasos realizados en un shell raíz:

    1. cargar los controladores

      busybox insmod /system/lib/modules/cfg80211.ko busybox insmod /system/lib/modules/wlan.ko

    2. inicie wpa_supplicant para conectarse a la primera red inalámbrica disponible. El wpa_supplicant.confarchivo que enumero a continuación es el que mantiene automáticamente el teléfono a medida que se une a nuevas redes. Si desea más control (por ejemplo, conectarse solo a una red específica), copie el wpa_supplicant.confarchivo en algún lugar, modifíquelo según sea necesario y especifíquelo en la línea de comando.

    wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf

    1. dhcpcd

    busybox pkill dhcpcd rm /data/misc/dhcp/* dhcpcd wlan0

    1. verificar ruta

    busybox route

    Para mí, esto muestra el valor predeterminado original primero en la lista (pasa por rm net_usb0) seguido del nuevo configurado para la LAN inalámbrica wlan0. Traceroute muestra el tráfico que sale por la primera.

    Ahora, en este punto, si intenta habilitar wifi normalmente desde el teléfono, no funcionará. Para que funcione:

    ifconfig wlan0 down ifconfig wlan0 unplumb rmmod wlan rmmod cfg80211

    Y puedes volver a encender la conexión inalámbrica

Alternativamente con script:

# enable dual-networking:
pkill dhcpcd
svc wifi disable
svc data enable
netcfg wlan0 up
cd /data/misc/wifi/.
wpa_supplicant -B -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
dhcpcd wlan0
ip route add x.x.x.x via x.x.x.y # add any desired local route

# disable dual-networking:
ip route del x.x.x.x/x via x.x.x.y
pkill dhcpcd
pkill wpa_supplicant 
rm -rf /data/misc/wifi/wlan0
netcfg wlan0 down
svc wifi disable
svc data disable

(Se necesita un ejecutor de scripts para ejecutar estos scripts y root; puede obtener uno aquí: SH Script Runner

Y señalaron:

Funciona perfectamente, pero tenga en cuenta que en realidad no ve que se encienda el ícono de wifi, pero si ejecuta, netcfg | grep UPverá que la wlan0interfaz está activa y funcionando (así como el rmnet_usb0 mobile data interface, ambos estarán activos y tendrán la IP esperada) direcciones) y puede acceder a su LAN local mientras sus datos móviles 3g/4g proporcionan su ruta predeterminada al mundo exterior.


  1. Otras soluciones:

Uso de Super Download Lite

Los desarrolladores de la aplicación afirman que tiene la capacidad de realizar redes duales en dispositivos Android combinando redes 3G/4G y Wi-Fi.


  1. Modificación de la tabla de enrutamiento

Otra fuente: http://ironings4.rssing.com/chan-3701516/all_p2.html .

Proporcionó detalles sobre la creación de un script bash para modificar la tabla rotativa para permitir que tanto 3G como 4G funcionen con Wi-Fi. Aquí está el guión:

pkill com.android.phone sleep 30 route add -net 10.0.0.0 netmask 255.0.0.0 dev ppp0 route add -net 15.0.0.0 netmask 255.0.0.0 dev ppp0

Lo anterior es un ejemplo de un par de rangos de direcciones para redirigir a la conexión 3G a la tabla de enrutamiento a través del shell de Linux para usar INTRANET a través de ppp0algunos rangos de direcciones, mientras que todas las demás direcciones de destino normalmente van a través de Wi-Fi.

El truco aquí es forzar una aplicación en el teléfono (o tal vez es un servicio called com.android.phone) probablemente relacionada con la interfaz de radio 3G para que se bloquee mientras está conectado a wifi, el indicador de señal 3G se apagará durante unos segundos y poco después. volverá a la normalidad, pero esta vez con los íconos H (SDPA) y Wifi que se muestran en el área de notificación en la parte superior derecha de la pantalla.


  1. En otro artículo: Deje que la conexión WiFi y 3G funcionen juntas pirateando ConnectivityService.java (migrado a los foros de XDA) Se ofreció cómo realizar la tarea pirateando el servicio de conectividad:

Completamente citado:

“El objetivo del proyecto COIN es utilizar conexiones WiFi y 3G simultáneamente. Por lo tanto, entra en conflicto con la política del Servicio de conectividad, pero no hay una configuración para editar la política y está codificada de forma rígida. Puede encontrar la pista en ConnectivityService.java:handleConnect function.

Nuestra solución actual es bastante brutal, que consiste en enmascarar los ojos del Servicio de conectividad modificando su entrada del controlador de mensajes de la siguiente manera:

// must be stateless – things change under us.
 private class MyHandler extends Handler {
 @Override
 public void handleMessage(Message msg) {
 NetworkInfo info;
 //added by COIN to disable Connectivity Service
 int networkState = 8; //not any following state
 /*use static google dns server for wifi and 3g*/
 if (msg.what == NetworkStateTracker.EVENT_STATE_CHANGED) {
 SystemProperties.set(“net.dns1″, “8.8.8.8″);
 SystemProperties.set(“net.dns2″, “8.8.4.4″);
 bumpDns();
 }
 //////////////////////////////////////////////
 //switch (msg.what) {
 switch (networkState) {
 case NetworkStateTracker.EVENT_STATE_CHANGED:
 info = (NetworkInfo) msg.obj;
 int type = info.getType();

…..

And then compile the modified ConnectivityService.java in the android source code tree, you can get an new services.jar file in framework directory. Replace the existing services.jar on the cell phone with the following adb commands, then reboot the phone

 adb shell “mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system”
adb shell “chmod 0777 /system/framework”
adb push services.jar /system/framework
 adb shell “chmod 0644 /system/framework/services.jar”
adb shell “chmod 0755 /system/framework”
.”

Conclusión

Si bien no pude probar algunas de las soluciones yo mismo, aprendí que la mayoría de ellas podrían haber funcionado en versiones anteriores de Android (según la evidencia), por lo que no estoy seguro de si lo mismo es aplicable en Android 6. Es probable que esta función funcione. implementarse con tecnologías emergentes evidenciadas por la tecnología Multipath TCP descrita. Para todas las soluciones, se requiere root.

Espero que esto traiga algo de luz.

Referencias

(Incluido en el cuerpo del texto)

Es 2017 ahora. Mucho antes de los dispositivos móviles, las personas escribían aplicaciones de escritorio que se conectaban a varias interfaces de red simultáneamente. Era necesario manejar eso en la aplicación, no en el nivel del sistema. iOS lo admite perfectamente, siempre que Linux, Windows, OS X. Los desarrolladores del equipo de Android rompieron Linux que usaron para construir Android e introdujeron un interruptor flip-flop en el Kernel para cambiar entre Wi-Fi y 3G. Muy triste. Algunos desarrolladores intentaron eliminar eso durante varios años, pero estaba tan fuertemente integrado en el Kernel que se dieron por vencidos.