Android VpnService 输入数据不可读

问题描述 投票:0回答:0

我要创建一个 Android vpn 应用程序。我扩展了一个 VpnService 类。下面是我的课:


public class MyVpnService extends VpnService {
    private String TAG = "mjh";
    private Thread thread;
    private ServerConnection serverConnection;
    private ParcelFileDescriptor pfd;
    private ArrayList<Client> clients;
    private boolean CONNECTED = false;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        //line bellow creates a socket.io connection to my server and when connected successfully, it runs the onConnected code block:
    serverConnection = new ServerConnection(
                //onConnected
                sc -> {
                    ascender = new Thread(() -> {
                        try {
                            pfd = new VpnService.Builder()
                                    .addAddress("10.0.0.1", 24)
                                    .setSession("MyVpnService")
                                    .addRoute("0.0.0.0", 0)
                                    .setBlocking(false)
                                    .setUnderlyingNetworks(null)
                                    .establish();
                        } catch (Exception e) {
                            Log.d(TAG, "Error : in creating localhost : " + e);
                        }

                        CONNECTED = true;
                        ByteBuffer buffer = ByteBuffer.allocate(10000);
                        FileInputStream is = new FileInputStream(pfd.getFileDescriptor());
                        while (CONNECTED) {
                            try {
                                try {
                                    buffer.clear();
                                    int length = is.read(buffer.array());
                                    if (length > 0) {
                                        byte[] data = new byte[length];
                                        buffer.get(data, 0, length);

                                        Log.d(TAG,Arrays.toString(data));
                                    }
                                } catch (Exception e) {
                                    Log.d(TAG, "Error in receiving data from device : " + e);
                                }
                            } catch (Exception e) {
                                Log.d(TAG, "Error in receiving data from device : " + e);
                            }

                        }
                    });
                    ascender.start();
                },
                //onDisconnected
                sc -> {
                    CONNECTED = false;
                }
        );
        return START_STICKY;
    }
}

当我运行我的代码时,行:

Log.d(TAG,Arrays.toString(data));

记录以下数据:

[69, 0, 0, 52, 55, -121, 64, 0, 64, 6, -59, -82, -64, -88, 94, 15, -64, -88, 94, 46, - 72, 60, 11, -72, 104, -121, -27, 113, -75, 54, 10, 97, -128, 16, 0, 87, 111, -7, 0, 0, 1, 1 , ....]

或类似的数组。

如果我将行更改为以下内容:

Log.d(TAG , new String(data, "UTF-8"));

我得到一个乱七八糟的字符串,如下所示:

E??��S@??@�0��^��^.���=x|ܝ�]W�??W�a????
                 �^��=���S�U3�US�U�!US�Uj�$��9��US�US�US�Ui�PS�Tܡ��S�UW�U��US�US�U��UW�U��US�US�U���9W�U��US�US�US�U��2�ު��iȳ�A���W������S���]���@���@���������o��Cb�P#b�PCj����PCb�Pz+]U4T2q�`�PCb�PCb�PCb�R�b��Cb�P��z]�/Nh�!�J   .�H�TX�C>�G1�J�[(�X3�BXg�R'���[i��[i��i�(�i��[i�����m�)Yi��[i��[i��[i��[l��[h�Y[�Z�[i��[i�)Yi��[i��[i�)[i��[i�)Yi��[i��[i�)m��[i�)Yi��[i��[i��[i���_���k������,Б�:�ܞ}���>���0ϔ�-�ʑ-֕�}ͅ�}������[�i��h��)��h��7ʛ7��ob}f��F4�ۯi�ƪi�Z�aϘ�lB3T�C:d�Zd�:(����:d�-�MR���f�:d�:d�:d�??d�:d��d�y:d�>d��f�:d�:d��d�>d��f�:d�:d��R��>d��f�:d�:d�:d��hi]�o]h�B2�
                 .��K�>�1�
                 �(�CK3�Kg�45ن99�99�19�x�9�99�p�<��y;9�99�99�9;9^��99D��4vt�GY��G�Z�k�W�X�L??�AX�Z�F    ��1��??I��??I��??Hsl??I��??I���L�چhr�??I��??I��??I��??_��K��I�ş��??J��??Ir�??I��??I��??Hr�??I��??Ir�??I��??I��??Hrچh��??Ir�??I��??I��??I��??K���É*������O��M��Q���F���B���O��^�����G���W˂���D���Dͳ�D�MqDͳ�D͊�������L�Dͳ�Dͳ�Dͳ�Dۉ�Aϳ�E�<���Dη�D�L�Dͳ�Dͳ�D�L�Dͷ�D�L�Dͳ�Dͳ�D�L����D�L�Dͳ�Dͳ�Dͳ�Dρ�R�ݚf��   ���!��7���pȭ�3���=��� ��� ⸶p���p������G�K�G�T��N�C�G��A^ܰF{?����G���?�G��Bt
                 �Oʷ惁�G��D�

虽然它应该给我 http 请求,比如 GET 、 CONNECT 、 POST 等等

我也尝试了所有其他解码方法,除了 UTF-8 它没有用。

有什么建议可以达到我理想的请求字符串吗?

我也试过除UTF-8之外的所有其他解码方法,它没有用。 虽然它应该给我 http 请求,比如 GET 、 CONNECT 、 POST 等等。

java android vpn android-vpn-service
© www.soinside.com 2019 - 2024. All rights reserved.