android-developers
[Arriba] [Todas las Listas]

[android-developers] VpnService

To: Android Developers <android-developers@xxxxxxxxxxxxxxxx>
Subject: [android-developers] VpnService
From: Mattia <mattia.anedda@xxxxxxxxx>
Date: Wed, 6 Apr 2016 08:39:07 -0700 (PDT)
Delivery-date: Wed, 06 Apr 2016 11:39:42 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=sender:date:from:to:message-id:subject:mime-version :x-original-sender:reply-to:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=eaKUXLiUwVXrKPTSf6G2oct/X/LEcYbIn5EES6GemAw=; b=uAgKSdNN6REQ3NLGSEeLueVPumGCTsXFqSOyP7wRJbjaAnCicG3sXiVS6limx80PSC /Dom4aMuo0RqFheSQDvhb+zq+NbdC8CJzF6+UGMjA7Y2OpQ8w9qwjoWJnTHNOXoBjg2I Y684bhFNaInZ/SyJ8l9snI8/LUQ/VEdRCt8cXj8NCzr5HO0MYAWuKhSS2Sr2Ixy4hSYF ZewwFF3l52v6IPDGVom/HE3tUZFqH6mDnaeLtK1EJeBQkgPoOqKSc+AsAFIC3VR+q1Ex MGqUoSQn+Uxck2zkVWxoh0QtU85ig7p14mawcWmGJvx76eFhzheSdeCJK2KZ5Ckabx0M KyMw==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:message-id:subject:mime-version:x-original-sender :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:list-subscribe:list-unsubscribe; bh=eaKUXLiUwVXrKPTSf6G2oct/X/LEcYbIn5EES6GemAw=; b=NLANL8dCfIgDEy8LQTeS/YV4+7iRaAYvcDZ7MXiFkZ+HJMPQj7dY9fkfdt7VUsFCzx 36oR4qTG4wgViF+PdbzIZc2D8aZ4XmXQ32nIuBqq/ksP3QNUn7rawSB+3z+3KMjt4PDL RIUr9/AfvBKt/sa5NO18jRarCGulJDlitJaWjXiQPcnBiJRjnGEiJKPDtRxOCiFu3/P/ 5OlSc/OBQRT4dGgcFKhTNL71BRtopzmroyVUiOSbjg8YYi9XJsvFLcEwAQ9xEEl8bq6W FNZ/G6SvxbDUkxzSH4MDOnQy8XKHBX4tXXp8DaouF+MPPs3rSDHHVjkpn5VylNmjBap8 UAkg==
Envelope-to: traductor@xxxxxxxxxxx
List-archive: <https://groups.google.com/group/android-developer>
List-help: <https://groups.google.com/support/>, <mailto:android-developers+help@googlegroups.com>
List-id: <android-developers.googlegroups.com>
List-post: <https://groups.google.com/group/android-developers/post>, <mailto:android-developers@googlegroups.com>
List-subscribe: <https://groups.google.com/group/android-developers/subscribe>, <mailto:android-developers+subscribe@googlegroups.com>
List-unsubscribe: <mailto:googlegroups-manage+364598216046+unsubscribe@googlegroups.com>, <https://groups.google.com/group/android-developers/subscribe>
Mailing-list: list android-developers@xxxxxxxxxxxxxxxx; contact android-developers+owners@xxxxxxxxxxxxxxxx
Reply-to: android-developers@xxxxxxxxxxxxxxxx
Sender: android-developers@xxxxxxxxxxxxxxxx

*Hi *i Sabría una información, tengo que desarrollar un *Android aplicación, necesito a *sniff los paquetes que vienen de una conexión segura.


Sé que puesto que esto lo es uso posible *tcpdump, pero no lo puedo utilizar porque 
necesito permiso de raíz de mi dispositivo, no puedo dar a mi dispositivo este 
permiso. Existe alguna alternativa que puedo considerado ?


Conseguía para descubrir *Vpn Servicio, pero *i no entiende si lo puedo utilizar como 
*tcpdump, por ejemplo si puedo pasar el mismo parámetro que utilizo en 
un *tcpdump orden.

Necesito obtener un .*pcap O archivo similar con el resultado del "*sniffed" 
lió.


Alguien me puede ayudar ?


De hecho *i ha visto correo diferente en el internet pero nada me ayudan.





Importación *android.Contenido.*Intent;
Importación *android.Red.*VpnService;
Importación *android.*os.Entorno;
importación *android.*os.*ParcelFileDescriptor;
Importación *java.*io.Archivo;
importación *java.*io.*FileInputStream;
Importación *java.*io.*FileOutputStream;
Importación *java.Red.*InetSocketAddress;
Importación *java.*nio.*ByteBuffer;
Importación *java.*nio.Canales.*DatagramChannel;

