python - pjsua - 禁止 403(错误的身份验证)

标签 python sip pjsip

我正在使用 pjsua 的 python 模块并尝试注册到 PBX。

这是代码:

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 需要密码)。

我从 PBX 收到一个 sip 数据包 SIP 403 禁止(错误的身份验证)。

为了进行比较,我查看了来自另一个注册成功的 sip 客户端的另一个注册数据包。 (PBX发回OPTIONS包)。

这是数据包:

此数据包收到 FORBIDEN(错误身份验证)响应(失败)

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:561123@181.21.200.109>;tag=10a3290c7748480c9c0808366ae0c840 (Different)

To: <sip:561123@181.21.200.109> (Different)

Call-ID: 94f280c9cfcf41539b500ff39582a1ef

CSeq: 21606 REGISTER

User-Agent: pjsip python

Contact: <sip:561123@181.21.200.50: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:561123@181.21.200.109:5060>;tag=307m6Zy8cj7pa

To: <sip:561123@181.21.200.109:5060>

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

CSeq: 3 REGISTER

Contact: <sip:561123@181.21.200.150>

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

有人知道为什么我会收到禁止的回复吗?我的代码有问题吗?

提前致谢

最佳答案

您的 PABX 确实需要这些帐户的密码(否则我们将看不到随机数、响应和授权 header 本身),因此请确保密码有效。 如果找不到帐户(配置:alwaysauthreject=yes),并且您的日志没有澄清这一点,那么 Asterisk 也可能会拒绝 403 注册,因为您尝试从 python 和独立客户端注册不同的扩展。

最好使用相同的分机进行比较(但不要尝试同时将两个软件电话注册到同一分机)。

关于python - pjsua - 禁止 403(错误的身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672233/

相关文章:

android - 运行 PJSUA android 示例应用程序时出错

ios - 为桌面 Mac 构建和编译 PJSIP

c - 如何在 armv7 架构中构建 mcrypt 库?

ios - 当第二个电话打到我的 iOS voip 应用程序时,如何播放调用等待提示音?

Python -> 函数 -> 如果没有为其中一个变量提供值

python - 如何使用 OpenCV 生成类似纸张的背景

python - ProcessPoolExecutor,BrokenProcessPool处理

python - 在 pandas df.plot 中设置颜色图限制

sip - 在 SIP UAC 上获取 RINGING 响应,而不从其他 UAC 发送该响应

ios - 如何为支持 IPv6 的 IOS 构建和测试 PJSIP 2.5.5