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

Sip 在SDP数据包内发送用户定义的字符串,sip,asterisk,sdp,Sip,Asterisk,Sdp,在INVITE消息的SDP部分中,是否有一种方法可以将短的用户定义字符串从调用者发送到被调用者(以类似于隐写术的方式)?我试图在k=,p=,e=,u=字段中设置长度约为15的字符串。但是,星号服务器不接受邀请消息。当然,我在IP报头和UDP报头中设置了新的长度,此外,我还计算了IP报头的新Internet校验和。我还考虑了CRLF方案和字段的顺序 目标是,当被调用者向调用者发送200OK消息时,将SDP数据中的数据从调用者传输到被调用者,反之亦然 提前谢谢你 带有i=111.111.111.11

在INVITE消息的SDP部分中,是否有一种方法可以将短的用户定义字符串从调用者发送到被调用者(以类似于隐写术的方式)?我试图在k=p=e=u=字段中设置长度约为15的字符串。但是,星号服务器不接受邀请消息。当然,我在IP报头和UDP报头中设置了新的长度,此外,我还计算了IP报头的新Internet校验和。我还考虑了CRLF方案和字段的顺序

目标是,当被调用者向调用者发送200OK消息时,将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
INVITE sip:1000@192.168.0.14SIP/2.0
Via:SIP/2.0/UDP 192.168.11.2:6060;rport;分支=z9hG4bKGvBkM0qF4
最大前锋:70
致:
发件人:;tag=SOXFP4ir
电话号码:BEkXWRwn-1318101970419@x61.local
CSeq:39邀请
内容长度:231
内容类型:应用程序/sdp
联系人:
v=0
o=IP4 192.168.11.2中的用户1 1396633799 2096570444
=-
i=111.111.111.111
c=在IP4 192.168.11.2中
t=0
m=音频8000 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101电话事件/8000
a=sendrecv
相同的消息,但没有i=111.111.111.111。此数据包被接受,呼叫过程成功结束(尝试,拨打200OK)

INVITE sip:1000@192.168.0.14SIP/2.0
Via:SIP/2.0/UDP 192.168.11.2:6060;rport;分支=Z9HG4BKESGZD1V6
最大前锋:70
致:
发件人:;标签=YPPrCWLp
电话号码:10MpKHYD-1318102031971@x61.local
CSeq:41邀请
内容长度:211
内容类型:应用程序/sdp
联系人:
v=0
o=IP4 192.168.11.2中的用户1 1682420165 643979666
=-
c=在IP4 192.168.11.2中
t=0
m=音频8000 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101电话事件/8000
a=sendrecv

事实上,一切看起来都很好。我看不出有什么反应。我正在使用NFQUEUE通过iptables截取数据包。然后只需要几个strstr、memcpy等来修改和构建新的数据包。我知道有一些SDP堆栈/API,但在我的情况下,快速而肮脏的解决方案就足够了。

试试I=字段。如RFC 4566所述:

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


因此,星号服务器不应验证该字段,使您能够将所需文本放在该字段中。

是的,几分钟前尝试过,但没有成功。。。与其他情况一样,INVITE数据包与软电话一起离开pc,并由星号服务器接收。这里wireshark告诉我一切都很好。但就是这样。直到现在,我还不确定如何调试这种错误。在Asterisk CLI中,我尝试了命令“sip set debug on”。但它没有给我任何有用的信息。您知道如何设置适当的调试信息吗?此外,星号服务器是否有禁止此类信息的设置或限制?此外,我还不确定I=消息是否会原封不动地移交给被叫方,遗憾的是,我不知道如何测试这种行为。我只有一个简单的linux软电话和一个西门子S685IP。很有趣。。。将“core set debug”和“core set verbose”设置为1、9和999等。。若我发送一个带有I=的数据包,则不会产生详细/调试输出。然而,数据包到达了asterisk服务器(见asterisk服务器上的wireshark)。如果我使用没有I=字段的数据包,所有内容都显示在调试/详细消息中。如何添加该字段?你能编辑你的问题并粘贴你发送到服务器的数据包吗?可能是服务器不喜欢的地方出了问题。另外,你的邀请应该有答案。你能用Wireshark看到吗?你有没有找到解决这个问题的方法?
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