为啥我无法通过外围设备进行身份验证?
Posted
技术标签:
【中文标题】为啥我无法通过外围设备进行身份验证?【英文标题】:Why can I not authenticate with peripheral device?为什么我无法通过外围设备进行身份验证? 【发布时间】:2018-02-10 08:48:40 【问题描述】:语言版本: Microsoft Visual C++ 2013 Redistributable (x85) – 12.0.30501
平台版本: 4.0
操作系统: Microsoft Windows 8.1 6.3.9600 Build 9600
任何其他相关软件:
-
Visual Studio 2013 社区与更新 4
Halo 配置控制面板
光环枢纽
我要做什么
我正在尝试与使用 OSDP 协议的外围设备进行通信。
实际情况
我从 Visual Studio 的输出面板中得到以下信息。
-
收到 326 字节的有效数据包
收到来自 OSDP Hub 的身份验证响应
会话密钥 > E856417D8B0364313A4B8F0D89524273F0F70AB1DFF8E950FE96905FECAC9F2F
3 毫秒后收到数据包
收到有效的 4 字节数据包
收到来自 OSDP Hub 的身份验证拒绝
0 毫秒后收到数据包
在 0 个设备上执行搜索
粗略复制
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Work\velox\admins-velox-project\proprietary\rtos\apps\chibios\utilities\osdp_client\Debug_msvc\osdp_client_mswud_vc11.exe'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded
'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded
'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\comdlg32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winspool.drv'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shell32.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.18006_none_a9ec6aab013aafee\comctl32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ole32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\oleaut32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\wsock32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ws2_32.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120d.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120d.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\shlwapi.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmmbase.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\combase.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nsi.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\devobj.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\SHCore.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel.appcore.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\uxtheme.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\ProgramData\Internet Helper Anti-phishing\internetHelper_antiphishing.dll'. Module was built without symbols.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dwmapi.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\IconCodecService.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\WindowsCodecs.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.9600.18696_none_dae05f525bc50fb1\GdiPlus.dll'. Cannot find or open the PDB file.
Password = 1234
Private key = 03ac674216f3e15c761ee1a5e255f067
Added 0 items
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dnsapi.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\FWPUCLNT.DLL'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rasadhlp.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptsp.dll'. Symbols loaded.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rsaenh.dll'. Cannot find or open the PDB file.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcrypt.dll'. Symbols loaded.
..\..\src\common\strvararg.cpp(658): assert "n <= parser.nargs" failed in `anonymous-namespace'::DoGetArgumentType(): more arguments than format string specifiers? [in thread cb4]
First-chance exception at 0x76165608 (KernelBase.dll) in osdp_client_mswud_vc11.exe: 0x00001976.
'osdp_client_mswud_vc11.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dbghelp.dll'. Symbols loaded.
DBGHELP: Symbol Search Path: .
DBGHELP: .\wkernelbase.pdb - file not found
DBGHELP: .\dll\wkernelbase.pdb - file not found
DBGHELP: .\symbols\dll\wkernelbase.pdb - file not found
DBGHELP: wkernelbase.pdb - file not found
DBGHELP: KERNELBASE - export symbols
DBGHELP: .\osdp_client_mswud_vc11.pdb - file not found
DBGHELP: .\exe\osdp_client_mswud_vc11.pdb - file not found
DBGHELP: .\symbols\exe\osdp_client_mswud_vc11.pdb - file not found
Received valid packet of 326 bytes
Received authentication response from OSDP Hub
Session Key > 63B2D0C583090EFD994B5AFE12A417A07F406CEE1F64DCB1613703B45428E32E
Received packet after 3 ms
Received valid packet of 4 bytes
Received authentication denial from OSDP Hub
Received packet after 2 ms
DBGHELP: osdp_client_mswud_vc11 - private symbols & lines
C:\Work\velox\admins-velox-project\proprietary\rtos\apps\chibios\utilities\osdp_client\Debug_msvc\osdp_client_mswud_vc11.pdb
DBGHELP: .\msvcr120d.i386.pdb - file not found
DBGHELP: .\dll\msvcr120d.i386.pdb - file not found
DBGHELP: .\symbols\dll\msvcr120d.i386.pdb - file not found
DBGHELP: msvcr120d.i386.pdb - file not found
DBGHELP: MSVCR120D - export symbols
DBGHELP: .\wntdll.pdb - file not found
DBGHELP: .\dll\wntdll.pdb - file not found
DBGHELP: .\symbols\dll\wntdll.pdb - file not found
DBGHELP: wntdll.pdb - file not found
DBGHELP: ntdll - export symbols
DBGHELP: .\wkernel32.pdb - file not found
DBGHELP: .\DLL\wkernel32.pdb - file not found
DBGHELP: .\symbols\DLL\wkernel32.pdb - file not found
DBGHELP: wkernel32.pdb - file not found
DBGHELP: KERNEL32 - export symbols
这是实际代码;
case OSDP_HUB:
bool ipv4;
uint8_t ip_addr[16];
osdp_hub_messages* hub = (osdp_hub_messages*)m_packets.get_data( OSDP_HUB );
// goes from here to decode method ondown
hub->decode( (uint8_t*)buffer, m_packets.get_header()->m_data.length );
if ( hub->get_msg_type() == OSDP_HUB_TCP_IND )
hub->get_ip_addr( &ipv4, ip_addr );
if ( hub->get_enable() )
// Device has connected...
wxLogDebug( wxT("Device connected on IP address %d.%d.%d.%d : %u"),
ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], hub->get_tcp_port() );
m_tcp_device_connected = true;
// Assign an address
/// @todo Create an address generation function
std::vector<uint8_t> ip_addr_vec;
ip_addr_vec.resize( ipv4? 4 : 16 );
memcpy( &ip_addr_vec[0], ip_addr, ipv4? 4 : 16 );
m_tcp_map[0] = ip_addr_vec;
MyCustomEvent customEvent( MyCustomCommandEvent, ID_EVENT_TCP_ADD );
customEvent.SetText( _T( "SocketThread::Entry() ID_EVENT_TCP_ADD" ) );
wxPostEvent( m_parent, customEvent );
else
// Device has disconnected...
wxLogDebug( wxT("Device disconnected on IP address %d.%d.%d.%d"),
ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3] );
// Change the UI to display the nearest device on the list
MyCustomEvent customEvent( MyCustomCommandEvent, ID_EVENT_TCP_REMOVE );
customEvent.SetText( _T( "SocketThread::Entry() ID_EVENT_TCP_REMOVE" ) );
wxPostEvent( m_parent, customEvent );
else if ( hub->get_msg_type() == OSDP_HUB_AUTH_1 )
wxLogDebug( wxT("Received authentication response from OSDP Hub") );
m_auth1_received = true;
std::string salt = hub->get_salt();
std::string key = hub->get_publickey();
m_srp_auth->gen_client_session_key( salt, key );
wxLogDebug( wxT("Session Key > %s"), m_srp_auth->get_session_key() );
m_srp_auth->gen_client_cryptogram();
else if ( hub->get_msg_type() == OSDP_HUB_AUTH_3 ) // skips here
wxLogDebug( wxT("Received authentication accept from OSDP Hub") );
m_auth3_received = true;
else if ( hub->get_msg_type() == OSDP_HUB_AUTH_4 ) // enters in here
wxLogDebug( wxT("Received authentication denial from OSDP Hub") );
m_auth4_received = true;
else if ( hub->get_msg_type() == OSDP_HUB_PONG )
wxLogDebug( wxT("Received PONG from OSDP Hub") );
m_pong_received = true;
int32_t length;
hub->encode( (uint8_t*)msg, &length );
m_clientSocket->Write( (char*)msg, length );
break;
//comes in here
int32_t osdp_hub_messages::decode( uint8_t* buffer, int32_t len )
return osdp_hub_messages_decode( &m_osdp_hub_messages, buffer, len );
// decode()
// then comes in here
int32_t osdp_hub_messages_decode( osdp_hub_messages_t* data, uint8_t* buffer, int32_t len )
//goes from OSDP_HUB_AUTH_2 t0 OSDP_HUB_AUTH_4
//never hits OSDP_HUB_START or OSDP_HUB_TCP_IND
data->hub_msg = (osdp_hub_e)buffer[0];
switch ( data->hub_msg )
case OSDP_HUB_START: return decode_start( data, buffer+1, len ); break;
case OSDP_HUB_TCP_IND: return decode_tcp_ind( data, buffer+1, len ); break;
case OSDP_HUB_AUTH_0: return decode_auth_0( data, buffer+1, len ); break;
case OSDP_HUB_AUTH_1: return decode_auth_1( data, buffer+1, len ); break;
case OSDP_HUB_AUTH_2: return decode_auth_2( data, buffer+1, len ); break;
case OSDP_HUB_AUTH_3: return decode_auth_2( data, buffer+1, len ); break;
case OSDP_HUB_AUTH_4: return decode_auth_4( data, buffer+1, len ); break;
case OSDP_HUB_PING: return decode_ping( data, buffer+1, len ); break;
case OSDP_HUB_PONG: return decode_pong( data, buffer+1, len ); break;
case OSDP_HUB_GET_AUTH_1: return decode_get_auth_1( data, buffer+1, len ); break;
case OSDP_HUB_GET_AUTH_3: return decode_get_auth_3( data, buffer+1, len ); break;
default:
return 0;
break;
// osdp_hub_messages_decode()
//additional code
/// @file osdp_halo_alarm_base.h
/// @brief A C implementation of the proprietary Halo alarm packet.
///
/// @author neil
#pragma once
#include "osdp_header.h"
#ifdef _cplusplus
extern "C"
#endif
/// The ID used to define a HALO HUB packet
#define OSDP_HUB 0x00
typedef enum
OSDP_HUB_START = 0,
OSDP_HUB_TCP_IND,
OSDP_HUB_AUTH_0,
OSDP_HUB_AUTH_1,
OSDP_HUB_AUTH_2,
OSDP_HUB_AUTH_3,
OSDP_HUB_AUTH_4,
OSDP_HUB_PING,
OSDP_HUB_PONG,
OSDP_HUB_GET_AUTH_1,
OSDP_HUB_GET_AUTH_3,
osdp_hub_e;
struct _osdp_hub_messages_t
osdp_hub_e hub_msg;
bool enable;
uint8_t max_tcp;
uint8_t ip_addr[16];
bool ipv4;
uint32_t port;
bool success;
uint8_t username[17];
uint8_t publickey[321];
uint8_t salt[65];
uint8_t cryptogram[65];
osdp_header_t* header;
;
typedef struct _osdp_hub_messages_t osdp_hub_messages_t;
/// @brief Translate the data structure to a packet for transmission
/// @param buffer An input data buffer used to store the packet
/// @param len The length of the output packet
void osdp_hub_messages_encode( osdp_hub_messages_t* data, uint8_t* buffer, int32_t* len );
/// @brief Translate a received packet into a data structure
/// @param data A struct containing the decoded output parameters
/// @param buffer An input data buffer used to store the packet
/// @param len The length of the input packet
/// @return The number of decoded bytes
int32_t osdp_hub_messages_decode( osdp_hub_messages_t* data, uint8_t* buffer, int32_t len );
#ifdef _cplusplus
#endif
//
// end of file
//
需要更多信息,我一定会添加它。感谢您的帮助!
【问题讨论】:
【参考方案1】:您发布的代码看起来不像 SIA OSDP。 (根据 Sensurity 的网站,他们指的是 OSDP。)也许这是机制的其他部分?当前 SIA OSDP 工作组关于基于 IP 网络的 OSDP 的活动围绕基于 TCP 的 OSDP(使用现有的“安全通道”机制)或基于 TLS 的 OSDP。
【讨论】:
以上是关于为啥我无法通过外围设备进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章