rtsp 用戶名、密碼登錄

在使用rtp看視頻時,有時候需要使用用戶名和密碼登錄,那麼在用戶名密碼登錄的流程是怎麼樣的呢?

大致流程:

                   rtsp 客戶端發送DESCRIBE指令

                    服務器應答401錯誤,說明需要用戶名密碼認證

                    rtsp 客戶端再次發送DESCRIBE指令,該指令包含用戶名密碼等有效信息,其中密碼採用MD5算法加密發送

                    服務器應答成功

                    rtsp客戶端繼續setup、play流程

抓包分析:

DESCRIBE rtsp://192.168.100.123:554/mpeg4cif RTSP/1.0
CSeq: 6
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdp


RTSP/1.0 401 Unauthorized
CSeq: 6
Date: Fri, Feb 24 2017 07:17:45 GMT
WWW-Authenticate: Digest realm="LIVE555 Streaming Media",nonce="213d8479345cb52cee152187ed8f16d9"


DESCRIBE rtsp://192.168.100.123:554/mpeg4cif RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="LIVE555 Streaming Media", nonce="213d8479345cb52cee152187ed8f16d9", uri="rtsp://192.168.100.123:554/mpeg4cif", response="40c4124a69551684cec093e6ae45af96"
User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)
Accept: application/sdp


RTSP/1.0 200 OK
CSeq: 7
Date: Fri, Feb 24 2017 07:17:45 GMT
Content-Base: rtsp://192.168.100.123/mpeg4cif/
Content-Type: application/sdp
Content-Length: 681

v=0
o=- 187880931531 1 IN IP4 192.168.100.123
s=RTSP/RTP stream from Network Video Server
i=mpeg4cif
t=0 0
a=tool:LIVE555 Streaming Media v2011.05.25
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:RTSP/RTP stream from Network Video Server
a=x-qt-text-inf:mpeg4cif
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:384
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=640014;sprop-parameter-sets=Z2QAFK2EAQwgCGEAQwgCGEAQwgCEK1CwS03AQEBQAAADABAAAAMBKEA=,aO48sA==;config=0000000167640014ad84010c20086100430802184010c200842b50b04b4dc040405000000300100000030128

400000000168ee3cb0
a=x-dimensions: 352, 288
a=x-framerate: 8
a=control:track1

response字段計算:

RTSP客戶端應該使用username + password並計算response如下:

(1)當password爲MD5編碼,則

   response = md5(password:nonce:md5(public_method:url));

(2)當password爲ANSI字符串,則

    response= md5(md5(username:realm:password):nonce:md5(public_method:url));

客戶端在每次發起不同的請求方法時都需要計算response字段,同樣在服務器端校驗時也默認採取同樣的計算方法。


當password爲ANSI字符串爲例講解:

step 1:

md5(username:realm:password)
username:admin
realm:LIVE555 Streaming Media  #這個字符在DESCRIBE應答401錯誤時返回
password:123456
md5(admin:LIVE555 Streaming Media:123456)=b5d76ea8a4c88c4397efbbdbcb8cc725

step 2:

md5(public_method:url)
public_method:DESCRIBE
url:rtsp://192.168.100.123:554/mpeg4cif
md5(DESCRIBE:rtsp://192.168.100.123:554/mpeg4cif)=ec124df220a2c580359ebd8aebff813f


step 3:

response= md5(md5(username:realm:password):nonce:md5(public_method:url))   #nonce字段在DESCRIBE應答401錯誤時返回

md5(b5d76ea8a4c88c4397efbbdbcb8cc725:213d8479345cb52cee152187ed8f16d9:

ec124df220a2c580359ebd8aebff813f)=40c4124a69551684cec093e6ae45af96


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章