FORMA DE USO [[[[[SERVIDOR]]]]] Antes que nada necesitas tener privilegios de superusuario (root) para poder llevar acabo operaciones con la libreria libpcap. Antes de ejecutar el servidor, debes modificar el archivo de configuracion segun tus necesidades. Los tokens validos del archivo de configuracion son: Protocolo - Aqui especificas que protocolo de transporte utilizar (tcp o udp) Secuencia - Aqui se ponen los tres puertos separados por comas (,) por donde se debe tocar. Deben ir en el orden deseado Timeout - Tiempo de espera en segundos entre el toque entre un puerto y otro. Si este tiempo se alcanza, se reseteara y se tendra que volver a tocar el primer puerto especificado en la Secuencia. Metodo - Una vez tocados correctamente los puertos, se lanza uno de los dos metodos soportados (bind o reverse). Puerto - Con relacion al Metodo, ya que si el Metodo es bind entonces dicho Puerto se pondra a la escucha en la maquina local, de otro modo (reverse) se intentara conectar a dicho Puerto en la maquina fuente (la que toca los puertos) El archivo de configuracion es "knock-out.conf", favor de leer los comentarios. Una vez seteados los valores de configuracion, solo falta especificar el archivo como primer parametro y como segundo parametro el nombre de la interfaz en la cual queremos escuchar por las peticiones a los puertos. Para ver la lista de interfaces solo hay que ejecutar el programa sin argumentos. Una vez corriendo el programa, es posible editar el archivo de configuracion y para recargar el archivo de configuracion solo hay que enviar la senal SIGHUP al proceso: #kill -HUP `pidof knock-outd` Para tocar en los puertos, los paquetes deben cumplir con ciertas Flags TCP, esto esta en el archivo knock-out.h: #define FLAG_KNOCK_TCP TH_RST #define FLAGS_VALIDAS(flags) ((flags & FLAG_KNOCK_TCP) ? 1 : 0) Entonces, por default cada paquete debe llegar con la Flag TCP RST (Reset) activada. Como tocar??? 1.-Usar el cliente (knock-outc) y solamente hacer: #./knock-outc IPKNOCKOUTD knock-out.conf (El cliente tambien lee el archivo de configuracion del servidor para saber que puertos usar en la secuencia al tocar). 2.-Usar el programa nemesis (http://nemesis.sourceforge.net), que tambien depende de libnet y hacer: #nemesis tcp -S IPCLIENTE -D IPKNOCKOUTD -y PTO_SECUENCIA1 -fR TCP Packet Injected #nemesis tcp -S IPCLIENTE -D IPKNOCKOUTD -y PTO_SECUENCIA2 -fR TCP Packet Injected #nemesis tcp -S IPCLIENTE -D IPKNOCKOUTD -y PTO_SECUENCIA3 -fR TCP Packet Injected Esto es en caso de que el Protocolo especificado sea TCP, en caso de ser udp, cambiar el 'tcp' por 'udp' y quitar la opcion '-fR' en la linea de comandos al ejecutar nemesis. 3.-Te dan weba ambas opciones y prefieres crearte tu propio cliente con Raw Sockets ;)... [[[[[CLIENTE]]]]] Antes que nada necesitas tener privilegios de superusuario (root) para poder llevar acabo operaciones con la libreria libnet. El cliente solo recibe dos parametros, el nombre de host o ip del servidor con knock-outd y el archivo de configuracion (el mismo para el servidor), ya que lee de este la secuencia de puertos a tocar. Ejemplo: #./knock-outc IPKNOCKOUTD knock-out.conf Una vez armada la secuencia, el cliente tarda en tocar NSECS segundos entre puerto y puerto; esta constante puedes cambiarla antes de compilar en knock-out.h. El cliente arma sus propios paquetes con la ayuda de libnet y se aplica la flag FLAG_KNOCK_TCP (que tanto cliente y servidor utilizan) para asi enviarsela al servidor. Puedes editar esta flag en knock-out.h aunque no se recomienda, por que la flag por default es TH_RST (Reset), y sabemos que una conexion TCP/IP no se inicia con esta flag activada, asi evitamos que los scanners de puertos activen nuestros puertos ;).