2016-09-23 135 views
0

我想建立“SIP嗅探器”为我的项目,以提醒从VoIP的communication.I来电试图从我的智能手机打电话给我的笔记本电脑和Wireshark的检查输入数据包。我看到所有的SIP消息(INVITE,BYE,TRYING)。我知道SIP的基础,它使用UDP端口5060包嗅探器不能嗅出SIP电话(VoIP)数据包

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

该程序可以嗅探UDP包,我检查的Wireshark它正确的90%(IP地址和IP目的地不正确)端​​口和净荷是否正确。我从以太网头部检查头部===> IP头部===> udp头部 它与SIP-INVITE没有区别,它们只有不同的有效负载(通过wireshark检查)。

但我尽量VoIP呼叫我的笔记本电脑,这是不行的,它从来没有嗅出5060或SIP数据包(有一次我看到呼出数据:“SIP:[email protected]”)

为什么我可以嗅探其他,但VoIP不能。

对不起,我英文很差。 感谢您的建议。

回答

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

+0

不是这个代码。它是最长的代码。 原始套接字S = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.ntohs(为0x0003)) 它嗅出所有传入和传出的数据包 但我只想要进入的UDP 我试图改变像你的建议,但它只嗅探MAC地址, THX为您的advie。 – RinnaMo

+0

能否请你在你的代码更改此: 协议= IPH [6] 到 协议= ntohs和(IPH [6]) 你可以就IPH打印[6],并检查它的值是恰当,我们可以解雇永久性问题。 – Pramod

+0

错误说:名字'ntohs'没有定义 – RinnaMo

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