Guest gnoo Posted June 9, 2019 Posted June 9, 2019 Saudações, Este conteúdo está sujeito a erros de interpretação por parte da minha pessoa, se vires algum erro ou achas que tens algo a acrescentar deixa nos comentários para ser corrigido/adicionado... Os conceitos de redes aqui apresentados foram retirados do livro: SCRIPT EM PYTHON #!/usr/bin/env python3 from socket import * import struct import binascii # Faz desempacotamento dados do frame ethernet que nos chegam em formato de bytes def ethernet_frame(raw_dados): mac_destino, mac_fonte, tipo_ethernet = struct.unpack('! 6s 6s H', raw_dados[:14]) return byte_to_hex_mac(mac_destino), byte_to_hex_mac(mac_fonte), htons(tipo_ethernet), raw_dados[14:] # Passa o endereço da função MAC na função ethernet_frame para hexadecimal # Acabando por ser representado numa arquitetura de 6 octetos def byte_to_hex_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)]) # Extrai dados do header, pacote ARP (Request/ Reply) def header_pacote_arp(payload): (tipo_hardware, tipo_protocolo, tamanho_endereco_hardware, tamanho_endereco_protocolo, operacao, mac_sender, ip_sender, mac_dest, ip_dest) = struct.unpack("!HHBBH6s4s6s4s", payload) # Dicionário tipo_de_operacao """ Este dicionario indica que tipo de operação é realizada é usado no diconaŕio a seguir(dados_header_arp), onde é passado o valor da variável operacao que é passado como key """ tipo_de_operacao = {1:"(1) Request", 2:'(2) Reply'} dados_header_arp = {'Tipo Hardware':tipo_hardware, 'Tipo Protocolo':htons(tipo_protocolo), 'Tamanho Endereço Hardware':tamanho_endereco_hardware, 'Tamanho Endereço Protocolo':tamanho_endereco_protocolo, 'Operação': tipo_de_operacao[operacao], 'MAC de quem envia': byte_to_hex_mac(mac_sender), 'Ip de quem envia':inet_ntoa(ip_sender), 'MAC de quem recebe': byte_to_hex_mac(mac_dest), 'IP de quem recebe':inet_ntoa(ip_dest)} return dados_header_arp sock = socket(AF_PACKET, SOCK_RAW, ntohs(0x0003)) while True: raw_dados, addr = sock.recvfrom(65536) mac_destino, mac_fonte, tipo_ethernet, payload = ethernet_frame(raw_dados) if tipo_ethernet == 1544: print("##### HEADER ARP #####") print("\n".join("{}: {}\n".format(key, valor_key) for key, valor_key in header_pacote_arp(payload[:28]).items())) O conteúdo aqui deixado é imprescindível, que seja complementado por informação contida no livro recomendado no início do post. Abraço.
Guest gnoo Posted June 10, 2019 Posted June 10, 2019 @BrNaka Esse livro para introdução é bom, mas se quiseres um livro um pouco melhor para estudo do TCP / IP tens este:
BrNaka Posted June 12, 2019 Posted June 12, 2019 Vlw pela dica, @gnoo! Vou dar uma olhada nesse depois.. Meu conhecimento em Redes é bem limitado haha
Guest gnoo Posted June 12, 2019 Posted June 12, 2019 O meu conhecimento de redes também não é grande coisa, mas vai-se aprendendo aos poucos :)
Recommended Posts
Archived
This topic is now archived and is closed to further replies.