SIP (Session Initiation Protocol)

Support HackTricks

Basic Information

SIP (Session Initiation Protocol) ni protokali ya ishara na udhibiti wa simu inayotumika sana kwa kuanzisha, kubadilisha, na kumaliza vikao vya multimedia, ikiwa ni pamoja na sauti, video, na ujumbe wa papo hapo, juu ya mitandao ya IP. Imeandaliwa na Internet Engineering Task Force (IETF), SIP imefafanuliwa katika RFC 3261 na imekuwa kiwango halisi kwa VoIP na mawasiliano yaliyojumuishwa.

Baadhi ya vipengele muhimu vya SIP ni pamoja na:

  1. Protokali ya Kimaandishi: SIP ni protokali ya kimaandishi, ambayo inafanya iwe rahisi kusoma na kufanyia kazi. Inategemea mfano wa ombi-jibu, sawa na HTTP, na inatumia mbinu kama INVITE, ACK, BYE, na CANCEL kwa kudhibiti vikao vya simu.

  2. Uwezo wa Kupanuka na Ufanisi: SIP ina uwezo mkubwa wa kupanuka na inaweza kutumika katika matumizi madogo pamoja na mazingira makubwa ya biashara na ya carrier-grade. Inaweza kupanuliwa kwa urahisi na vipengele vipya, na kuifanya iweze kubadilika kwa matumizi mbalimbali na mahitaji.

  3. Ushirikiano: Kupitishwa kwa SIP kwa wingi na viwango vya kawaida kunahakikisha ushirikiano bora kati ya vifaa tofauti, programu, na watoa huduma, na kuhamasisha mawasiliano yasiyo na mshono kati ya majukwaa mbalimbali.

  4. Muundo wa Moduli: SIP inafanya kazi na protokali nyingine kama RTP (Real-time Transport Protocol) kwa ajili ya usafirishaji wa media na SDP (Session Description Protocol) kwa ajili ya kuelezea vikao vya multimedia. Muundo huu wa moduli unaruhusu kubadilika zaidi na ulinganifu na aina tofauti za media na codecs.

  5. Seva za Proxy na Redirect: SIP inaweza kutumia seva za proxy na redirect ili kuwezesha upitishaji wa simu na kutoa vipengele vya juu kama vile upitishaji wa simu, uhamishaji wa simu, na huduma za ujumbe wa sauti.

  6. Uwepo na Ujumbe wa Papo Hapo: SIP haijapunguzika kwa mawasiliano ya sauti na video. Pia inasaidia uwepo na ujumbe wa papo hapo, ikiruhusu matumizi mbalimbali ya mawasiliano yaliyojumuishwa.

Licha ya faida zake nyingi, SIP inaweza kuwa ngumu kuunda na kusimamia, hasa inapohusisha masuala ya NAT traversal na moto wa ukuta. Hata hivyo, uwezo wake wa kubadilika, kupanuka, na msaada mpana katika sekta unafanya iwe chaguo maarufu kwa VoIP na mawasiliano ya multimedia.

SIP Methods

Mbinu kuu za SIP zilizofafanuliwa katika RFC 3261 ni pamoja na:

  1. INVITE: Inatumika ku anzisha kikao kipya (simu) au kubadilisha kilichopo. Mbinu ya INVITE inabeba maelezo ya kikao (kawaida ikitumia SDP) ili kumjulisha mpokeaji kuhusu maelezo ya kikao kilichopendekezwa, kama vile aina za media, codecs, na protokali za usafirishaji.

  2. ACK: Inatumwa ili kuthibitisha kupokelewa kwa jibu la mwisho kwa ombi la INVITE. Mbinu ya ACK inahakikisha uaminifu wa muamala wa INVITE kwa kutoa uthibitisho wa mwisho hadi mwisho.

  3. BYE: Inatumika ku maliza kikao kilichoanzishwa (simu). Mbinu ya BYE inatumwa na upande wowote katika kikao kuonyesha kuwa wanataka kumaliza mawasiliano.

  4. CANCEL: Inatumwa ili kufuta ombi la INVITE lililoko kabla ya kikao kuanzishwa. Mbinu ya CANCEL inaruhusu mtumaji kufuta muamala wa INVITE ikiwa watabadilisha mawazo yao au ikiwa hakuna jibu kutoka kwa mpokeaji.

  5. OPTIONS: Inatumika ku uliza uwezo wa seva ya SIP au wakala wa mtumiaji. Mbinu ya OPTIONS inaweza kutumwa kuomba taarifa kuhusu mbinu zinazoungwa mkono, aina za media, au nyongeza nyingine bila kuanzisha kikao.

  6. REGISTER: Inatumika na wakala wa mtumiaji ku jiandikishe eneo lake la sasa na seva ya SIP registrar. Mbinu ya REGISTER inasaidia katika kudumisha ramani ya kisasa kati ya URI ya SIP ya mtumiaji na anwani yao ya IP ya sasa, ikiruhusu upitishaji na usambazaji wa simu.

