小标
2019-01-10
来源 :
阅读 2579
评论 0
摘要:本文主要向大家介绍 C/C++知识点之RTSP C++认证实现了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍 C/C++知识点之RTSP C++认证实现了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

返回的认证报文:
WWW-Authenticate: Digest realm="a4143773bd55", nonce="df9be0ee05ebcb26a4318ea8ba01881b", stale="FALSE"\r\n
在其他的博客中对HTTP进行了认证,指定了其他的一些参数例如md5,auth等参数
int CRtspCommandHandler::HandleUnAuthCommand(char* pszCmdContext, int &nContextLen, const char* pRecvBuffer)
{
std::string strRecvBuf = pRecvBuffer;
std::string strRealm = "realm=\"";
int nRealmLen = strRealm.length();
int nIndexOfRealm = strRecvBuf.find(strRealm, 0);
if (-1 == nIndexOfRealm) return -1;
int nIndexEndOfRealm = strRecvBuf.find("\",", nIndexOfRealm);
if (-1 == nIndexEndOfRealm) return -1;
std::string strRealmValue = strRecvBuf.substr(nIndexOfRealm + nRealmLen, nIndexEndOfRealm - nIndexOfRealm - nRealmLen);
std::string strNonce = "nonce=\"";
int nNonceLen = strNonce.length();
int nIndexOfNonceValueStart = strRecvBuf.find(strNonce, 0);
if (-1 == nIndexOfNonceValueStart) return -1;
int nIndexOfNonceValueEnd = strRecvBuf.find("\",", nIndexOfNonceValueStart);
if (-1 == nIndexOfNonceValueEnd) return -1;
std::string strNonceValue = strRecvBuf.substr(nIndexOfNonceValueStart + nNonceLen, nIndexOfNonceValueEnd - nIndexOfNonceValueStart - nNonceLen);
char* pszAlg = "";
char* pszQop = "";
char* pszNonceCount = NULL;
char* pszCNonce = NULL;
char szNonce[128] = { 0 };
sprintf(szNonce, "%s", strNonceValue.c_str());
char szUserName[128] = { 0 };
sprintf(szUserName, "%s", "admin");
char szRealm[32] = { 0 };
sprintf(szRealm, "%s", strRealmValue.c_str());
char szPassword[32] = { 0 };
sprintf(szPassword, "%s", "admin12345");
char pszMethod[32] = { 0 };
sprintf(pszMethod, "%s", "DESCRIBE");
char pszURI[128] = { 0 };
sprintf(pszURI, "%s", "rtsp://192.168.0.150:554/h264/ch1/main/av_stream");
HASHHEX szHA1;
HASHHEX szHA2 = "";
HASHHEX szResponse;
DigestCalcHA1(pszAlg, szUserName, szRealm, szPassword, szNonce,
pszCNonce, szHA1);
DigestCalcResponse(szHA1, szNonce, pszNonceCount, pszCNonce, pszQop,
pszMethod, pszURI, szHA2, szResponse);
std::string strResponse = szResponse;
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "DESCRIBE " << pszURI << " RTSP/1.0\r\n";
request_stream << "CSeq: " << "4\r\n";
request_stream << "Accept: " << "application/sdp\r\n";
request_stream << "User-Agent: " << "LibVLC/2.1.5 (Live555 Streaming Media v2014.0)\r\n";
request_stream << "Authorization: Digest username=\"" << "admin" << "\","
<< "realm=\"" << strRealmValue << "\","
<< "nonce=\"" << strNonceValue << "\","
<< "uri=\"" << pszURI << "\","
<< "response=\"" << strResponse << "\"\r\n";
request_stream << "\r\n";
request.sgetn(pszCmdContext, request.size());
nContextLen = strlen(pszCmdContext);
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 2
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号