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
Vou voltar moderar conteúdos de Dicas e Artigos (3)
OpenVPN no MACBOOK conecta mas não pinga pastas de rede compartilhada ... (1)
Melhorando a precisão de valores flutuantes em python[AJUDA] (8)
[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