Kumbuka kwamba ili kupiga mtu si lazima kutumia REGISTER kwa chochote. Hata hivyo, inawezekana kwamba ili kufanya INVITE mpiga anahitaji kujiandikisha kwanza au atapokea jibu la 401 Unauthorized.

Mbali na mbinu hizi kuu, kuna mbinu kadhaa za nyongeza za SIP zilizofafanuliwa katika RFC nyingine, kama vile:

  1. SUBSCRIBE: Imefafanuliwa katika RFC 6665, mbinu ya SUBSCRIBE inatumika ku omba taarifa kuhusu hali ya rasilimali maalum, kama vile uwepo wa mtumiaji au hali ya simu.

  2. NOTIFY: Pia imefafanuliwa katika RFC 6665, mbinu ya NOTIFY inatumwa na seva ili kumjulisha wakala wa mtumiaji aliyejiandikisha kuhusu mabadiliko katika hali ya rasilimali inayofuatiliwa.

  3. REFER: Imefafanuliwa katika RFC 3515, mbinu ya REFER inatumika ku omba mpokeaji kufanya uhamishaji au kuelekeza kwa upande wa tatu. Hii kwa kawaida inatumika kwa hali za uhamishaji wa simu.

  4. MESSAGE: Imefafanuliwa katika RFC 3428, mbinu ya MESSAGE inatumika ku tuma ujumbe wa papo hapo kati ya wakala wa mtumiaji wa SIP, ikiruhusu mawasiliano ya kimaandishi ndani ya mfumo wa SIP.

  5. UPDATE: Imefafanuliwa katika RFC 3311, mbinu ya UPDATE inaruhusu kubadilisha kikao bila kuathiri hali ya mazungumzo yaliyopo. Hii ni muhimu kwa kuboresha vigezo vya kikao, kama vile codecs au aina za media, wakati wa simu inayoendelea.

  6. PUBLISH: Imefafanuliwa katika RFC 3903, mbinu ya PUBLISH inatumika na wakala wa mtumiaji ku chapisha taarifa za hali ya tukio kwa seva, na kuifanya ipatikane kwa wahusika wengine.

SIP Response Codes

  • 1xx (Majibu ya Muda wa Kijaribio): Majibu haya yanaonyesha kuwa ombi limepokelewa, na seva inaendelea kulifanyia kazi.

  • 100 Trying: Ombi limepokelewa, na seva inafanya kazi juu yake.

  • 180 Ringing: Mpokeaji anapigiwa simu na atachukua simu.

  • 183 Session Progress: Inatoa taarifa kuhusu maendeleo ya simu.

  • 2xx (Majibu ya Mafanikio): Majibu haya yanaonyesha kuwa ombi limepokelewa kwa mafanikio, limeeleweka, na limekubaliwa.

  • 200 OK: Ombi lilifanikiwa, na seva imekamilisha.

  • 202 Accepted: Ombi limekubaliwa kwa ajili ya usindikaji, lakini halijakamilika bado.

  • 3xx (Majibu ya Uelekeo): Majibu haya yanaonyesha kuwa hatua zaidi zinahitajika ili kutimiza ombi, kwa kawaida kwa kuwasiliana na rasilimali mbadala.

  • 300 Multiple Choices: Kuna chaguzi nyingi zinazopatikana, na mtumiaji au mteja lazima achague moja.

  • 301 Moved Permanently: Rasilimali iliyohitajika imepewa URI mpya ya kudumu.

  • 302 Moved Temporarily: Rasilimali iliyohitajika inapatikana kwa muda katika URI tofauti.

  • 305 Use Proxy: Ombi lazima litumwe kwa proxy maalum.

  • 4xx (Majibu ya Kosa la Mteja): Majibu haya yanaonyesha kuwa ombi lina sintaksia mbaya au haliwezi kutimizwa na seva.

  • 400 Bad Request: Ombi lilikuwa na makosa au halikufaa.

  • 401 Unauthorized: Ombi linahitaji uthibitisho wa mtumiaji.

  • 403 Forbidden: Seva ilielewa ombi lakini inakataa kulitimiza.

  • 404 Not Found: Rasilimali iliyohitajika haikupatikana kwenye seva.

  • 408 Request Timeout: Seva haikupokea ombi kamili ndani ya muda iliyojiandaa kusubiri.

  • 486 Busy Here: Mpokeaji kwa sasa yuko busy na hawezi kuchukua simu.

  • 5xx (Majibu ya Kosa la Seva): Majibu haya yanaonyesha kuwa seva ilishindwa kutimiza ombi halali.

  • 500 Internal Server Error: Seva ilikumbana na kosa wakati wa kusindika ombi.

  • 501 Not Implemented: Seva haisaidii kazi inayohitajika kutimiza ombi.

  • 503 Service Unavailable: Seva kwa sasa haiwezi kushughulikia ombi kutokana na matengenezo au mzigo mkubwa.

  • 6xx (Majibu ya Kushindwa kwa Ulimwengu): Majibu haya yanaonyesha kuwa ombi haliwezi kutimizwa na seva yoyote.

  • 600 Busy Everywhere: Mahali pote pa simu ni busy.

  • 603 Decline: Mpokeaji hataki kushiriki katika simu.

  • 604 Does Not Exist Anywhere: Rasilimali iliyohitajika haipatikani popote katika mtandao.

