Python sniffer only gets multicast address 224.0.0.1

Asked

Viewed 49 times

1

Hi I’m trying to make a Sniffer with Python and when I use my smartphone it only gets the address of multicast 224.0.0.1. How do I get the ip of the site I’m visiting on my smartphone? On my laptop it picks up everything. My network interface is in PROMISC.

from socket import *
from struct import *
import sys
import binascii





def endereco_mac(mac_em_bytes):
    endereco = binascii.hexlify(mac_em_bytes).decode("ascii")
    return ":".join([endereco[i:i+2] for i in range(0,12,2)])


def ethernet_frame(dados_pacote):

    mac_recebe, mac_envia, protocolo = unpack("! 6s 6s 
    H",dados_pacote[:14])

    return endereco_mac(mac_recebe), endereco_mac(mac_envia), 
    htons(protocolo), dados_pacote[14:]

def IPv4(endereco):
    return '.'.join(map(str,endereco))    

def header_IPv4(dados):
    versao_header_tamanho = dados[0]
    versao = versao_header_tamanho >> 4
    tamanho_header = (versao_header_tamanho & 15) * 4
    ttl, protocolo, fonte, target = unpack('! 8x B B 2x 4s 4s', 
    dados[:20])
    return versao, tamanho_header, ttl, protocolo, IPv4(fonte), 
    IPv4(target),dados[tamanho_header:]




def main():

    sock = socket(AF_PACKET, SOCK_RAW, ntohs(3))



    while True:
        try:
            dados_pacote, addr = sock.recvfrom(65565)
            mac_recebe, mac_envia, protocolo_ethernet, dados_pacote = 
            ethernet_frame(dados_pacote)
            print("Ethernet :")
            print("\tProtocolo {}".format(protocolo_ethernet))
            print("MAC recebe: {}  MAC envia: {}".format(mac_recebe, 
            mac_envia))
            if protocolo_ethernet == 8:
                (versao, tamanho_header, ttl, protocolo, fonte, 
                 target, dados_pacote) = header_IPv4(dados_pacote)
                print("\tPacote IPv4:")
                print("\t\tVersão: {}, Tamanho header: {}, TTL: 
                {}".format(versao, tamanho_header, ttl))
                print("\t\t\tProtocolo: {}, Fonte: {}, Destino: 
                {}".format(protocolo, fonte, target))

        except KeyboardInterrupt:
            print("terminado")
            sys.exit(0)


if __name__=='__main__':
    main()
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.