验证扫描者的身份

了解更多常见问题教程

9个职位/0个新职位
最后一篇文章
哈米德霍塞尼
离线
最后一次见到:2个月3周前
已加入:2020-05-12 12:04
验证扫描者的身份

你好,

有没有办法检测以前配对的设备?

我用的是扫描请求跟踪器示例和ble\应用程序\安全我可以打印出发送扫描请求的设备的地址。但是,我想检查这个地址,并知道什么时候一个已经配对并断开连接的设备会发送一个扫描请求。

是否有方法验证设备以前是否与配对过?

当做,

哈米德

设备:
PM\U对话框
离线
最后一次见到:9小时24分钟前
工作人员
已加入:2018-02-08 11:03
哈米德,你好,

哈米德,你好,

请检查SDK的ble\u app\u安全示例。该示例使用SPI闪存或EEPROM来存储键合数据。设备配对后,所有配对/绑定信息都存储在非易失性存储器中,因此您可以在那里检查设备是否以前配对过。

谢谢,下午好

哈米德霍塞尼
离线
最后一次见到:2个月3周前
已加入:2020-05-12 12:04
是的,我看得出来

是的,我可以看到示例存储了先前配对设备的数据。但是,我的问题是,如果我们只有扫描仪的地址,如何在扫描请求中检查这些数据?

PM\U对话框
离线
最后一次见到:9小时24分钟前
工作人员
已加入:2018-02-08 11:03
哈米德,你好,

哈米德,你好,

一旦你得到了对等设备的BD地址,你就应该检查存储在非易失性存储器中的配对信息。你能告诉我你的要求吗?是否需要阻止未配对设备的扫描?

谢谢,下午好

哈米德霍塞尼
离线
最后一次见到:2个月3周前
已加入:2020-05-12 12:04
你好,

你好,

为了提高服务质量,我们希望在配对用户发送扫描请求时触发一个事件。换句话说,我们不想阻止来自其他设备的扫描,我们只需要在配对设备发送扫描请求后得到通知。
下面的代码是我用于此目的的代码,但我不确定这是否是正确的方法。(特别是传统配对)

bool user_check_bonding(struct bd_addr peer_addr,uint8_t addr_type){const struct app_sec_bond_data_env_tag*pbd=NULL;uint8_t bdaddr_type;//检查对等方的bd地址是public还是random static bdaddr_type=app_get_address_type(addr_type,peer_addr);if((bdaddr_type==app_public_addr_type)|(bdaddr_type==app_random static_addr_type)||(bdaddr\u type==APP\u ID\u ADDR\u type){if(bdaddr\u type==APP\u ID\u ADDR\u type){//按对等方的BD地址搜索DB pbd=APP\u easy\u security\u bdb\u Search\u entry(按\u ID\u type搜索,(void*)对等方_地址,BD_ADDR_LEN);}else{//Search DB by peer的BD address pbd=app_easy_security_bdb_Search_entry(Search_by_BDA_TYPE,(void*)peer_地址, BD_ADDR_LEN);}//如果在DB If(pbd){//将设备绑定数据存储到安全环境//Accept encryption return true;}//如果在DB else中找不到peer{//拒绝加密,disconnect return false;}}//检查对等方的BD地址是否为可解析专用地址else if(bdaddr\u type==APP\u RANDOM\u Private\u RESOLV\u ADDR\u type){//启动BD地址解析过程if(!user\u app\u easy\u security\u resolve\u bdaddr(peer\u addr)){return false;}return true;}//检查peer的BD地址是否是不可解析的私有地址,否则{//拒绝加密,断开连接返回false;}}

您认为这会涵盖所有配对情况吗(我们可能需要更改配对方法和安全级别,因此我希望此函数更通用)?

当做,

哈米德

哈米德霍塞尼
离线
最后一次见到:2个月3周前
已加入:2020-05-12 12:04
好了,现在我可以搜索了

好的,现在我可以搜索设备了,但是我有一个新问题。如何识别扫描仪的地址类型?

PM\U对话框
离线
最后一次见到:9小时24分钟前
工作人员
已加入:2018-02-08 11:03
哈米德,你好,

哈米德,你好,

你是说如何获取对等设备的BD地址?请参阅app\u get\u address\u type()API,因为它返回BD地址的类型。

谢谢,下午好

哈米德霍塞尼
离线
最后一次见到:2个月3周前
已加入:2020-05-12 12:04
是的,我想知道

是的,我想知道扫描仪的地址类型。如前所述,我们可以在scan\u request\u轨迹中找到扫描仪的地址。但是,如何确定地址类型。

实际上我已经尝试过使用这个API,但是我一直使用app\u get\u address\u type()的输入参数,因为我应该向这个函数传递一个地址类型。

enum app_addr_types app_get addr_type(uint8_t addr_type,struct bd_addr addr){typedef enum app_addr_types(*app_get_address_type_t)(uint8_t addr_type,struct bd_addr addr addr);if((addr_type==addr_RPA_PUBLIC)| |(addr_type==addr_RPA_RAND)){返回app ID_addr_type;}else{app_get_address_type_t f=(app_get_address_type_t)(app_get_address_type_ROM);返回f(addr_type,addr);}}

当我想知道地址时,这个地址类型应该放什么?

PM\U对话框
离线
最后一次见到:9小时24分钟前
工作人员
已加入:2018-02-08 11:03
哈米德,你好,

哈米德,你好,

抱歉耽搁了。中央使用什么样的BD地址?这取决于中心BD地址。

谢谢,下午好