PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anmelden an SIP Server(Asterisk)


K-Asche
24.07.2008, 10:31
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


K-Asche
24.07.2008, 12:39
So das Problem ist gelöst. Habe das SIP Packet falsch aufgebaut.

Allerdings habe ich jetzt immer noch einen Fehler beim registrieren.

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 hier den Error 404: Not Found zurück.
Richtig ist dass ich xyz.server.tld nicht anpingen kann.
Der Benutzer heißt aber xyz. Was mach ich falsch?

foobarflu
24.07.2008, 13:02
sip:xyz@server.tld probiert statt sip:xyz.server.tld?

RFC 3665 ist auch sehr lesenswert

K-Asche
24.07.2008, 14:12
Jap, habe ich versucht.
Es lag aber auch an dem Zahlen wirrwarr hinter dem @ der CallId.

Übrigens wird das in der RFC auch mit nem . anstatt dem @ dargestellt.
Da hab ich mich zusätzlich durch verwirren lassen.
Aber ein Frage habe ich da noch. Wie hänge ich mein Passwort für den Registrar mit an?

Rückgabe Fehler 401 Unauthorized

szebi
24.07.2008, 19:50
rein aus dem bauch heraus würde ich sagen: wie bei ftp, also
username:passwort (ftp://username/)@server:port
gib mal den port auch mit an

foobarflu
24.07.2008, 20:04
Aber ein Frage habe ich da noch. Wie hänge ich mein Passwort für den Registrar mit an?

Rückgabe Fehler 401 Unauthorized
http://tools.ietf.org/rfcmarkup?doc=3665#section-2.1
Der Server schickt Dir ein challenge, das Du beantworten musst. digest-md5 (rfc2831).

K-Asche
30.07.2008, 16:21
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?