Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Detección de solicitud de aplicación de VPN Service + Packets bloqueando

Estoy tratando de averiguar qué aplicación en mi dispositivo ha hecho cualquier solicitud de uso de Internet (llamado cualquier api, etc) .. Para esto he creado una clase extendida de la clase "VpnService" sólo para asegurarse de que mi dispositivo de tráfico a través de mí, aunque No he conectado realmente a un VPN en lugar de otro lo estoy fingiendo y dejando el tráfico pasar a través de mí a 0.0.0.0. El código está abajo, funciona bien, pero quiero averiguar qué aplicación ha iniciado la solicitud de uso de Internet o cuyo paquete está entrando / saliendo en el principal, mientras que el bucle a continuación. Además, ¿hay una manera de detener las solicitudes de cualquier aplicación – de cualquier manera [entrante y saliente]?

*private Thread mThread; private ParcelFileDescriptor mInterface; //a. Configure a builder for the interface. Builder builder = new Builder(); // Services interface @Override public int onStartCommand(Intent intent, int flags, int startId) { this.getApplicationInfo(); // Start a new session by creating a new thread. mThread = new Thread(new Runnable() { @Override public void run() { try { //a. Configure the TUN and get the interface. mInterface = builder.setSession("MyVPNService") .setMtu(1500) .addAddress("192.168.1.66", 32) .addRoute("0.0.0.0", 0).establish(); //b. Packets to be sent are queued in this input stream. FileInputStream in = new FileInputStream( mInterface.getFileDescriptor()); //b. Packets received need to be written to this output stream. FileOutputStream out = new FileOutputStream( mInterface.getFileDescriptor()); //c. The UDP channel can be used to pass/get ip package to/from server DatagramChannel tunnel = DatagramChannel.open(); // Connect to the server, localhost is used for demonstration only. tunnel.connect(new InetSocketAddress("127.0.0.1", 8087)); //d. Protect this socket, so package send by it will not be feedback to the vpn service. protect(tunnel.socket()); // ByteBuffer packet = ByteBuffer.allocate(32767); //e. Use a loop to pass packets. while (true) { //---> Here in this loop the packets are coming in and out.. } } } catch (Exception e) { // Catch any exception e.printStackTrace(); } finally { try { if (mInterface != null) { mInterface.close(); mInterface = null; } } catch (Exception e) { } } } }, "MyVpnRunnable"); //start the service mThread.start(); return START_STICKY; }* 

Reno Jones

  • Programe PPTP / L2TP VPN de forma programática en Android
  • Paquete enviado pero no puede recibir paquetes
  • Clase Android VpnService y su clase de constructor
  • Método para pasar nombre de usuario y contraseña en VpnService.Builder
  • ¿Cómo encontrar el estado de la conexión VPN a través de API de marco o cualquier otro método eficiente?
  • ¿Cómo están creando nuevos perfiles de aplicaciones VPN existentes en Android 2.0 - 2.3?
  • Cómo fusionar la aplicación de cliente OpenVPN con otra aplicación para Android?
  • Conectar pptp vpn con android vpnservice
  • 2 Solutions collect form web for “Detección de solicitud de aplicación de VPN Service + Packets bloqueando”

    Me temo que esto no se puede hacer sólo con la ayuda de VpnService. No puede obtener la información necesaria con las API de VpnService normales.

    Sin embargo, esto es trivial con iptables (y, por supuesto, un teléfono con raíces …) así:

    iptables -t mangle -A PREROUTING -m owner --uid-owner bad_app_uid -j DROP

    Tendrás que

    1. Root el teléfono
    2. Compile su propio binario iptables con todas las extensiones necesarias
    3. Construir la línea de comandos de iptables en Java
    4. Ejecutar iptables

    No tengo ni idea de bloquear el tráfico entrante por aplicación, pero no parece muy necesario.

    Si usted quiere darle una oportunidad, https://github.com/shadowsocks/shadowsocks-android compila iptables que supongo que podría funcionar para usted también. BTW no tengo nada que ver con la aplicación mencionada.

    EDIT: Android 5.0 VpnService tiene varias API nuevas como addAllowedApplication y addDisallowedApplication , pero "disallow" aquí sólo significa que la aplicación especificada sólo pasará por alto la VPN.

    TrafficStats puede decirle durante un período de tiempo que la aplicación ha accedido a Internet. A continuación, utilice iptables para bloquear el acceso a Internet de una aplicación específica.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.