在SDP数据包中发送用户定义的字符串

时间:2011-10-08 15:31:57

标签: sip asterisk sdp

有没有办法在INVITE消息的SDP部分内以类似隐写术的方式将来自呼叫者的短用户定义字符串发送到被调用者?我尝试将字符串设置为大约15,在 k = p = e = u = 字段。但是,Asterisk服务器不接受Invite消息。当然,我在IP-Header和UDP-Header中设置了新长度,然后我计算了IP-Header的新Internet校验和。我还考虑了CRLF计划和领域的顺序。

目标是,当被叫方以200 OK消息向主叫方回复时,将SDP数据中的数据从主叫方传输到被叫方,反之亦然。

提前谢谢!

消息,i = 111.111.111.111,Asterisk不接受

INVITE sip:1000@192.168.0.14 SIP/2.0
Via: SIP/2.0/UDP 192.168.11.2:6060;rport;branch=z9hG4bKGvBkM0qF4
Max-Forwards: 70
To: <sip:1000@192.168.0.14>
From: <sip:2000@192.168.0.14>;tag=SOXFP4ir
Call-ID: BEkXWRwn-1318101970419@x61.local
CSeq: 39 INVITE
Content-Length: 231
Content-Type: application/sdp
Contact: <sip:2000@192.168.11.2:6060;transport=UDP>

v=0
o=user1 1396633799 2096570444 IN IP4 192.168.11.2
s=-
i=111.111.111.111
c=IN IP4 192.168.11.2
t=0 0
m=audio 8000 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv

相同的消息,但没有i = 111.111.111.111。此数据包被接受,呼叫过程成功结束(使用TRYING,RING 200OK)

INVITE sip:1000@192.168.0.14 SIP/2.0
Via: SIP/2.0/UDP 192.168.11.2:6060;rport;branch=z9hG4bKESGSZD1V6
Max-Forwards: 70
To: <sip:1000@192.168.0.14>
From: <sip:2000@192.168.0.14>;tag=YPPrCWLp
Call-ID: 10MpKHYD-1318102031971@x61.local
CSeq: 41 INVITE
Content-Length: 211
Content-Type: application/sdp
Contact: <sip:2000@192.168.11.2:6060;transport=UDP>

v=0
o=user1 1682420165 643979666 IN IP4 192.168.11.2
s=-
c=IN IP4 192.168.11.2
t=0 0
m=audio 8000 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv

实际上一切都很好。我无法看到回应。我通过NFQUEUE拦截iptables上的数据包。然后只需几个strstr,memcpy等来改变和构建新的数据包。我知道有一些SDP堆栈/ API,但在我的情况下,快速而肮脏的解决方案就足够了。

1 个答案:

答案 0 :(得分:0)

尝试i =字段。如RFC 4566中所述:

  

“i =”字段旨在提供会话的自由形式的人类可读描述或媒体流的目的。它不适合自动分析。

因此Asterisk服务器不应该验证该字段,使您能够在那里放置所需的文本。