packet-sniffer无法嗅探SIP(voip)数据包

时间:2016-09-23 10:58:02

标签: python linux sockets udp packet-sniffers

我想构建" SIP嗅探器"我的项目提醒来自VoIP通信的来电。我尝试从我的智能手机拨打我的笔记本,并通过wireshark检查传入的数据包。我看到所有的SIP消息(INVITE,BYE,TRYING)。我知道SIP的基本知识,它使用UDP端口5060。

接下来,我使用来自http://www.binarytides.com/python-packet-sniffer-code-linux/<< ---最后一段代码的代码,最长的代码(我尝试粘贴,但我无法在框中粘贴代码)与Raspberry PI连接到笔记本电脑通过局域网电缆。

这个程序可以嗅探UDP数据包,我检查了wireshark它正确90%(IP地址和IP目的地不正确)端​​口和有效负载是否正确。我从以太网标题检查标题===> ip header ===> udp标题 它与SIP-INVITE没有什么不同,它们只有不同的有效载荷(通过wireshark检查)。

但是我尝试向我的笔记本电脑拨打VoIP电话,它不起作用,它从不嗅探5060或SIP数据包(有一次我看到拨出电话数据:" sip:xxxx@linphone.org" ;)

为什么我可以嗅到其他声音但VoIP不能。

抱歉我的英语不好。 谢谢你的建议。

2 个答案:

答案 0 :(得分:1)

从快速看,我看到你的数据包是UDP。 但python代码只能嗅探TCP。

#create an INET, raw socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

将socket.IPPROTO_TCP更改为socket.IPPROTO_UDP

答案 1 :(得分:1)

#UDP packets
    elif protocol == 17 :
        u = iph_length + eth_length
        udph_length = 8
        udp_header = packet[u:u+8]

        #now unpack them :)
        udph = unpack('!HHHH' , udp_header)

        source_port = udph[0]
        dest_port = udph[1]
        length = udph[2]
        checksum = udph[3]

        print 'Source Port : ' + str(source_port) + ' Dest Port : ' + str(dest_port) + ' Length : ' + str(length) + ' Checksum : ' + str(checksum)

        h_size = eth_length + iph_length + udph_length
        data_size = len(packet) - h_size

        #get data from the packet
        data = packet[h_size:]

        print 'Data : ' + data

    #some other IP packet like IGMP
    else :
        print 'Protocol other than TCP/UDP/ICMP'

    print
相关问题