Preciso de cobaias!!! [RESOLVIDO]

1. Preciso de cobaias!!! [RESOLVIDO]

ctw6av
ctw6av

(usa Nenhuma)

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!

Necessário root

#!/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()


Dê um --help ou -h para informações.


  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 28/07/2016 - 02:45h

Ah e desculpe, eu não olhei o help, agora que falou ele está funcionando sim.

3. Re: Preciso de cobaias!!! [RESOLVIDO]

ctw6av
ctw6av

(usa Nenhuma)

Enviado em 28/07/2016 - 02:17h

SamL escreveu:


Obrigado pelo seu tempo @SamL, é verdade faltou essa informação! A parte de ajuda deveria estar funcionado, se digitasse ./programa --help era para mostrar uma ajudinha bem básica.

usage: teste.py [-h] --iface IFACE

Decodificador de cabeçalhos IPV4encapsulados em redes ethernet

optional arguments:
-h, --help show this help message and exit
--iface IFACE interface para escuta do tráfego

Obrigado por me ajudar a testar.


Quanto a parte do segundo erro ele não é esperado. Você executou fora de uma rede Ethernet (A.K.A Lan)? Tentou em outra interface?

Novamente agradeço sua ajuda e opinião.

----------------------------------------------------------
Debiano com uma pitada de slack
----------------------------------------------------------






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts