conorpp / btproxy

Man in the Middle analysis tool for Bluetooth.
GNU General Public License v3.0
509 stars 76 forks source link

Neither python2 nor python3 working (different errors, though) #14

Open DanielHeath opened 4 years ago

DanielHeath commented 4 years ago

With python2:

  $  btproxy BE:FF:20:00:97:52 AC:E4:B5:8C:82:42
Traceback (most recent call last):
  File "/usr/local/bin/btproxy", line 4, in <module>
    __import__('pkg_resources').run_script('btproxy==0.1', 'btproxy')
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 666, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1462, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/EGG-INFO/scripts/btproxy", line 4, in <module>
    from libbtproxy.argparser import args,parser
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/__init__.py", line 6, in <module>
    from . import adapter
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/adapter.py", line 7, in <module>
    import bluetooth, clone
  File "build/bdist.linux-x86_64/egg/bluetooth/__init__.py", line 282, in <module>
AttributeError: attribute '__doc__' of 'instancemethod' objects is not writable

With python3:

  $  btproxy BE:FF:20:00:97:52 AC:E4:B5:8C:82:42
Traceback (most recent call last):
  File "/usr/local/bin/btproxy", line 4, in <module>
    __import__('pkg_resources').run_script('btproxy==0.1', 'btproxy')
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 666, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1462, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python3.7/dist-packages/btproxy-0.1-py3.7-linux-x86_64.egg/EGG-INFO/scripts/btproxy", line 4, in <module>
    from libbtproxy.argparser import args,parser
  File "/usr/local/lib/python3.7/dist-packages/btproxy-0.1-py3.7-linux-x86_64.egg/libbtproxy/__init__.py", line 3, in <module>
    import clone
ImportError: /usr/local/lib/python3.7/dist-packages/btproxy-0.1-py3.7-linux-x86_64.egg/clone.cpython-37m-x86_64-linux-gnu.so: undefined symbol: Py_InitModule
DanielHeath commented 4 years ago

Aha!

The pybluez dependency dropped python2 support in https://github.com/pybluez/pybluez/commit/40f627d2306596bfe8f3494a87e3b501bfa55464 but this library does not yet work with python3.

laksh225 commented 4 years ago

I could install btproxy for python2.7 with PyBluez version 0.22 instead of the latest version 0.23.

ThijsWithaar commented 4 years ago

Replacing https://github.com/conorpp/btproxy/blob/master/lib/btproxy_clone.c#L118 with #if PY_MAJOR_VERSION >= 3 at least makes btproxy run on my machine

Yamakaky commented 3 years ago

Can confirm it works on my end too with python 3.9

baahver commented 2 years ago

On Ubuntu I tried python 2.7 and 3.9. Both give me above errors as DanielHeath stated. I replaced: #if defined PYTHON34 || defined PYTHON340 with: #if PY_MAJOR_VERSION >= 3 before sudo python setup.py install But no fix. Any suggestions?

Edit: Installed pip2 and version 0.22 of pybluez: sudo pip2 install pybluez==0.22 and then btproxy does run.

Edit: But btproxy runs, but no result, and when I close it:

Running proxy on master  xx:xx:xx:xx:xx:xx  and slave  yy:yy:yy:yy:yy:yy

^CTraceback (most recent call last):
  File "/usr/local/bin/btproxy", line 4, in <module>
    __import__('pkg_resources').run_script('btproxy==0.1', 'btproxy')
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 666, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1462, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/EGG-INFO/scripts/btproxy", line 39, in <module>
    btproxy.mitm()
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/mitm.py", line 503, in mitm
    self.setup_adapters()
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/mitm.py", line 410, in setup_adapters
    restart_bluetoothd()
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/adapter.py", line 19, in restart_bluetoothd
    _run(['replace_bluetoothd'])
  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/adapter.py", line 13, in _run
    return subprocess.check_output(cmd)
  File "/usr/lib/python2.7/subprocess.py", line 217, in check_output
    output, unused_err = process.communicate()
  File "/usr/lib/python2.7/subprocess.py", line 475, in communicate
    stdout = _eintr_retry_call(self.stdout.read)
  File "/usr/lib/python2.7/subprocess.py", line 125, in _eintr_retry_call
    return func(*args)
isboston commented 2 years ago

Can confirm it works on my end too with python 3.9

What do you have operating system?

isboston commented 2 years ago

On Ubuntu I tried python 2.7 and 3.9. Both give me above errors as DanielHeath stated.

I replaced: #if defined PYTHON34 || defined PYTHON340 with: #if PY_MAJOR_VERSION >= 3

before sudo python setup.py install

But no fix.

Any suggestions?

Edit:

Installed pip2 and version 0.22 of pybluez:

sudo pip2 install pybluez==0.22

and then btproxy does run.

Edit:

But btproxy runs, but no result, and when I close it:


Running proxy on master  xx:xx:xx:xx:xx:xx  and slave  yy:yy:yy:yy:yy:yy

^CTraceback (most recent call last):

  File "/usr/local/bin/btproxy", line 4, in <module>

    __import__('pkg_resources').run_script('btproxy==0.1', 'btproxy')

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 666, in run_script

    self.require(requires)[0].run_script(script_name, ns)

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1462, in run_script

    exec(code, namespace, namespace)

  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/EGG-INFO/scripts/btproxy", line 39, in <module>

    btproxy.mitm()

  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/mitm.py", line 503, in mitm

    self.setup_adapters()

  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/mitm.py", line 410, in setup_adapters

    restart_bluetoothd()

  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/adapter.py", line 19, in restart_bluetoothd

    _run(['replace_bluetoothd'])

  File "/usr/local/lib/python2.7/dist-packages/btproxy-0.1-py2.7-linux-x86_64.egg/libbtproxy/adapter.py", line 13, in _run

    return subprocess.check_output(cmd)

  File "/usr/lib/python2.7/subprocess.py", line 217, in check_output

    output, unused_err = process.communicate()

  File "/usr/lib/python2.7/subprocess.py", line 475, in communicate

    stdout = _eintr_retry_call(self.stdout.read)

  File "/usr/lib/python2.7/subprocess.py", line 125, in _eintr_retry_call

    return func(*args)

У вас сейчас получилось?

Furuidemu commented 2 years ago

Replacing https://github.com/conorpp/btproxy/blob/master/lib/btproxy_clone.c#L118 with #if PY_MAJOR_VERSION >= 3 at least makes btproxy run on my machine

If you don't want to edit the c file, you can also define a macro in btproxy/setup.py

git clone https://github.com/conorpp/btproxy
sed -i "12a\ \ \ \ define_macros=[('PYTHON34', 'true')]," btproxy/setup.py
cd btproxy 
sudo python3 setup.py install