GB28181协议--设备注册和注销
生活随笔
收集整理的這篇文章主要介紹了
GB28181协议--设备注册和注销
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、基本要求
根據《GB/T 28181 —2016》第9章關于注冊和注銷的描述,GB28181的注冊和注銷應滿足下面這些要求:
- 注冊和注銷時應進行認證, 認證方式應支持數字摘要認證方式;
- SIP 代理在注冊過期時間到來之前, 應向注冊服務器進行刷新注冊,系統、設備注冊過期時間應可配置, 缺省值為86400s , 應在注冊過期時間到來之前發送刷新注冊消息, 為SIP 服務器預留適當刷新注冊處理時間, 注冊過期時間不應短于3600s。
- SIP 代理注冊成功則認為SIP 服務器為在線狀態, 注冊失敗則認為SIP 服務器為離線狀態;SIP 服務器在SIP 代理注冊成功后認為其為在線狀態,SIP 代理注冊過期則認為其為離線狀態。
2、基本流程
SIP設備的基本注冊流程如下圖所示:
注冊流程描述如下:
- SIP 代理向SIP 服務器發送 Register 請求;
- SIP 服務器向 SIP 代理發送響應401, 并在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
- SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證信息;
- SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應200 OK, 如果身份不合法則發送拒絕服務應答。
基于數字證書的雙向認證注冊說明:
SIP 代理和SIP 服務器進行雙向認證。 對IETF RFC 3261 中定義的方法 Register 進行如下頭域擴展:
- Authorization 的值增加 Capability 項用來描述編碼器的安全能力。 當 Authorization 的值為Capability 時, 只攜帶一個參數algorithm, 參數algorithm 的值分為三部分, 中間以逗號分割。第一部分為非對稱算法描述, 取值為 RSA; 第二部分為摘要算法描述, 取值為 MD5/SHA-1/SHA-256 中的一個或者多個; 第三部分為對稱算法的描述, 取值為 DES/3DES/SM1 中的一個或者多個。
- WWW-Authenticate 的 值 增 加 Asymmetric 項 用 來 攜 帶 驗 證 SIP 服 務 器 身 份 的 數 據。 當
WWW-Authenticate 的值為 Asymmetric 時, 只攜帶參數 nonce 和algorithm 。 algorithm 的
值取安全能力中指明的算法。 - Authorization 的值增加 Asymmetric 項用來攜帶驗證編碼器的數據。 當 Authorization 的值
為 Asymmetric 時, 攜帶nonce、response、algorithm 三個參數。
注銷流程如下所示:
注銷流程描述如下:
- SIP 代理向SIP 服務器發送 Register 請求,Expires 字段的值為0, 表示SIP 代理要注銷;
- SIP 服務器向 SIP 代理發送響應401, 并在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
- SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證信息,Expires 字段的值為0;
- SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應200 OK, 如果身份不合法則發送拒絕服務應答。
注意:
從上面兩張圖片可以看出,SIP協議的注冊和注銷的差異在于Expires字段的值,當為0時,設備是注銷,當大于0時(Expires最小值為3600),設備是注冊。
3、基于SIP庫的注冊和注銷
在這里,我們開發基于libosip和libexsip庫進行開發。下面是設備注冊的步驟:
(1)初始化SIP協議
先初始化sip,初始化sip,主要包括開啟sip的打印、初始化eXosip_init和監聽端口,具體代碼如下:
int SipInit(int debugEnable, int transport, int port) {if (debugEnable){osip_trace_initialize(debugEnable, NULL);}int ret = eXosip_init ();if (ret != OSIP_SUCCESS ){return -1;}ret = eXosip_listen_addr (transport, NULL, port, AF_INET, 0);if ( ret != OSIP_SUCCESS ){eXosip_quit();return -1;}GB_PrintDebug("eXosip_init successfully!\n");return 0; }(2)設備的注冊和注銷:
設備的注冊和注銷使用同一個接口SipReg,isReg為1代表注冊,為0代表注銷。
下面的函數是不帶認證注冊和帶認證注冊的兩個函數
static int SipRegisterUnauthorized(GB28181Param_t *pGB28181Param, int expires) {int ret;char from[128] = {0, };char proxy[128] = {0, };eXosip_event_t *je = NULL;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}snprintf(from, sizeof(from), "sip:%s@%s:%s", pGB28181Param->userParam.devSipID, pGB28181Param->userParam.devSipIP,pGB28181Param->userParam.devSipPort);snprintf(proxy, sizeof(proxy), "sip:%s@%s:%s", pGB28181Param->userParam.sipServerID, pGB28181Param->userParam.sipServerIP,pGB28181Param->userParam.sipServerPort);eXosip_masquerade_contact(pGB28181Param->userParam.devSipIP, atoi(pGB28181Param->userParam.devSipPort)); eXosip_set_user_agent(pGB28181Param->productParam.manufacturer); eXosip_lock();g_SipState.registerID = eXosip_register_build_initial_register( from, proxy, NULL, expires, ®);if(g_SipState.registerID < 0){eXosip_unlock();return -1;}ret = eXosip_register_send_register(g_SipState.registerID, reg);if(ret != OSIP_SUCCESS){eXosip_unlock();return -1;}// osip_message_free(reg);eXosip_unlock();return 0; }static int SipRegisterAuthorized(GB28181Param_t *pGB28181Param, int rid, int expires) {int ret = 0;osip_message_t *reg = NULL;if (!pGB28181Param){return -1;}eXosip_lock();eXosip_clear_authentication_info();eXosip_add_authentication_info( pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipID,pGB28181Param->userParam.devSipPasswd, "MD5", NULL);eXosip_register_build_register( rid, expires, ®);ret = eXosip_register_send_register(rid, reg);eXosip_unlock();return ret; }通過上述接口就可以進行GB28181的初始化了。
參考資料:
《GBT 28181-2016 公共安全視頻監控聯網系統信息傳輸、交換、控制技術要求》
總結
以上是生活随笔為你收集整理的GB28181协议--设备注册和注销的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在asp.net中做视频转换,将各种视频
- 下一篇: 这几款好加密软件让你不再担心担心隐私泄露