我正在寻找可以解析sip数据包的c#库或类。我需要可以帮助我从数据包中获取Call-ID字段,请求类型以及基本上将sip数据包细分为其字段的函数。
有人知道有什么可以帮助我的吗?谢谢,ofek
我的sipsorcery项目中的此类课程可以为你完成。
更新:如果你的字符串包含完整的SIP数据包,则可以使用以下方法来解析完整的内容:
var req = SIPSorcery.SIP.SIPRequest.ParseSIPRequest(reqStr);
var headers = req.Header;
var resp = SIPSorcery.SIP.SIPResponse.ParseSIPResponse(respStr);
var headers = resp.Header;
如果你不知道SIP数据包是请求还是响应,则可以使用SIPMessage类:
var mess = SIPSorcery.SIP.SIPMessage.ParseSIPMessage(messStr, null, null);
var headers = SIPSorcery.SIP.SIPHeader.ParseSIPHeaders(mess.SIPHeaders);
更新2:
假设你正在使用pcap.net捕获SIP数据包,则最终可能会得到一个字节块而不是一个字符串。你可以使用SIPMessage类来解析来自UDP有效负载的SIP数据包:
var mess = SIPSorcery.SIP.SIPMessage.ParseSIPMessage(packet.Ethernet.IPv4datagram.Udp.Payload, null, null);
var headers = SIPSorcery.SIP.SIPHeader.ParseSIPHeaders(mess.SIPHeaders);
麻烦您了,但问题是我不知道应该在函数中输入什么字符串。就像我说的那样,我正在使用pcap.net来捕获数据包,因此我具有“ Packet”类。我应该发送整个数据包吗?或仅仅是packet.Ethernet.IPv4datagram.Udp.Payload.ToString()??? 非常感谢!
捕获数据包的SIP部分将是UDP有效负载,因此Udp.Payload似乎是正确的属性。查看更多更新。
如果您可以帮助我,还需要做一件事。我需要获取源号码和目的号码(而不是IP,号码)。谢谢!
对于目标编号,您可能意味着请求URI(req.URI.User),对于源编号,请查看“发件人”标头。
再次嘿:)有没有办法从SIP数据包中获取SDP信息?我试图从SIP数据包中获取媒体端口,以便知道哪些RTP数据包属于哪些SIP数据包