Enviado em 27/07/2016 - 17:15h
Desculpem o titulo mal educado mas tenho que chamar atenção, preciso de pessoas caridosas para testar um decodificador de cabeçalhos IPv4 para mim, pois estou atrás de um repetidor de sinais e vejo os pacotes de uma forma esquisita daqui, então oque me dizem? Ah testa, ajuda um newbie necessitado kkkk. Estou também aberto a criticas e sugestões para o código, Obrigado!
#!/usr/bin/env python3
from binascii import hexlify
from codecs import decode
from struct import pack
from ctypes import *
import argparse
import socket
class IPv4(Structure):
""" Classe para estrutura do cabeçalho IPv4 """
_fields_ = [('eth_dst', c_char * 6),
('eth_src', c_char * 6),
('eth_pro', c_short),
("ihl", c_ubyte, 4),
("version", c_ubyte, 4),
("tos", c_ubyte),
("len", c_ushort),
("identity", c_ushort),
("offset", c_ushort),
("ttl", c_ubyte),
("proto_num", c_ubyte),
("sum", c_ushort),
("src", c_char * 4),
("dst", c_char * 4)]
_protocols = {1: 'ICMP', 2: 'IGMP',
6: 'TCP', 17: 'UDP'}
def __new__(cls, socket_buffer=None):
""" Cria e retorna um novo objeto. Veja help(type). """
return cls.from_buffer_copy(socket_buffer)
def __init__(self, socket_buffer=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.buffer = socket_buffer
addr = decode(hexlify(self.eth_src))
src_mac = ":".join([addr[i:i + 2] for i in range(0, 12, 2)])
if self.eth_dst == b'\x01':
dst_mac = 'IPv4_Mult_Cast:00'
else:
addr = decode(hexlify(self.eth_dst))
dst_mac = ":".join([addr[i:i + 2] for i in range(0, 12, 2)])
src_ip = socket.inet_ntoa(pack('!4s', self.src))
dst_ip = socket.inet_ntoa(pack('!4s', self.dst))
print('Src: {:16} Ether: {}'.format(src_ip, src_mac))
print('Dst: {:16} Ether: {}'.format(dst_ip, dst_mac))
print('Ihl: {}'.format(self.ihl * 4))
print('Ver: {}'.format(self.version))
print('Pro: {}'.format(self._protocols[self.proto_num]))
print('Len: {}'.format(self.len))
print('Ttl: {}'.format(self.ttl))
print('Off: {}'.format(self.offset))
print('Sum: {}'.format(self.sum))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Decodificador de cabeçalhos IPV4'
'encapsulados em redes ethernet (Lan)',
epilog='Obrigado por me ajudar a testar.')
parser.add_argument('--iface', type=str, help='interface para escuta do tráfego', required=True)
args = parser.parse_args()
iface = args.iface
sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x800))
sock.bind((iface, 0))
while True:
try:
raw_buffer = sock.recv(2048)
ipv4 = IPv4(raw_buffer[0:36])
print('\n')
except KeyboardInterrupt:
sock.close()
exit()
sock.close()
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta