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()