[Python] Capturar Paquetes TCP

Iniciado por [L]ord [R]NA, 10 Septiembre 2010, 17:52 PM

0 Miembros y 1 Visitante están viendo este tema.

[L]ord [R]NA

Código (python) [Seleccionar]
########################################################################
#Programa: Sniffer de paquetes TCP                                     #
#Autor   : LordRNA                                                     #
#Fecha   : 09-Sept-2010                                                #
########################################################################
#Se necesitan privilegios de root para trabajar con sockets raw.
#Probado en Ubuntu10.04 con Python2.7
import socket

translate =''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])

def dump(src, length=16):
   result=''
   while src:
      s,src = src[:length],src[length:]
      hex = ' '.join(["%02X"%ord(x) for x in s])
      s = s.translate(translate)
      result += "%-*s %s\n" % (length*3,hex,s)
   return result

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
L=0
while 1:
L+=1
raw = s.recv(16000)
       print "========================================================================"
print "Paquete: "+str(L)
print "========================================================================"
print dump(raw)

Debci

Al final lo hiciste en Python jeje  :D muy bueno, nunca he hecho algo parecido y ahora me he animado
:P

Saludos

16BITBoy

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!
Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".