[Problem] Anruf mit PJSIP nicht möglich: 401 Unauthorized

fussel132

Neuer User
Mitglied seit
9 Feb 2024
Beiträge
5
Punkte für Reaktionen
0
Punkte
1
Hallo Zusammen,

ich habe aktuell folgendes Projekt: eine "smarte" Klingelanlage. Auf einem Raspberry Pi läuft PJSIP mittels PJSUA2 (gewrappt für Python). Wenn also geklingelt wird, dann soll das System eine Nummer anrufen können und auf einen Bestätigungs-DTMF warten. Was SIP und auch die nötige SIP URI angeht habe ich leider keine Erfahrung, deshalb klappt es bestimmt auch nicht. PJSUA2 registriert sich erfolgreich an der FB und man kann über die Kurzwahl den Pi auch anrufen (der lehnt wie gewünscht den Anruf sofort ab). Nun starte ich den Aufruf von makeCall mit folgender URI: "sip:{zielnummer}@fritz.box". Da bekomme ich immer nur
Code:
Response msg 401/INVITE/cseq=25075 (rdata0x7f780021f8) from UDP 192.168.178.1:5060: SIP/2.0 401 Unauthorized
Ich glaube, ich mache definitiv etwas in der Konfiguration falsch. Ich habe folgende Parameter eingestellt:

SipTransportPort: 5060 (UDP)
Account ID URI: "sip:{sipUsername}@fritz.box"
Registrar URI: "sip:fritz.box"
pj.AuthCredInfo("digest", "*", sipUsername, 0, sipPassword)

Ich versuche dann, meine Handynummer anzurufen. In der FritzBox habe ich eine ausgehende Telefonnummer für das "IP Telefon" hinterlegt. Was übersehe ich? Irgendwie scheint ein Anruf so nicht korrekt eingefädelt zu sein...

Vielen Dank für weitere Hilfe!

fussel132
 
Fraglich, ob außer mir im IP-Phone-Forum jemals PJSUA2 über Python genutzt hat. Und ich weiß auch nicht mehr, wie es ging. Mein Tipp: Auf SIP-Ebene mitschneiden (Wireshark, oder Switch mit Port-Mirroring oder die Capture der FRITZ!Box) und in PJSIP selbst den höchsten Verbose- und Debug-Level einstellen.
Ganz normal, also Inlandsnummer? Dann dürfte die Ursache schon mal dies nicht sein …
 
@sonyKatze, dass das Python-„Modul“ nicht so beliebt ist hab ich schon gemerkt, das überhaupt ans Laufen zu kriegen war schon kein Zuckerschlecken. Die Option in der FB hatte ich auch schon im Verdacht, war aber leider nicht das Problem. Die getesteten Nummern waren sowohl Inlands-Mobilnunmern als auch Festnetznummern. Mein Ziel wäre ja auch schon erreicht, wenn ich eine interne Rufnummer anwählen könnte (zB **401) würde das schon reichen.

PJSIP in höchster Output-Stufe zeigt wie gesagt im Kern diese 401 an, nachdem der Anruf nach ~5ms (Verbindungsversuch) wieder beendet wurde. Also scheitert es meiner Meinung nach an der Anfrage an die FB. Ich vermute da eine falsche Verwendung bzw. ein falscher Aufbau dieser SIP URI (oder TEL URI? Ist das einfacher? Hab das nur zufällig mal gelesen :/ )

VG fussel132
 
SIP-URI ist schon richtig. Wie geschildert, auch den tatsächlichen Datenverkehr mitschneiden. Ist das ein Computer mit graphischer Benutzeroberfläche, direkt Wireshark installieren und die Rechte für das Mitschneiden geben. Ansonsten die Capture.html in der FRITZ!Box. Ansonsten einen konfigurierbaren Switch mit Port-Mirroring.
 
Nach was filtere ich den Capture in WireShark?
 
Ich guck da morgen in Ruhe einmal rein. Aber die URI in dem Format sip:[Zieltelefonnummer]@fritz.box korrekt? Die sieht ja sehr ähnlich zur account id uri (sip:[benutzername]@fritz.box), meine erste Vermutung war, dass ich da etwas durcheinander gebracht habe und der quasi versucht sich als Zieltelefonnummer an der fb anzumelden und mir deshalb den 401 schickt weil es den Benutzer natürlich nicht gibt ‍:confused:
 
Das siehst Du dann in den INVITEs. Oben in der Menüleiste hat Wiresahrk auch noch weitere Tools für Telephony bzw. VoIP, so auch ein Ablauf-Diagramm der Nachrichten. ich befürchte nämlich eher, dass Du noch gar nicht authentifiziert bist.
 
Okay, der capture umfasst drei Pakete:
1. INVITE sip:**[email protected]
2. 401 Unauthorized
3. ACK sip:**[email protected]

IMG_750C688C41EC-1.jpeg

In dem 401 steht zusätzlich drin, dass der Anruf von sip:[email protected] (dem VoIP-Account für pjsip aus der FB) kommt. Das ist doch richtig oder müsste da etwas wie sip:[email protected]:5060 (die "Contact URI" aus dem REGISTER Paket) stehen?
Dass ich noch nicht authentifiziert bin kann sehr gut sein, bei dem umgekehrten Fall (man ruft pjsip an) seh ich erst einen INVITE, ein Trying, dann ein Decline und dann die ACK-Request und ich glaube so sollte das ja eigentlich aussehen.

-- Zusammenführung Doppelpost gemäß Boardregeln by stoney

Also, wenn ich mir die beiden INVITES im Vergleich anschaue, glaube ich, dass der Fehler auftritt, weil "From" und "Contact" vertauscht sind.

Beim Anruf AN den Pi steht dort:
From: sip:**[email protected]
To: sip:[email protected]:5060
Contact: sip:[RandomString]@192.168.178.1

Beim Anruf VOM Pi steht aber nicht einfach From/To vertauscht sondern:
From: sip:[email protected]
To: sip:**[email protected]
Contact: sip:[email protected]:5060

Soll das so?

UPDATE:

Ich habe mal mit Zoiper mein Handy registriert und das klappt. Wireshark verrät, dass der erste Versuch von Zoiper auch fehlschlägt, dann aber direkt erneut versucht wird. Nur dass bei dem neuen (erfolgreichen) Versuch in der INVITE Anfrage der Abschnitt "Authorization" erneut mitgeschickt wird, was pjsip nicht tut. Also scheint sich pjsip wirklich nicht bei der FB für diesen Anruf zu authentifizieren oder? Und wenn ja, wie bringe ich pjsua2 dazu, die Anmeldedaten mitzuschicken? @sonyKatze, hier mal der entsprechende Python-Code für einen Anruf:
Python:
def handle_call_event(pjAccount, number, ringDuration, timeout):
    call = MyCall(pjAccount)
    destUri = "sip:**[email protected]"
    prm = pj.CallOpParam()
    prm.opt.audioCount = 0 # Disable Audio for now
    try:
        call.makeCall(destUri, prm)
    except pj.Error as err:
        logging.error(err.info())
 
Zuletzt bearbeitet:
Dazu müsste man jetzt PJSIP auseinander nehmen, warum der Ablauf nicht weitergeht. Aktuell machst Du Blindflug. Oder Du probierst wild herum. Ich würde im Python-Code anstatt „fritz.box“ überall „192.168.178.1“ verwenden. Wenn das nicht klappt, genau mit dem Realm in WWW-Authenticate anschauen.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.