2015-02-23 37 views
1

我使用python模塊爲pjsua並嘗試註冊到PBX。pjsua - 獲取403禁止(壞auth)

這裏是代碼:

import sys 
import pjsua as pj 
import threading 


def log_cb(level, str, len) 
    print str, 

class MyAccountCallback(pj.AccountCallback) 
    sem = None 

    def __init__(self, account) 
     pj.AccountCallback.__init__(self, account) 

    def wait(self) 
     self.sem = threading.Semaphore(0) 
     self.sem.acquire() 

    def on_reg_state(self) 
     if self.sem 
      if self.account.info().reg_status = 200 
       self.sem.release() 

lib = pj.Lib() 

try 
    lib.init(log_cfg = pj.LogConfig(level=4, callback=log_cb)) 
    lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(5060)) 
    lib.start() 

    acc = lib.create_account(pj.AccountConfig("181.21.200.109:5060", "561123", "admin")) 

    acc_cb = MyAccountCallback(acc) 
    acc.set_callback(acc_cb) 
    acc_cb.wait() 

    print n 
    print Registration complete, status=, acc.info().reg_status, 
      (+ acc.info().reg_reason +) 
    print nPress ENTER to quit 
    sys.stdin.readline() 

    lib.destroy() 
    lib = None 

except pj.Error, e 
    print Exception + str(e) 
    lib.destroy() 

PBX IP是181.21.200.109,則數我試圖註冊爲123456,並作爲密碼 - 我只是把123(我不要以爲PBX需要密碼)。

我從集團電話獲得一個sip數據包SIP 403 forbidden(bad auth)。

爲了進行比較,我查看了另一個來自注冊成功的不同SIP客戶端的註冊包。 (PBX發回選項數據包)。

這裏有包:

此數據包被禁伐(壞AUTH)響應(失敗)

REGISTER sip:181.21.200.109:5060 SIP/2.0 

Via: SIP/2.0/UDP 181.21.200.50:51117;rport;branch=z9hG4bKPj36c48c6ff87b47ac86c9036e0acbaed4 (Different) 

Route: <sip:181.21.200.109:5060;lr> (Different) 

Max-Forwards: 70 

From: <sip:[email protected]>;tag=10a3290c7748480c9c0808366ae0c840 (Different) 

To: <sip:[email protected]> (Different) 

Call-ID: 94f280c9cfcf41539b500ff39582a1ef 

CSeq: 21606 REGISTER 

User-Agent: pjsip python 

Contact: <sip:[email protected]:51117;ob> (Different) 

Expires: 300 

Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS - (Different Options) 

Authorization: Digest username="561123", realm="asterisk", nonce="21f4ad6b", uri="sip:181.21.200.109:5060", response="62a339057d2b4e3fed4d368ff94f6d46", algorithm=MD5 

Content-Length: 0 

這個包得到OPTIONS響應(成功)

REGISTER sip:181.21.200.109:5060 SIP/2.0 

Via: SIP/2.0/UDP 181.21.200.150;rport;branch=z9hG4bK4H5Z6Z2myFUNr 

Max-Forwards: 70 

From: <sip:[email protected]:5060>;tag=307m6Zy8cj7pa 

To: <sip:[email protected]:5060> 

Call-ID: f3ce9234-40e3-1233-a783-5c6b32d1a9b5 

CSeq: 3 REGISTER 

Contact: <sip:[email protected]> 

User-Agent: sofia-sip/1.12.11 

Allow: REGISTER, INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, SUBSCRIBE, REFER, UPDATE, INFO 

Supported: timer, 100rel, path 

Authorization: Digest username="561123", realm="asterisk", nonce="7625cf17", algorithm=MD5, uri="sip:181.21.200.109:5060", response="dca3173b2159f812481ca0c96b10a751" 

Content-Length: 0 

有人知道爲什麼我會得到禁止的迴應嗎?我的代碼有什麼問題嗎?

感謝adcance

回答

1

你PABX 確實需要爲這些帳戶密碼(否則,我們不會看到隨機數,響應和授權頭本身),所以一定要確保密碼是有效的。 如果未找到帳戶(配置:alwaysauthreject = yes),星號也可能拒絕註冊403,並且您的日誌沒有說明您嘗試從python和獨立客戶端註冊不同的擴展名。

最好使用相同的擴展名進行比較(但不要嘗試同時向相同的擴展名同時註冊兩部軟電話)。

+0

感謝您的回答。我在城外呆了幾天,當我回來的時候,我會檢查它並且知道你知道的。再次感謝 – 2015-02-27 08:38:38

+0

好吧,我厭倦了這次使用相同的擴展名,並且還將密碼更改爲「admin」(我不知道密碼是什麼或者如何檢查它,但我認爲「admin」是默認的) 。我編輯了問題中的代碼並添加了這次收到的數據包。我還在數據包之間的不同字段旁邊寫了(不同的)。還注意到在錯誤的寄存器數據包中,在ALLOW字段中 - 允許有不同的動作。你的想法?謝謝 – 2015-03-09 11:50:45

+0

添加了路由頭,因爲pjsua被配置爲使用代理 - 這是由默認使用python API(AccountConfig())設置的代理引起的。它很可能會破壞註冊(它破壞了許多商業運營商的註冊),但我不知道如何刪除它,可能是在pjsua.py,build_config()或者傳遞空數組中更改它(請參閱:cfg- > proxy_cnt = PyList_Size((PyObject *)obj-> proxy);)會有所幫助。 – TMSZ 2015-03-10 15:02:53