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