Clase pública *MyVpnService extiende *VpnService

 #adj_nom #privado *mThread;
 privado *ParcelFileDescriptor *mInterface;
 *FileInputStream dentro;

 //un. Configurar un constructor para la interfaz.
 Constructor de constructor = Constructor nuevo();

 // interfaz de Servicios
 @*Override
 público *int *onStartCommand(*Intent *intent, *int banderas, *int *startId)
 // #verbcj una sesión nueva por crear un hilo nuevo.
 *mThread = Hilo nuevo(nuevo *Runnable()
 @#unknown{^*Override
 público *void carrera()
 #verbcj

 //#det. Configurar el *TUN y conseguir la interfaz.
 *mInterface = Constructor.*setSession("*MyVPNService")
 .*addAddress("216.58.210.195", 24)
 .*addDnsServer("8.8.8.8")
 .*addRoute("0.0.0.0", 0).Establece();

 //*b. Paquetes para ser enviados es *queued en esta corriente de entrada.
 En = nuevo *FileInputStream(*mInterface.*getFileDescriptor());

 //*b. Paquetes necesidad recibida para ser escrito a esta corriente de producción.
 *FileOutputStream Fuera de = nuevo *FileOutputStream(*mInterface.*getFileDescriptor());

 //*c. El *UDP el canal puede ser utilizado para pasar/conseguir *ip paquete a/de *server
 *DatagramChannel túnel = *DatagramChannel.Abierto();

 // Conecta al remoto *server
 túnel.Conecta(nuevo *InetSocketAddress("127.0.0.1", 8087));

 //*d. Proteger este *socket, así que el paquete envía por él no será *feedback al *vpn servicio.
 Protege(túnel.*socket());


 //*e. Uso un bucle para pasar paquetes.
 *ByteBuffer Paquete = *ByteBuffer.*allocate(32767);

 // utilizamos un temporizador para determinar el estado del túnel. Trabaja en ambos lados. Un valor positivo significa enviar, y //
 ninguno otro significa recibir. Empezamos con recibir.
 *int Temporizador = 0;

 Archivo *sdCard = Entorno.*getExternalStorageDirectory();
 Archivo *dir = Archivo nuevo (*sdCard.*getAbsolutePath() + "/*WEBPMAGENT/");
 *dir.*mkdirs();
 El Archivo archiva = Archivo nuevo(*dir, "informe.*txt");

 // Mantenemos enviar paquetes *till algo va mal.
 Mientras (cierto)
 // #verbcj que no hicimos cualquier progreso en este *iteration.
 *boolean *idle = Cierto;
 // Leído el *outgoing paquete de la corriente de entrada.
 *int Longitud = dentro.Leído(paquete.Variedad());
 si (longitud > 0)
 // #verbcj el *outgoing paquete al túnel.
 Paquete.Límite(longitud);
 túnel.Escribe(paquete);
 paquete.Claro();
 // podría haber más *outgoing paquetes.
 *idle = Falso;
 // Si recibíamos, cambio a envío.
 Si (temporizador < 1)
 #nom = 1;
 }
 }
 // Leído el *incoming paquete del túnel.
 Túnel = de longitud.Leído(paquete);
 si (longitud > 0)
 // #verbcj mensajes de control, los cuales empiezan con *zero.
 Si (paquete.Consigue(0) != 0)
 // #verbcj el *incoming paquete a la corriente de producción.
 Fuera.Escribe(paquete.Variedad(), 0, longitud);
 // fuera de = nuevo *FileOutputStream(archivo);

 Sistema.Fuera.*println("PRUEBA"+fuera.*toString());
 }
 Paquete.Claro();
 // podría haber más *incoming paquetes.
 *idle = Falso;
 // Si enviábamos, cambio a recibir.
 Si (temporizador > 0)
 #nom = 0;
 }
 }
 // Si somos *idle o esperando para la red, sueño para una
 // fracción de tiempo para evitar *busy *looping.
 Si (*idle)
 #nom.Sueño(100);
 // Aumento el temporizador. Esto es *inaccurate pero bastante bueno,
 // desde todo es manejado en no-bloqueando modo.
 Temporizador += (temporizador > 0) ? 100 : -100;
 // estamos recibiendo para un tiempo largo pero no enviando.
 Si (temporizador < -15000)
 // #verbcj mensajes de control vacío.
 Paquete.Puesto((*byte) 0).Límite(1);
 puesto que (*int *i = 0; *i < 3; ++*i)
 #nom.Posición(0);
 túnel.Escribe(paquete);
 }
 paquete.Claro();
 // Cambio a envío.
 Temporizador = 1;
 }
 // estamos enviando para un tiempo largo pero no recibiendo.
 Si (temporizador > 20000)
 #verbcj nuevo *IllegalStateException("Cronometrado fuera de );"
 }
 }
 }
 } coge (Excepción *e)
 // #verbcj cualquier excepción
 *e.*printStackTrace();
 } Finalmente
 #inf
 #cnj (*mInterface != *null)
 #unknown{^*mInterface.Cercano();
 *mInterface = *null;
 }
 } coge (Excepción *e) {

 }
 }
 }

 }, "*MyVpnRunnable");

 //inicio el servicio
 *mThread.Inicio();
 INICIO de regreso_*STICKY;
 }

 @*Override
 público *void *onDestroy()
 // #unknown{^*TODO Coche-colilla de método generado
 si (*mThread != *null)
 #unknown{^*mThread.Interrumpe();
 }
 *super.*onDestroy();
 }
}