Examples

SIP INVITE Example

INVITE sip:jdoe@example.com SIP/2.0
Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: John Doe <sip:jdoe@example.com>
From: Jane Smith <sip:jsmith@example.org>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:jsmith@pc33.example.com>
User-Agent: ExampleSIPClient/1.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: application/sdp
Content-Length: 142

v=0
o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com
s=-
c=IN IP4 pc33.example.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000te
Kila Param Imeelezwa
  1. Request-Line: INVITE sip:jdoe@example.com SIP/2.0 - Mstari huu unaonyesha njia (INVITE), URI ya ombi (sip:jdoe@example.com), na toleo la SIP (SIP/2.0).

  2. Via: Via: SIP/2.0/UDP pc33.example.com;branch=z9hG4bK776asdhds - Kichwa cha Via kinaelezea itifaki ya usafirishaji (UDP) na anwani ya mteja (pc33.example.com). Paramu "branch" inatumika kwa ajili ya kugundua mizunguko na mechi za muamala.

  3. Max-Forwards: Max-Forwards: 70 - Hiki ni kichwa kinachopunguza idadi ya nyakati ombi linaweza kupelekwa na proxies ili kuepuka mizunguko isiyo na mwisho.

  4. To: To: John Doe <sip:jdoe@example.com> - Kichwa cha To kinaelezea mpokeaji wa simu, ikiwa ni pamoja na jina lake la kuonyeshwa (John Doe) na SIP URI (sip:jdoe@example.com).

  5. From: From: Jane Smith <sip:jsmith@example.org>;tag=1928301774 - Kichwa cha From kinaelezea mtumaji wa simu, ikiwa ni pamoja na jina lake la kuonyeshwa (Jane Smith) na SIP URI (sip:jsmith@example.org). Paramu "tag" inatumika kutambulisha kipekee jukumu la mtumaji katika mazungumzo.

  6. Call-ID: Call-ID: a84b4c76e66710 - Kichwa cha Call-ID kinatambulisha kipekee kikao cha simu kati ya wakala wawili.

  7. CSeq: CSeq: 314159 INVITE - Kichwa cha CSeq kina nambari ya mfuatano na njia iliyotumika katika ombi. Inatumika ku match majibu na maombi na kugundua ujumbe ambao hauko katika mpangilio.

  8. Contact: Contact: <sip:jsmith@pc33.example.com> - Kichwa cha Contact kinatoa njia ya moja kwa moja kwa mtumaji, ambayo inaweza kutumika kwa maombi na majibu yanayofuata.

  9. User-Agent: User-Agent: ExampleSIPClient/1.0 - Kichwa cha User-Agent kinatoa taarifa kuhusu programu au vifaa vya mtumaji, ikiwa ni pamoja na jina na toleo lake.

  10. Allow: Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO - Kichwa cha Allow kinaorodhesha njia za SIP zinazoungwa mkono na mtumaji. Hii inasaidia mpokeaji kuelewa ni njia zipi zinaweza kutumika wakati wa mawasiliano.

  11. Content-Type: Content-Type: application/sdp - Kichwa cha Content-Type kinaelezea aina ya vyombo vya habari vya mwili wa ujumbe, katika kesi hii, SDP (Session Description Protocol).

  12. Content-Length: Content-Length: 142 - Kichwa cha Content-Length kinaonyesha ukubwa wa mwili wa ujumbe kwa bytes.

  13. Message Body: Mwili wa ujumbe unajumuisha maelezo ya kikao cha SDP, ambayo yana taarifa kuhusu aina za vyombo vya habari, codecs, na itifaki za usafirishaji kwa kikao kilichopendekezwa.

  • v=0 - Toleo la itifaki (0 kwa SDP)

  • o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com - Mwandishi na kitambulisho cha kikao

  • s=- - Jina la kikao (hivi ni kusema, alama moja ya hyphen inaonyesha hakuna jina la kikao)

  • c=IN IP4 pc33.example.com - Taarifa za muunganisho (aina ya mtandao, aina ya anwani, na anwani)

  • t=0 0 - Taarifa za wakati (nyakati za kuanza na kuacha, 0 0 inamaanisha kikao hakina mipaka)

  • m=audio 49170 RTP/AVP 0 - Maelezo ya vyombo vya habari (aina ya vyombo vya habari, nambari ya bandari, itifaki ya usafirishaji, na orodha ya muundo). Katika kesi hii, inaelezea mtiririko wa sauti ukitumia RTP/AVP (Real-time Transport Protocol / Audio Video Profile) na muundo 0 (PCMU/8000).

  • a=rtpmap:0 PCMU/8000 - Ramani ya sifa inayoelekeza muundo (0) kwa codec (PCMU) na kiwango chake cha saa (8000 Hz).

