1

有没有办法在 INVITE 消息的 SDP 部分中从调用者向被调用者发送一个短的用户定义字符串(以隐写术的方式)?我尝试在k=p=e=u=字段中设置长度约为 15 的字符串。然而,Asterisk 服务器不接受邀请消息。当然,我在 IP-Header 和 UDP-Header 中设置了新的长度,此外我还计算了 IP-Header 的新 Internet 校验和。我还考虑了 CRLF 方案和字段的顺序。

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

先感谢您!

星号不接受 i=111.111.111.111 的消息:

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,但在我的情况下,快速而肮脏的解决方案就足够了。

4

1 回答 1

0

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

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

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

于 2011-10-08T16:31:14.487 回答