Anmelden an SIP Server(Asterisk)
-
Hi @ all,
ich bin gerade damit angefangen ein Softphone zu proggen. Ich scheitere bereits dabei mich am Server zu authorisieren. Benutzt wird der Asterisk Server.
Also ich eröffne eine neues Socket für UDP.
socket (mysocket, SOCK_DGRAM, IPPROTO_UDP);
Funktioniert auch wunderbar. Connect ebenfalls.
Für das SOCKADDR_IN nutze ich die IP des Registrars und den Standardport 5060 für SIP.
Nun sende ich Bspw. ein INVITE sip:user@registrar.tld.
Lässt sich auch noch an den Server senden. Dann kommt der recv und tschüß.Habe auch bereits versucht mich erstmal zu registrieren.
Mit REGISTER sip:uacName@registrar.tld SIP/2.0 aber auch das endet mit Stillstand.Es passiert einfach gar nichts mehr. Nicht mal irgendein Fehler kommt zurück und wenn es nur ein Timeout wäre, wäre ich bereits zufrieden.
Da ich mich mit SIP zum ersten mal auseinandersetze weiß ich gerad nicht so recht weiter und die Quellen die ich im Netz finden konnte sind für das Problem auch nicht wirklich hilfreich.
Muss ich mich vorab noch authorisieren?
Hoffe hier findet sich jemand der sich mit dem Thema etwas auskennt und mir weiterhelfen kann.
Gruß
CrazyPlaya
-
das protokoll mit den beispielen hilft eventuell
http://tools.ietf.org/html/rfc3261#page-118
und eine von vielen beispielanwendungen im web..
http://www.voipsa.org/pipermail/voipsec_voipsa.org/2007-August/002410.htmlfür mögliche umsetzungen des protokolls.
aber ich weiß nicht, auf welcher ebene du programmierst
-
Vor allem weiss man nicht auf welcher Ebene es hier hakt.
Sniff durch erstmal den Netzwerkverkehr um zu sehen was du da wirklich losschickst und ob evtl. was vom Server zurückkommt.
(http://www.wireshark.org/)
Dann kann ich dir weiterhelfen, kenn mich mit SIP relativ gut aus.
-
Ahhh, danke schön:D.
Jetzt habe ich direkt mal meinen Fehler entdeckt.Nach so einem Source Example habe ich gesucht wie ein blöder hät ich mal schon eher hier gepostet:D
-
War ein Anfängerfehler:D. Habe das SIP Packet nicht korrekt aufgebaut.
-
Weiter mit den Anfängersorgen:D
Ich führe meine Register Anfrage wie im RFC beschrieben aus."REGISTER sip:voip.server.tld SIP/2.0\r\n" "Via: SIP/2.0/UDP xyz.server.tld:5060;branch=z9hG4iKnashds7\r\n" "Max-Forwards: 70\r\n" "To: ich <sip:xyz.server.tld>\r\n" "From: ich <sip:xyz.server.tld>;tag=456248\r\n" "Call-ID: 84381637984230@998sdasdh09\r\n" "CSeq: 1828 REGISTER\r\n" "Contact: <sip:xyz@1.1.1.1>\r\n" "Expires: 7200\r\n" "Content-Length: 0\r\n\r\n"
Bekomme aber den Error 404: Not Found(domain name) zurück.
Richtig ist dass ich xyz.server.tld nicht anpingen kann.
Der Benutzer heiß aber xyz. Was mach ich falsch?
-
So das Problem wäre erledigt. Man sollte die RFC nicht zu genau nehmen.
Dort wird das To: ich sip:xyz.server.tld z.B. so angezeigt anstatt so wie es ich gehört To: ich sip:xyz@server.tld.Nur mit der Authentification habe ich noch so meine Schwierigkeit. Was bedeuten die Felder realm, nonce etc. Wo finde ich darüber Infos?
Rückgabe Fehler 401 Unauthorized
-
Hier vllt. nochmal mein jetziges Package
"REGISTER sip:xyz@server.tld SIP/2.0\r\n" "Via: SIP/2.0/UDP xyz@server.tld:5060;branch=z9hG4iKnashds7\r\n" "Max-Forwards: 70\r\n" "To: ich <sip:xyz@server.tld>\r\n" "From: ich <sip:xyz@server.tld>;tag=456248\r\n" "Call-ID: 84381637984230@998sdasdh09\r\n" "CSeq: 1828 REGISTER\r\n" "Contact: <sip:xyz@1.1.1.1>\r\n" "Expires: 7200\r\n" "Content-Length: 0\r\n\r\n"
-
siehe zB. http://www.voip-info.org/wiki/view/SIP+Authentication und darin zitierte RFCs.
-
So habe ich es mittlerweile auch bereits probiert.
Zumindest nach RFC 2617. Die andere ist mir dabei gar nicht in die Augen geschossen. Werde es am Montag noch mal probieren.
-
So nun habe ich eigentlich alles implementiert.
Habe die Digest Authentifizierung durchgeführt.
Dazu habe ich auf folgende Weise Hashes gebildet:hash1 = md5(user:realm:passwd) hash2 = md5(register:uri) response= md5(hash1:nonce:hash2)
Somit habe ich meine response value.
mache ich nun einen REREGISTER mit der Autorisierung, dann bekomme ich die Response 403 Forbidden(Bad Auth)
Meine Frage zu der Berechnung der Hashes,
für den realm habe ich den Wert genommen der mir bei der Unauthorized Response zurückgeliefert wurde. Diese ist anders als der URI. Sollte aber doch kein Prob sein.
Dann wie ist das mit den werten für den 2. Hash für die Methode "REGISTER" oder "Digest" nehmen?
Für die URI, nehme ich hier die IP des Servers oder muss ich noch die index datei mit angeben? also bspw. so: uri/index.html. oder einfach nur uri?Gruß
CrazyPlaya
-
Hello! kacdffg interesting kacdffg site!