Mfano wa SIP REGISTER

Njia ya REGISTER inatumika katika Itifaki ya Kuanzisha Kikao (SIP) kuruhusu wakala wa mtumiaji (UA), kama simu ya VoIP au softphone, kujiandikisha eneo lake na seva ya kujiandikisha ya SIP. Mchakato huu unaruhusu seva kujua mahali pa kuelekeza maombi ya SIP yanayoingia yanayokusudiwa kwa mtumiaji aliyejiandikisha. Seva ya kujiandikisha kwa kawaida ni sehemu ya seva ya proxy ya SIP au seva maalum ya kujiandikisha.

Hapa kuna mfano wa kina wa ujumbe wa SIP unaohusishwa na mchakato wa uthibitishaji wa REGISTER:

  1. Ombi la awali REGISTER kutoka UA hadi seva ya kujiandikisha:

REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

Huu ujumbe wa awali wa REGISTER unatumwa na UA (Alice) kwa seva ya registrar. Unajumuisha taarifa muhimu kama vile muda wa usajili unaotakiwa (Expires), URI ya SIP ya mtumiaji (sip:alice@example.com), na anwani ya mawasiliano ya mtumiaji (sip:alice@192.168.1.100:5060).

  1. 401 Unauthorized jibu kutoka kwa seva ya registrar:

cssCopy codeSIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth"
Content-Length: 0

The registrar server responds with a "401 Unauthorized" message, which includes a "WWW-Authenticate" header. This header contains information required for the UA to authenticate itself, such as the authentication realm, nonce, and algorithm.

  1. REGISTER ombi na akreditivu za uthibitisho:

REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
Max-Forwards: 70
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001
Content-Length: 0

The UA sends another REGISTER request, this time including the "Authorization" header with the necessary credentials, such as the username, realm, nonce, and a response value calculated using the provided information and the user's password.

Hii ndiyo jinsi mjawazo ya Uidhinishaji inavyokadiriwa:

import hashlib

def calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop):
# 1. Calculate HA1 (concatenation of username, realm, and password)
ha1_input = f"{username}:{realm}:{password}"
ha1 = hashlib.md5(ha1_input.encode()).hexdigest()

# 2. Calculate HA2 (concatenation of method and uri)
ha2_input = f"{method}:{uri}"
ha2 = hashlib.md5(ha2_input.encode()).hexdigest()

# 3. Calculate the final response value (concatenation of h1, stuff and h2)
response_input = f"{ha1}:{nonce}:{nc}:{cnonce}:{qop}:{ha2}"
response = hashlib.md5(response_input.encode()).hexdigest()

return response

# Example usage
username = "alice"
password = "mysecretpassword"
realm = "example.com"
method = "REGISTER"
uri = "sip:example.com"
nonce = "abcdefghijk"
nc = "00000001"
cnonce = "lmnopqrst"
qop = "auth"

response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop)
print(f"MD5 response value: {response}")
  1. Majibu ya usajili uliofanikiwa kutoka kwa seva ya registrar:

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds
From: Alice <sip:alice@example.com>;tag=565656
To: Alice <sip:alice@example.com>;tag=7878744
Call-ID: 1234567890@192.168.1.100
CSeq: 2 REGISTER
Contact: <sip:alice@192.168.1.100:5060>;expires=3600
Expires: 3600
Content-Length: 0

Baada ya seva ya registrar kuthibitisha taarifa zilizotolewa, inatuma jibu la "200 OK" kuashiria kwamba usajili umefanikiwa. Jibu linajumuisha taarifa za mawasiliano zilizojisajili na muda wa kumalizika kwa usajili. Katika hatua hii, wakala wa mtumiaji (Alice) amesajiliwa kwa mafanikio na seva ya SIP registrar, na maombi ya SIP yanayoingia kwa Alice yanaweza kuelekezwa kwenye anwani sahihi ya mawasiliano.

Mfano wa Simu

Haijatajwa, lakini Mtumiaji B anahitaji kuwa ametuma ujumbe wa REGISTER kwa Proxy 2 kabla ya kuwa na uwezo wa kupokea simu.

Support HackTricks

Last updated