Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: [L]ord [R]NA en 10 Septiembre 2010, 17:52 pm



Título: [Python] Capturar Paquetes TCP
Publicado por: [L]ord [R]NA en 10 Septiembre 2010, 17:52 pm
Código
  1. ########################################################################
  2. #Programa: Sniffer de paquetes TCP                                     #
  3. #Autor   : LordRNA                                                     #
  4. #Fecha   : 09-Sept-2010                                                #
  5. ########################################################################
  6. #Se necesitan privilegios de root para trabajar con sockets raw.
  7. #Probado en Ubuntu10.04 con Python2.7
  8. import socket
  9.  
  10. translate =''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])
  11.  
  12. def dump(src, length=16):
  13.    result=''
  14.    while src:
  15.       s,src = src[:length],src[length:]
  16.       hex = ' '.join(["%02X"%ord(x) for x in s])
  17.       s = s.translate(translate)
  18.       result += "%-*s %s\n" % (length*3,hex,s)
  19.    return result
  20.  
  21. s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
  22. L=0
  23. while 1:
  24. L+=1
  25. raw = s.recv(16000)
  26.        print "========================================================================"
  27. print "Paquete: "+str(L)
  28. print "========================================================================"
  29. print dump(raw)
  30.  


Título: Re: [Python] Capturar Paquetes TCP
Publicado por: Debci en 10 Septiembre 2010, 19:17 pm
Al final lo hiciste en Python jeje  :D muy bueno, nunca he hecho algo parecido y ahora me he animado
:P

Saludos


Título: Re: [Python] Capturar Paquetes TCP
Publicado por: 16BITBoy en 11 Septiembre 2010, 21:11 pm
Ostras!... Ya me has dado tarea para esta noche ^^.
Llevo tiempo preguntándome como hacer para que un programa lea todos los paquetes que el sistema recibe, sea o no para su socket.

Y ojo con esto último que he dicho, por que puede que algo de lo que aprendí sea erroneo, aver si alguien que me pueda contrastar y corregirme si es oportuno ^^.

Segun sé, se le llama socket a la asociación proceso <-> puerto en una interfaz de red (mas bien en una dirección ip)
Entonces, no me entraba en la cabeza que crear un socket fuese la solución a esto y no me he molestado en leer los flags y opciones de los sockets en linux, puesto que yo lo que queria era leer lo que llegaba y se enviaba por todo socket en una interfaz. He estado leyendo algo ahora y parece que tiene algo que ver ese socket.raw cuando lo creas.

Ya te digo, tengo que estudiar por que haces lo que haces en ese pequeño script :P

Gracias!