简体   繁体   中英

Is it possible to make insecure connection between android bluetooth and laptop bluetooth device?

I am trying to connect android device with laptop or desktop which contains Bluetooth via Bluetooth socket connection.

I have created one android application (Client) which tries to connect laptop Bluetooth device where java application (Server) is running.

My concern is that, Is it possible to connect both the device insecurely (without pin authentication) using Bluetooth socket connection?

If possible, Please suggest me solution.

If not, Is there any way to programmatically auto pair both the devices?

Thanks in advance !!!

By referring java api for bluetooth, I got the solution for Insecure connection between two Android and laptop Bluetooth devices.

I have used SPP client server mechanism.

My server is in java. In java add certain parameters to URL. Make authentication= false; authorize=false;encrypt=false; open this URL for connection acceptance.

//Create a UUID for SPP
    UUID uuid=new UUID("0f2b61c18be240e6ab90e735818da0a7", false);
    System.out.println("\n"+uuid.toString());

    //Create the servicve url
    String url="btspp://localhost:"+uuid.toString()+";"+"name=remoteNotifier;authenticate=false;authorize=false;encrypt=false";

    //open server url
    StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open(url);


    //Create a UUID for SPP
    UUID uuid=new UUID("0f2b61c18be240e6ab90e735818da0a7", false);

    System.out.println("\n"+uuid.toString());

    //Create the servicve url
    String url="btspp://localhost:"+uuid.toString()+";"+"name=remoteNotifier;authenticate=false;authorize=false;encrypt=false";

    //open server url
    StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open(url);

Now on client side: Android API 10 above contains insecure connection method. "createInsecureRfcommSocketToServiceRecord(UUID)" So use this method for connection. It will not pop up for pairing request adn try to connect with remote Bluetooth device where Java server is already running.

Code:

// Set up a pointer to the remote node using it's address.
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

    // Two things are needed to make a connection:
    // A MAC address, which we got above.
    // A Service ID or UUID.  In this case we are using the
    // UUID for SPP.
    try {
        //          btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
        btSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
    } catch (IOException e) {
        AlertBox("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
    }
    // Discovery is resource intensive.  Make sure it isn't going on
    // when you attempt to connect and pass your message.
    mBluetoothAdapter.cancelDiscovery();

    // Establish the connection.  This will block until it connects.
    try {
        btSocket.connect();
        out.append("\n...Connection established and data link opened...");
    } catch (IOException e) {
        try {
            btSocket.close();
            e.printStackTrace();
        } catch (IOException e2) {
            e2.printStackTrace();
            AlertBox("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
        }
    }

    // Create a data stream so we can talk to server.
    out.append("\n...Sending message to server...");

    try {
        outStream = btSocket.getOutputStream();
    } catch (IOException e) {
        AlertBox("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + ".");
    }

    //      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.android_logo);
    //      byte[] msgBuffer = getBytesFromBitmap(bitmap);

    String message = "Hello from Android.\n";
    byte[] msgBuffer = message.getBytes();
    try {
        outStream.write(msgBuffer);
    } catch (IOException e) {
        String msg = "In onResume() and an exception occurred during write: " + e.getMessage();
        if (address.equals("00:00:00:00:00:00")) {
            msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 37 in the java code";
            msg = msg +  ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n";
        }
        // AlertBox("Fatal Error", msg);      
    }

I have provided only required code. For connection UUID should be same for both the devices.

Provide server Bluetooth MAC address at "address" field at client side.

We are able to communicate with remote Bluetooth device insecurely (Without pairing).

But this code is device dependent...

certain device are able to communicate very efficiently. Like Lenovo laptop, external bluetooth device for PC for Java server AND Android devices DELL venue 7, Sony, LG mobiles for client. Tested and working properly.

But in Dell laptop, Micromaxx, xolo mobile it doesn't work. I don't know why it is not working, If anyone knows please give the solution.

For Bluetooth 2.1 and above devices, security is mandatory. If you are just trying to avoid the passkey entry/display, you can set the security requirements on the laptop and android device to "MITM protection not required". This way the devices will pair automatically, but the link would be susceptible to man in the middle attacks.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM