Guest gnoo Posted June 9, 2019 at 10:30 AM Share Posted June 9, 2019 at 10:30 AM 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. Link to comment Share on other sites More sharing options...
BrNaka Posted June 10, 2019 at 08:05 PM Share Posted June 10, 2019 at 08:05 PM Estou estudando este mesmo livro o/ Link to comment Share on other sites More sharing options...
Guest gnoo Posted June 10, 2019 at 08:51 PM Share Posted June 10, 2019 at 08:51 PM @BrNaka Esse livro para introdução é bom, mas se quiseres um livro um pouco melhor para estudo do TCP / IP tens este: Link to comment Share on other sites More sharing options...
BrNaka Posted June 12, 2019 at 01:19 AM Share Posted June 12, 2019 at 01:19 AM Vlw pela dica, @gnoo! Vou dar uma olhada nesse depois.. Meu conhecimento em Redes é bem limitado haha Link to comment Share on other sites More sharing options...
Guest gnoo Posted June 12, 2019 at 05:24 AM Share Posted June 12, 2019 at 05:24 AM O meu conhecimento de redes também não é grande coisa, mas vai-se aprendendo aos poucos :) Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.