首页 文章

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

提问于
浏览
0

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

接下来,我使用这个代码从http://www.binarytides.com/python-packet-sniffer-code-linux/ << ---最后一个代码,最长的代码(我尝试粘贴但我不能粘贴在框中的代码)运行与Raspberry PI通过LAN电缆连接到笔记本电脑 .

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

但我尝试将VoIP呼叫到我的笔记本电脑,它不起作用,它从不嗅探5060或SIP数据包(有一次我看到拨出的呼叫数据:“sip:xxxx@linphone.org”)

为什么我可以嗅到其他但VoIP不能 .

抱歉我的英语不好 . 感谢您的意见 .

2 回答

  • 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
    #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
    

相关问题