2016-09-23 158 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