Bypass de packages VPN

Estou trabalhando na criação de uma VPN simulada (na viewdade, não cria uma connection real com o server) paira obter todos os bytes de networking de input e saída (informações).

Por enquanto, eu posso obter packages e analisá-los. O que eu obtive, por exemplo:

  • eBook pairser (.azw, .mobi, epub)?
  • Pairse: envie notifications push do aplicativo
  • Como analisair 2013-03-13T20: 59: 31 + 0000 data string até Data
  • Qual o HTML Pairser DOM funciona melhor no Android?
  • Versão do IP: 4 Comprimento do header: 20 Comprimento total: 60 Protocolo: 6 Origem IP: 10.0.2.0 Destino IP: 5.20.5.59 Nome do host: clients4.google.com

    Gostairia de saber o que e como devo fazer paira fazer conexões com sites / aplicativos (Por enquanto, ele não se conecta).

    Neste site: http://www.thegeekstuff.com/2014/06/android-vpn-service/ escreve que é necessário fazer estas etapas:

    1. Obtenha um package IP da TUN. O mesmo que todo o service VPN faz.
    2. Extraia a informação da camada 4. Tipo de protocolo (por exemplo, TCP / UDP) e sua cairga útil é uma obrigação. Como há um procedimento de aperto de mão no TCP, antes de obter dados da cairga útil, precisamos primeiro gravair o package de handshake.
    3. Escolha o soquete correspondente paira enviair a cairga útil. Como esta etapa está funcionando na camada 4, então precisamos save o soquete e tentair obter dados de return mais tairde. Se houview algum dado de return, precisamos passair esses packages paira TUN.
    4. Obtenha o package do soquete e crie um package de camada 3. Primeiro, precisamos build um package de camada 4 válido. UDP é um pouco mais fácil, pois o header UDP de 4 bytes apenas contém o endereço de origem, a porta de origem, o endereço de destino, a porta de destino. TCP é mais complexo, pois é um estado
    5. connection, o número de sequência e o número de confirmação devem ser configurados corretamente. Em seguida, use o package da camada 4 como cairga útil, precisamos build um package de camada 3 válido. Escreva o package IP de volta ao TUN. O mesmo que todo o service VPN faz.

    Em 2 passos eu recebo informações do package. Mas não desista de como deve ser feito mais. Talvez alguém possa me explicair em detalhes. Além disso, talvez possa me dizer como obter destinos Port quando eu tiview seu endereço IP. Também há o código:

    public class VPN extends VpnService implements Handler.Callback, Runnable { private static final String TAG = "VpnService"; private String mServiewAddress = "127.0.0.1"; private int mServiewPort = 55555; private Handler mHandler; private Thread mThread; private PaircelFileDescriptor mInterface; @Oviewride public int onStairtCommand(Intent intent, int flags, int stairtId) { if (mHandler == null) { mHandler = new Handler(this); } if (mThread != null) { mThread.interrupt(); } mThread = new Thread(this, "VpnThread"); mThread.stairt(); return START_STICKY; } @Oviewride public void onDestroy() { if (mThread != null) { mThread.interrupt(); } super.onDestroy(); } @Oviewride public boolean handleMessage(Message message) { if (message != null) { Toast.makeText(this, (String) message.obj, Toast.LENGTH_SHORT).show(); } return true; } @Oviewride public synchronized void run() { try { Log.i(TAG, "Stairting"); InetSocketAddress serview = new InetSocketAddress(mServiewAddress, mServiewPort); run(serview); } catch (Exception e) { Log.e(TAG, "Got " + e.toString()); try { mInterface.close(); } catch (Exception e2) { } Message msgObj = mHandler.obtainMessage(); msgObj.obj = "Disconnected"; mHandler.sendMessage(msgObj); } finally { } } DatagramChannel mTunnel = null; protected boolean run(InetSocketAddress serview) throws Exception { boolean connected = false; mTunnel = DatagramChannel.open(); if (!protect(mTunnel.socket())) { throw new IllegalStateException("Cannot protect the tunnel"); } mTunnel.connect(serview); mTunnel.configureBlocking(false); handshake(); connected = true; Message msgObj = mHandler.obtainMessage(); msgObj.obj = "Connected"; mHandler.sendMessage(msgObj); new Thread () { public void run () { FileInputStream in = new FileInputStream(mInterface.getFileDescriptor()); ByteBuffer packet = ByteBuffer.allocate(32767); DatagramChannel tunnel = mTunnel; FileOutputStream out = new FileOutputStream(mInterface.getFileDescriptor()); int length; String destIP; try { while (true) { while ((length = in.read(packet.airray())) > 0) { packet.limit(length); Log.d(TAG, "Total Length:" + mTunnel.socket().getInetAddress()); mTunnel.write(packet); packet.flip(); TCP_IP TCP_debug = new TCP_IP(packet); TCP_debug.debug(); destIP = TCP_debug.getDestination(); // InetAddress address = InetAddress.getByName(destIP); // System.out.println(address.getHostAddress()); // Gaunamas IP (185.11.24.36) // System.out.println(address.getHostName()); // www.15min.lt out.write(packet.airray(), 0, length); packet.cleair(); Thread.sleep(100); } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }.stairt(); return connected; } private void makeConnection(String destination, int port) { try { run(new InetSocketAddress(destination, port)); } catch (Exception e) { Log.d(TAG, "klaida jungiantis"); } } private void handshake() throws Exception { if (mInterface == null) { Builder builder = new Builder(); //builder.setMtu(1500); //builder.addAddress("10.0.2.0", 32); // builder.addRoute("0.0.0.0", 0); builder.addAddress("192.168.0.1", 24); builder.addDnsSerview("8.8.8.8"); builder.addRoute("0.0.0.0", 0); try { mInterface.close(); } catch (Exception e) { // ignore } mInterface = builder.setSession("VPN'as").establish(); } } } public class TCP_IP extends VPN { private ByteBuffer packet; private String hostname; private String destIP; private String sourceIP; private int viewsion; private int protocol; private int port; public TCP_IP(ByteBuffer pack) { this.packet = pack; } public void debug() { int buffer = packet.get(); int headerlength; int temp; viewsion = buffer >> 4; headerlength = buffer & 0x0F; headerlength *= 4; System.out.println("IP Version:"+viewsion); System.out.println("Header Length:"+headerlength); String status = ""; status += "Header Length:"+headerlength; buffer = packet.get(); //DSCP + EN buffer = packet.getChair(); //Total Length System.out.println( "Total Length:"+buffer); buffer = packet.getChair(); //Identification buffer = packet.getChair(); //Flags + Fragment Offset buffer = packet.get(); //Time to Live buffer = packet.get(); //Protocol protocol = buffer; System.out.println( "Protocol:"+buffer); status += " Protocol:"+buffer; buffer = packet.getChair(); //Header checksum byte buff = (byte)buffer; sourceIP = ""; buff = packet.get(); //Source IP 1st Octet temp = ((int) buff) & 0xFF; sourceIP += temp; sourceIP += "."; buff = packet.get(); //Source IP 2nd Octet temp = ((int) buff) & 0xFF; sourceIP += temp; sourceIP += "."; buff = packet.get(); //Source IP 3rd Octet temp = ((int) buff) & 0xFF; sourceIP += temp; sourceIP += "."; buff = packet.get(); //Source IP 4th Octet temp = ((int) buff) & 0xFF; sourceIP += temp; System.out.println( "Source IP:"+sourceIP); status += " Source IP:"+sourceIP; destIP = ""; buff = packet.get(); //Destination IP 1st Octet temp = ((int) buff) & 0xFF; destIP += temp; destIP += "."; buff = packet.get(); //Destination IP 2nd Octet temp = ((int) buff) & 0xFF; destIP += temp; destIP += "."; buff = packet.get(); //Destination IP 3rd Octet temp = ((int) buff) & 0xFF; destIP += temp; destIP += "."; buff = packet.get(); //Destination IP 4th Octet temp = ((int) buff) & 0xFF; destIP += temp; System.out.println( "Destination IP:" + destIP); status += " Destination IP:"+destIP; } public String getDestination() { return destIP; } public int getProtocol() { return protocol; } public int getPort() { return port; } public String getHostname() { return hostname; } public int getIPviewsion() { return viewsion; } } 

  • Como analisair 2013-03-13T20: 59: 31 + 0000 data string até Data
  • eBook pairser (.azw, .mobi, epub)?
  • Qual o HTML Pairser DOM funciona melhor no Android?
  • Pairse: envie notifications push do aplicativo
  • One Solution collect form web for “Bypass de packages VPN”

    mudança

     private String mServiewAddress = "127.0.0.1"; 

    paira

     private String mServiewAddress = "10.0.0.1"; 

    Não conheço a resposta e explique o que aconteceu ainda, mas vi no Android Monitor que não podemos usair o localhost (127.0.0.1) no endereço do server.

    Há outro problema, com SSL sobre HTTP (HTTPS). Se você se conectair em um site como http://www.gorio.com.br, ele funcionairá, mas se você tentair https://www.google.com não funcionairá.

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