1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M1 Mac で BLE sniffer を動かす

Posted at

少しはまったのでメモる。

目的

BLE sniffer を安価に作る

概要

Mac に adafruit の ADA-2269 を刺して、WireShark から使えるようにする。

設定

基本的には、NORDIC の [nRF Sniffer for Bluetooth LE] (https://www.nordicsemi.com/Products/Development-tools/nRF-Sniffer-for-Bluetooth-LE#infotabs)に書いてあるとおりにすすめる。WindowsでもLinuxでも動くと書いてある。実際、Windowsマシンではすぐに動いた。

snifferのF/Wを書き込めと書いてあるが、ADA-2269 だとスキップして大丈夫。
WireSharkをここからダウンロードしてインストール
スニファー用のファイルをここからダウンロード。以下で、WireSharkのフォルダーにコピーする。

この後、WireShark の about WireShark の Folders で、Personal configuration と Personal Extcap path を確認。ダブルクリックすれば Finder が開く。

ここに、先程ダウンロードしたスニファー用のファイルをコピーする。

ダウンロードファイルの中の extcap の中身を、Extcap Path にコピーする。
(手順が入れ替わるけど、ここでやるのが楽なので)
ダウンロードファイルの中の Profile_nRF_Sniffer_Bluetooth_LE を、フォルダーごとPersonal configuration フォルダーにコピーする。

ターミナルを開いて、Extcapフォルダーに移動。

ここがはまったところ

python3 nrf_sniffer_ble.py --extcap-interfaces
を実行すると以下のようなエラーになる。

Traceback (most recent call last):
  File "nrf_sniffer_ble.py", line 628, in <module>
    extcap_interfaces()
  File "nrf_sniffer_ble.py", line 135, in extcap_interfaces
    for interface_port in get_interfaces():
  File "nrf_sniffer_ble.py", line 126, in get_interfaces
    devices = UART.find_sniffer(write_data=False)  # Try non-intrusive search, set argument to True for intrusive search
  File "/Users/tadashi/.config/wireshark/extcap/SnifferAPI/UART.py", line 59, in find_sniffer
    reader = Packet.PacketReader(portnum=port, baudrate=rate)
  File "/Users/tadashi/.config/wireshark/extcap/SnifferAPI/Packet.py", line 114, in __init__
    self.uart = UART.Uart(portnum, baudrate)
  File "/Users/tadashi/.config/wireshark/extcap/SnifferAPI/UART.py", line 110, in __init__
    self.ser = serial.Serial(
  File "/Users/tadashi/Library/Python/3.8/lib/python/site-packages/serial/serialutil.py", line 244, in __init__
    self.open()
  File "/Users/tadashi/Library/Python/3.8/lib/python/site-packages/serial/serialposix.py", line 332, in open
    self._reconfigure_port(force_update=True)
  File "/Users/tadashi/Library/Python/3.8/lib/python/site-packages/serial/serialposix.py", line 517, in _reconfigure_port
    termios.tcsetattr(
termios.error: (22, 'Invalid argument')

(エラーにならなかったらOKです、、、)

SnifferAPI/UART.py の 110 行目付近でエラーになっているので、以下のように回避する。(以下のソースでは、106行目から108行目)

101         try:
102             if baudrate is not None and baudrate not in SNIFFER_BAUDRATES:
103                 raise Exception("Invalid baudrate: " + str(baudrate))
104
105             logging.info('Opening serial port {}'.format(portnum))
106             # by T.Ogino
107             if portnum=='/dev/cu.debug-console':
108                 portnum=None
109             self.ser = serial.Serial(
110                 port=portnum,
111                 baudrate=9600,
112                 rtscts=True
113             )

/dev/cu.debug-console って、私が持っているもう一台の intel Mac には存在しないので、M1 Macだけあるみたい。(2台しか確認していないので本当かどうか不明。環境によって違うかもしれないので、その辺は自分で調べてください。)
とりあえず /dev/cu.debug-console に対して serial.Serial(..., rtscts=True) を実行するとエラーになるのでそれを回避する。なんとなく、/dev/cu* を順に調べていって、snifferが見つかったら返すみたいなので、うまくいかなかったら適当に修正してください。

これでエラーにならないのを確認したら WireShark 起動すると、
image.png

みたいに、Snifferが見えるようになる。なぜ2つ見えるかは不明だけど、どっちでもOK。

この後、WireSharkのEditのConfiguration ProfilesでProfile_nRF_Sniffer_Bluetooth_LEを選ぶ。

image.png

とりあえず動くところまでは確認しました。

image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?