Esto es un ejemplo de código, *i *dont entiende: 1) Cómo para conseguir paquete con *VpnService 
y escribir un *pcap archivo...

-- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*Android *Developers" grupo.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx.
A correo a este grupo, envía *email a *android-developers@xxxxxxxxxxxxxxxx.
Visita este grupo en *https://grupos.*google.*com/Grupo/*android-*developers.
Para ver esta discusión en la visita de web *https://grupos.*google.*com/*d/*msgid/*android-*developers/67954260-4*b7*d-476*f-97*b1-*ce7*d84*c827*e5%40*googlegroups.*com.
Para más opciones, visita *https://grupos.*google.*com/*d/*optout.

Hi i would know an information, I must develop an Android application, I 
need to sniff the packages that come from a certain connection.


I know that for this is it possible use tcpdump, but I can't use it because 
I need root permission from my device, I can't give to my device these 
permission. Exist some alternative that I can considered ?


I got to find out Vpn Service, but i don't understand if I can use it like 
tcpdump, for example if I can pass the same parameter that I use in a 
tcpdump command.

I need to obtain a .pcap or similar file with the result of the "sniffed" 
packed.


someone can help me ?


Actually i have seen different post on internet but nothing help me.





import android.content.Intent;
import android.net.VpnService;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;

public class MyVpnService extends VpnService {

 private Thread mThread;
 private ParcelFileDescriptor mInterface;
 FileInputStream in;

 //a. Configure a builder for the interface.
 Builder builder = new Builder();

 // Services interface
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
 // 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")
 .addAddress("216.58.210.195", 24)
 .addDnsServer("8.8.8.8")
 .addRoute("0.0.0.0", 0).establish();

 //b. Packets to be sent are queued in this input stream.
 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 remote server
 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());


 //e. Use a loop to pass packets.
 ByteBuffer packet = ByteBuffer.allocate(32767);

 // We use a timer to determine the status of the tunnel. It
 // works on both sides. A positive value means sending, and
 // any other means receiving. We start with receiving.
 int timer = 0;

 File sdCard = Environment.getExternalStorageDirectory();
 File dir = new File (sdCard.getAbsolutePath() + "/WEBPMAGENT/");
 dir.mkdirs();
 File file = new File(dir, "report.txt");

 // We keep forwarding packets till something goes wrong.
 while (true) {
 // Assume that we did not make any progress in this iteration.
 boolean idle = true;
 // Read the outgoing packet from the input stream.
 int length = in.read(packet.array());
 if (length > 0) {
 // Write the outgoing packet to the tunnel.
 packet.limit(length);
 tunnel.write(packet);
 packet.clear();
 // There might be more outgoing packets.
 idle = false;
 // If we were receiving, switch to sending.
 if (timer < 1) {
 timer = 1;
 }
 }
 // Read the incoming packet from the tunnel.
 length = tunnel.read(packet);
 if (length > 0) {
 // Ignore control messages, which start with zero.
 if (packet.get(0) != 0) {
 // Write the incoming packet to the output stream.
 out.write(packet.array(), 0, length);
 // out = new FileOutputStream(file);

 System.out.println("TEST"+out.toString());
 }
 packet.clear();
 // There might be more incoming packets.
 idle = false;
 // If we were sending, switch to receiving.
 if (timer > 0) {
 timer = 0;
 }
 }
 // If we are idle or waiting for the network, sleep for a
 // fraction of time to avoid busy looping.
 if (idle) {
 Thread.sleep(100);
 // Increase the timer. This is inaccurate but good enough,
 // since everything is operated in non-blocking mode.
 timer += (timer > 0) ? 100 : -100;
 // We are receiving for a long time but not sending.
 if (timer < -15000) {
 // Send empty control messages.
 packet.put((byte) 0).limit(1);
 for (int i = 0; i < 3; ++i) {
 packet.position(0);
 tunnel.write(packet);
 }
 packet.clear();
 // Switch to sending.
 timer = 1;
 }
 // We are sending for a long time but not receiving.
 if (timer > 20000) {
 throw new IllegalStateException("Timed 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;
 }

 @Override
 public void onDestroy() {
 // TODO Auto-generated method stub
 if (mThread != null) {
 mThread.interrupt();
 }
 super.onDestroy();
 }
}


This is one example of code, i dont understand: 1) How to get packet with 
VpnService and write a pcap file...

-- 
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to android-developers@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-developers/67954260-4b7d-476f-97b1-ce7d84c827e5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<Anterior por Tema] Tema Actual [Siguiente por Tema>
  • [android-developers] VpnService, Mattia <=