我的键盘蓝牙不稳定,这是设备的一个已知问题。制造商表示,micro USB不传输按键,仅用于充电。然而,我用Wireshark检查了USB数据,发现它确实通过micro USB连接传输击键。因此,我正试图通过micro-USB连接给键盘第二次生命(希望能帮助有同样问题的人)
Ubuntu 20.04
我在Wireshark中识别了键盘设备的USB端口,并记录了该端口上的数据流。这些数据被保存到一个名为abcd.pcapng
的文件中(在录制过程中我按下了按钮abcd
)。接下来,我编写了一个基本的python脚本,它使用tshark
将abcd.pcapng
文件转换为原始的按键abcd
这是将abcd.pcapng
文件转换为字母abcd
的Python代码:
# This script extracts the keypresses from a pcapng file.
import os
pcapng_filename = "abcd.pcapng"
keypress_ids_filename = "keypress_ids.txt"
# create the output for
command_pcapng_to_keypress_ids = (
f"tshark -r '{pcapng_filename}' -T fields -e usb.capdata > {keypress_ids_filename}"
)
print(
f"Running the following bash command to convert the pcapng file to 00xx00000 nrs:\n{command_pcapng_to_keypress_ids}"
)
os.system(command_pcapng_to_keypress_ids)
# read keypress id file
switcher = {
"04": "a", # or A
"05": "b", # or B
"06": "c", # or C
"07": "d", # or D
"08": "e", # or E
"09": "f", # or F
"0A": "g", # or G
"0B": "h", # or H
"0C": "i", # or I
"0D": "j", # or J
"0E": "k", # or K
"0F": "l", # or L
"10": "m", # or M
"11": "n", # or N
"12": "o", # or O
"13": "p", # or P
"14": "q", # or Q
"15": "r", # or R
"16": "s", # or S
"17": "t", # or T
"18": "u", # or U
"19": "v", # or V
"1A": "w", # or W
"1B": "x", # or X
"1C": "y", # or Y
"1D": "x", # or Z
"1E": "1", # or !
"1F": "2", # or @
"20": "3", # or #
"21": "4", # or $
"22": "5", # or %
"23": "6", # or ^
"24": "7", # or &
"25": "8", # or *
"26": "9", # or (
"27": "0", # or )
"2D": "-", # or _
"2E": "+", # or =
"2F": "[", # or {
"30": "]", # or }
"31": '"', # or |
"33": ";", # or :
"34": "'", # or "
"35": "`", # or ~
"36": ",", # or <
"37": ".", # or >
"38": "/", # or ?
}
def readFile(filename):
fileOpen = open(filename)
return fileOpen
file = readFile(keypress_ids_filename)
print(f"file={file}")
# parse the 0000050000000000 etc codes and convert them into keystrokes
for line in file:
if len(line) == 17:
two_chars = line[4:6]
try:
print(
f"line={line[0:16]}, relevant characters indicating keypress ID: {two_chars} convert keypres ID to letter: {switcher[two_chars]}"
)
except:
pass
指定文件的脚本输出为:
Running the following bash command to convert the pcapng file to 00xx00000 nrs:
tshark -r 'abcd.pcapng' -T fields -e usb.capdata > keypress_ids.txt
file=<_io.TextIOWrapper name='keypress_ids.txt' mode='r' encoding='UTF-8'>
line=0000040000000000, relevant characters indicating keypress ID: 04 convert keypres ID to letter: a
line=0000050000000000, relevant characters indicating keypress ID: 05 convert keypres ID to letter: b
line=0000060000000000, relevant characters indicating keypress ID: 06 convert keypres ID to letter: c
line=0000070000000000, relevant characters indicating keypress ID: 07 convert keypres ID to letter: d
我如何调整代码以直接获取连续流的USB数据,而不必先开始和停止记录USB数据,然后再创建输出abcd.pcapng
文件
例如,是否有Wireshark api或tshark函数开始侦听,直到/some脚本停止
解决方案
下面名为
live_capture_keystrokes.py
的脚本捕获包含击键信号的Leftover Capture Data
,Python代码会实时、连续地解析击键信号我认为每次重新启动计算机时激活usb监控非常重要(如果您想成功运行此脚本)。为此,您可以运行:
理想情况下,您可以在没有sudo的情况下运行它,这也会阻止使用sudo运行python文件,但是我还没有弄清楚如何在没有sudo的情况下运行
modprobe usbmon
代码
如果使用sudo运行
modprobe usbmon
,则需要使用sudo运行此live_capture_keystrokes.py
脚本。要在sudo中运行python脚本,可以键入:而
live_capture_keystrokes.py
的内容是:输出
输出还没有解析回击键,我将在稍后添加。但是,这是输出,每次您按下usb键盘上的键时,它都会将附带的列表直接打印到屏幕上
相关问题 更多 >
编程相关推荐