Jump to content
Sign in to follow this  
gnoo

Análise de pacotes na prática [ Parte 6 ] - "ARP- IPv4" - Raw Sockets python

Recommended Posts

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:

 

 

2019-06-09_11-19.thumb.png.f40e1d61df25c19bb23d0915a5034fd3.png2019-06-09_11-21.thumb.png.8c12dadb479716c4d6585715bcdefc08.png

2019-06-09_11-23.thumb.png.4ec5cf720e0f8d24ed8890a63edf25a4.png

 

2019-06-09_11-24.thumb.png.46cff0ee977d7b5d6d4b22abb4800ffa.png

 

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.

  • Curtir 2

Share this post


Link to post
Share on other sites

@BrNaka Esse livro para introdução é bom, mas se quiseres um livro um pouco melhor para estudo do TCP / IP tens este:

51adpTlV5KL._SY445_QL70_.jpg.65f6c99c5d1b788a7e1dfa4279825488.jpg

  • Curtir 1

Share this post


Link to post
Share on other sites

Vlw pela dica, @gnoo! Vou dar uma olhada nesse depois.. Meu conhecimento em Redes é bem limitado haha

Share this post


Link to post
Share on other sites

O meu conhecimento de redes também não é grande coisa, mas vai-se aprendendo aos poucos :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...