2016-09-23 6 views
0

Я хочу построить «SIP-сниффер» для моего проекта, чтобы предупреждать входящий звонок из VoIP-связи. Я пытаюсь позвонить со своего смартфона на свой ноутбук и проверить входящий пакет на wirehark , Я вижу все SIP-сообщение (INVITE, BYE, TRYING). Я знаю, что основные из SIP, он использует порт UDP 5060.пакет-сниффер не может понюхать пакет SIP (voip)

Далее я использую этот код из http://www.binarytides.com/python-packet-sniffer-code-linux/ < < --- последний код, длинный код (я пытаюсь вставить, но я не могу вставить код в поле) пробег с Raspberry PI подключается к ноутбуку по кабелю локальной сети.

Эта программа может обнюхать UDP-пакет, я проверяю проводы, что это правильно. 90% (IP-адрес и IP-адрес не верны). Порт и полезная нагрузка верны. Я проверяю заголовок из заголовка ethernet ===> ip header ===> udp header он не отличается от SIP-INVITE, они различают только полезную нагрузку (check by wireshark).

, но я стараюсь VoIP вызова на мой ноутбук, он не работает, он никогда не нюхать 5060 или 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

не этот код. это самый длинный код. сокеты з = socket.socket (socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0003)) это понюхать все в наступающем и исходящих пакетов , но я хочу, входящий только UDP я пытаюсь изменить как ваш совет до этого, но он нюхает только MAC-адрес, thx для вашего advie. – RinnaMo

+0

Можете ли вы изменить это в вашем коде: протокол = ИОЗ [6] в протокол = ntohs (IPH [6]) Вы можете поставить печать для IPH [6] и проверить, если его значение собственно так что мы можем уволить вопрос о проблеме. – Pramod

+0

error say: name '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