使用Python解码SIP消息

时间:2012-08-23 14:38:07

标签: python sip decode pcap

我需要能够嗅探和解码SIP消息的python脚本,以便检查它们的正确性。 作为此脚本的基础,我使用python-libpcap库进行数据包嗅探。我可以捕获UDP数据包并从中提取SIP有效负载,但我不知道如何解码它。 python是否有任何用于数据包解码的库?我发现只有dpkt,但据我所知它无法解码SIP。 如果没有这样的库,我怎么能用手做这些东西?

提前谢谢!

3 个答案:

答案 0 :(得分:3)

最后,我在sharktools(http://www.mit.edu/~armenb/sharktools/)的pyshark的帮助下做到了这一点。为了嗅探IP包,我使用了scapy而不是libpcap。

答案 1 :(得分:1)

python的twisted框架包括对SIP的一些支持。但它似乎是为RFC 2543而不是RFC 3261编写的。

dpkt库有一些基本的SIP支持。

另一种方法是使用像ANTLR这样的解析器生成器来解析SIP消息。 ANTLR可以创建基于python的解析器。我在网上找到一个可用于SIP的ANTLR语法并不会感到惊讶,虽然我在搜索的前几分钟没有找到一个。

答案 2 :(得分:0)

由于您的需求似乎非常习惯,我建议您自己动手。语法在RFC 3261末尾的BNF语法中定义。你可能只想验证你需要的东西而不是整个语法,因为它非常庞大。

尝试按步骤进行处理。如果您尝试处理同一功能中的所有内容,您将最终获得巨大而复杂的功能。尝试在每个步骤生成数​​据以简化处理。例如,在第一步,您可以读取数据包的每一行并生成一对标题/内容。这使得更加友好的数据结构可以进一步细化。

像yotommy所说,你可以使用ANTLR,但除非你非常熟悉它,否则它不会是我的选择。语法很大,使用ANTLR表示不容易。