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()
Customizar a Instalação do Linux Debian com Preseed
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Linux Debian 11 Bullseye Reiniciando Sozinho (1)
Bora fazer um teste? mbti (11)
Possível Migração de windows para linux ???? (pc da empresa) (2)