
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()
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6
Desenvolvi um programa de hot corner (você colocar o mouse nos cantos)... (0)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (13)









