Metadata-Version: 2.1
Name: bluescan
Version: 0.0.4
Summary: A Bluetooth device scanner, support both BR and LE!
Home-page: https://github.com/fO-000/bluescan
Author: fO_000
Author-email: fO_000@protonmail.com
License: UNKNOWN
Platform: UNKNOWN
Description-Content-Type: text/markdown
Requires-Dist: pybluez (>=0.22)
Requires-Dist: bluepy (>=1.3.0)
Requires-Dist: docopt (>=0.6.2)
Requires-Dist: termcolor (>=1.1.0)

# bluescan

A Bluetooth scanner, support both BR and LE (device, GATT, SDP)!

## Requirements

```sh
apt install libglib2.0-dev
```

## Install

```sh
pip3 install bluescan
```

## Usage

```txt
# bluescan -h
Usage:
    bluescan (-h | --help)
    bluescan (-v | --version)
    bluescan [-i <hcix>] -m br [--inquiry-len=<n>] [--async]
    bluescan [-i <hcix>] -m le [--timeout=<sec>] [--le-scan-type=<type>] [--sort=<key>]
    bluescan [-i <hcix>] -m sdp BD_ADDR
    bluescan [-i <hcix>] -m gatt --addr-type=<type> BD_ADDR

Arguments:
    BD_ADDR    Target Bluetooth device address

Options:
    -h, --help               Display this help
    -v, --version            Show the version
    -i <hcix>                HCI device for scan [default: hci0]
    -m <mode>                Scan mode, support BR, LE, SDP and GATT
    --inquiry-len=<n>        Inquiry_Length parameter of HCI_Inquiry command [default: 8]
    --timeout=<sec>          Duration of LE scan [default: 10]
    --le-scan-type=<type>    Active or passive scan for LE scan [default: active]
    --sort=<key>             Sort the discovered devices by key, only support RSSI now [default: rssi]
    --async                  Asynchronous scan for BR scan
    --addr-type=<type>       Public or random
```

## Example

* Scan LE device

  ```txt
  # bluescan -m le
  [Warnning] Before doing active scan, make sure you spoof your BD_ADDR.
  LE active scanning on hci0...timeout 10 sec

  BD_ADDR:     4c:34:78:26:ad:71
  Addr type:   random
  Connectable: True
  RSSI:        -94 dB
  General Access Profile:
          Flags (0x01): 06
          Manufacturer (0xFF): 4c0010054b1c3debf9

  BD_ADDR:     28:11:a5:41:28:27
  Addr type:   public
  Connectable: True
  RSSI:        -91 dB
  General Access Profile:
          Flags (0x01): 19
          Complete 16b Services (0x03): 0000febe-0000-1000-8000-00805f9b34fb,0000fe26-0000-1000-8000-00805f9b34fb
          Manufacturer (0xFF): 010951100d8851abf2f196f2
          Tx Power (0x0A): f6

  ... ...
  ```

* Scan BR device

  ```txt
  # bluescan -m br
  BR scanning on hci0...timeout 10.24 sec

  [BR scan] discovered new device
  addr: EC:51:BC:ED:6E:DC
  name: OPPO R11
  class: 0x5A020C


  [BR scan] discovered new device
  addr: 9C:2E:A1:43:EB:5F
  name: 360syh
  class: 0x5A020C

  ... ...
  ```

* Scan (Discover) GATT

  ```txt
  # bluescan -m gatt --addr-type=random 57:c6:75:e5:dc:e4
  Number of services: 9

  Service declaration attribute
      Handle: "attr handle" by using gatttool -b <BD_ADDR> --primary
      type: (May be primary service 00002800-0000-1000-8000-00805f9b34fb)
      Value (Service UUID): 9fa480e0-4967-4542-9390-d343dc5d04ae (Unknown service) 
  Number of characteristics: 1

      Characteristic declaration attribute
          handle:
          type:
          value:
              Properties: WRITE NOTIFY EXTENDED PROPERTIES  
              Characteristic value attribute handle: 0x0011
              Characteristic value attribute UUID:  af0badb1-5b99-43cd-917a-a77bc549e3cc (Unknown characteristic)

  ... ...
  ```

* Scan (Discover) SDP

  ```txt
  # bluescan -m sdp 9C:2E:A1:43:EB:5F
  Name: Headset Gateway
  Protocol RFCOMM
  Port 2
  Service Class: ['1112', '1203']
  Profiles: [('1108', 258)]
  Description: None
  Provider: None
  Service-id None

  Name: Handsfree Gateway
  Protocol RFCOMM
  Port 3
  Service Class: ['111F', '1203']
  Profiles: [('111E', 262)]
  Description: None
  Provider: None
  Service-id None

  ... ...
  ```


