0 votos

El dispositivo Galaxy S5 no recibe el paquete ip

Tengo la siguiente configuración:

Android Galaxy S5 Mini. Versión de Android 5.1.1.

Tengo 2 interfaces de red:

  1. Interfaz1 con ip: 192.168.5.1
  2. Interfaz2 con ip: 192.168.5.10

Creo un DatagramSocket usando el SDK de Android y lo enlazo a la dirección: 192.168.5.10(Interfaz 2), puerto 2525. Pongo este socket en recepción y espero los paquetes. Utilizo otro dispositivo para enviar los paquetes.

Paquetes de la dirección ip: 192.168.5.4 se recibe.

Paquetes desde la dirección ip (dispositivo diferente): 192.168.5.1 (igual que la ip de la interfaz 1 del dispositivo) nunca se recibe.

Parece que la pila de red rechaza los paquetes que tienen una dirección ip de origen que existe en el dispositivo, independientemente de la interfaz en la que se recibió.

Si modifico la dirección ip de la interfaz 1 a algo distinto de 192.168.5.1, funciona bien.

Dispositivos en los que no lo hizo pasar:

  1. Samsung tablet T113 Android 4.4.4 (rom de stock)
  2. LG G4 Android 6.0 (rom de stock)
  3. LG Nexus 5X Android 7.1.2 (rom de stock)

Dispositivos en los que hizo pasar:

  1. Galaxy S5 Mini Android 5.1.1 (rom de stock)
  2. Galaxy Note 3 Android 6.0.1 (CyanogenMod)
  3. One+1 Android 6.0.1 (CyanogenMod)

Cuál es el mecanismo que rechaza el paquete con IP de origen 192.168.5.1 (igual que la ip de la interfaz 1 del dispositivo)?

enter image description here

0 votos

Sospecho que hay un conflicto de direcciones IP, además no se puede hacer coincidir la dirección ip del gateway con la del cliente.

0 votos

@xavier_fakerat He conseguido utilizar el VPNService de Android e inyectar un paquete al sistema. Si tiene la ip de origen de cualquier interfaz - se produce el problema. No parece estar relacionado con el problema de GW/Client.

1 votos

+1 Sí, tienes razón, de hecho me topé con esto aquí: unix.stackexchange.com/questions/106291/ . Creo que esto necesita Root

1voto

noti Puntos 8

He encontrado por qué sucede esto, pero no estoy seguro de si puedo hacer algo al respecto sin Root. Hay una configuración del sistema por interfaz de red llamada accept_local . Por ejemplo: net.ipv4.conf.wlan0.accept_local . Cuando se ajusta a 0 no puede recibir paquetes de otra interfaz local. Probablemente, cuando funciona en otros dispositivos, esta configuración se establece en 1 . En el Galaxy Note 3 se ha configurado como 0 . Una vez que hice esto, todo empezó a funcionar, pero se necesitaba Root.

Actualización

Encontré un sitio que enumera los valores de las variables del sistema: https://census.tsyrklevich.net/

Específicamente:

  1. https://census.tsyrklevich.net/sysctls/net.ipv4.conf.wlan0.accept_local
  2. https://census.tsyrklevich.net/sysctls/net.ipv4.conf.wlan0.rp_filter

1 votos

Formato fijo

0 votos

@xavier_fakerat He comprobado el valor de accept_local en los dispositivos que han funcionado sin ninguna modificación. accept_local = 0 lo que significa que no debería haber funcionado con ellos. Entonces, ¿cómo es que lo hizo?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X