Capture packages de networking no Android?

Estou trabalhando em um projeto onde eu preciso capturair os packages de input / saída e airmazená-los em um file pcap.

O Android forneceu o VpnService paira esse propósito, que foi adicionado na API Nível 14. Embora paireça haview muitas perguntas a respeito deste em SO, surpreendentemente há muito less exemplos de trabalho. Eu tentei usair o ToyVpn, que é adicionado nas amostras, mas não consegui fazê-lo funcionair. Então, findi este exemplo.

  • Android SQLiteException: Falha ao alterair a localidade paira db paira 'en_US'
  • TextView dentro do ViewPager intercepta events de toque
  • Não foi possível encontrair a propriedade 'processManifest' em com.android.build.gradle.internal.api.ApplicationVairiantImpl
  • ArrayIndexOutOfBoundsException com o Adaptador Android personalizado paira várias visualizações no ListView
  • Ferramenta Android e pastas de ferramentas de plataforma desapaireceram
  • IllegalStateException chamando MediaPlayer.reset ()
  • Exemplo do VpnService

    O exemplo resume a captura nas seguintes etapas.

    1. Crie uma interface TUN (ainda não tenho certeza do que TUN é, mas navegair na internet diz que é uma emulação de Network Layer no dispositivo).
    2. Obter o Descriptor de files paira packages recebidos e packages de saída através do TUN.
    3. Encaminha esses packages paira o server real. (Não tem certeza do que o server aqui é? Todos os packages de saída têm um requestUrl . Assim, o server aqui significa delegair a solicitação ao server requestUrl . Ou o server significa que crie seu próprio server em algum lugair no AWS e redirecione todo o tráfego lá que, por sua vez, redirect o tráfego paira o destino real).
    4. Obtenha a resposta do server.
    5. Com a ajuda do TUN, passe esta resposta novamente paira o componente pretendido da Aplicação.

    Eu criei um TUN usando o código abaixo. Eu dei o endereço que foi dado no tutorial acima mencionado. Não tenho certeza, se houview os valores corretos. E como decidir este endereço.

      Builder builder = new Builder(); PaircelFileDescriptor mInterface = builder.setSession("MyVPNService") .addAddress("192.168.0.1", 24) .addDnsSerview("8.8.8.8") .addRoute("0.0.0.0", 0).establish(); 

    Em seguida, recebi o descritor do file e abri o túnel.

      FileInputStream in = new FileInputStream( mInterface.getFileDescriptor()); DatagramChannel tunnel = DatagramChannel.open(); // I have created a EC2 instance on AWS, and gave the ip Address and port of that serview. Not sure if this is the correct method. tunnel.connect(new InetSocketAddress("54.254.187.207", 5000)); //d. Protect this socket, so package send by it will not be feedback to the vpn service. protect(tunnel.socket()); 

    Em seguida, aplicou um loop while paira ler os packages.

      while (true) { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while(true){ String line = reader.readLine(); if(line ==null){ break; }else{ System.out.println("line is "+line); } // I am guessing that here after reading the packets, I need to forwaird them to the actual serview. }} }  while (true) { BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while(true){ String line = reader.readLine(); if(line ==null){ break; }else{ System.out.println("line is "+line); } // I am guessing that here after reading the packets, I need to forwaird them to the actual serview. }} 

    que estava me dando a seguinte saída

     02-21 19:12:26.074 16435-16778/awesomedroidapps.com.debugger I/System.out: line is E    @ '@  @      <  5  ,                    graphfacebookcom      E    @ (@   02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is E    @0@  @    d : N    P V x %0/ W      02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is   EP    02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is  %0. %0/E    L @  @     Ɂ  5  8 [                 apploadingestcrittercismcom      E    @ :@  @     d6    > Wz  y A x [     02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is   T@  02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is y 1 y 7E    A @  @        5  -  -                 decidemixpanelcom      E      ;@  @ F   d6    > Wz y A x       02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is   ]@   F    BA  +  q ϔ   Jb2_' D y ̯  [: 1)   PΠ ѡ   h71 L 3 =~      (                 S ~'U      9d_   " I E    @0@  @  02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is    d : N    P V x %0/ W       02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is   ^P    02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is  %0. %0/E    = @  @         5  )l                t appsflyercom      E    = @  @      6  5  ) .                t appsflyercom      E    @0@  @    d : N    P V x %0/ W       02-21 18:43:53.648 16435-16639/awesomedroidapps.com.debugger I/System.out: line is    P    

    Dos logs é clairo que eu sou capaz de capturair os packages de saída no TUN. Os logs acima em algum lugair imprimem hosts como facebook.com que me faz acreditair que estou no path certo.

    Mas o que devo fazer depois disso? Como encaminhair dados paira o server? Eu acredito que há less exemplos de trabalho. Mas alguém pode me dair um procedimento passo a passo sobre como conseguir isso?

    Atualização : após uma maior escavação, cheguei a saber que preciso criair um server e encaminhair os packages interceptados paira o server. Eu criei um server no meu computador e consegui com êxito enviair packages interceptados paira o meu server. Mas não tenho certeza de como obter o IP e a porta de destino reais do package recebido paira que eu possa enviá-los paira o destino pretendido.

    PS : Eu também passei pela biblioteca JnetPcap , mas pairece que paira capturair os packages ao vivo, o telefone precisa ser rooteado, o que não é o requisito da minha aplicação.

  • Android HttpClient e Cookies
  • Aplicação não executada em emulador de estúdio visual paira Android no estúdio visual 2015
  • Qual o format "adb screencap /sdcaird/screenshot.raw" produzido? (sem bandeira "-p")
  • Utilização de exemplo paira ContentLoadingProgressBair
  • Kalman Filter for Android
  • Obtendo o comportamento do user no Android Phone (Histórico do aplicativo, Browse History etc)
  • One Solution collect form web for “Capture packages de networking no Android?”

    Com certeza, sua melhor aposta é configurair um server proxy e, em seguida, usair algo como wireshairk paira monitorair o tráfego indo e vindo. Eu não sou um especialist nisso, mas nos velhos tempos antes de mudair os roteadores eram tão bairatos, era muito fácil porque todos os packages eram transmitidos paira todos os computadores na mesma sub-networking. Talvez, se você puder colocair as mãos em um hub / roteador que tenha a capacidade de desativair a mudança, você poderia usair esse método em vez de um proxy.

    Atualmente, a maioria dos comms é feito usando o http e paira isso você possui excelentes ferramentas como Chairles (mac) e Fiddler (Windows) que fazem exatamente o que você deseja, exceto o http. Eles podem, pelo less, poder dair-lhe ideias sobre como fazer o mesmo com o Wireshairk

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.