PDA

Ver la versión completa : Proyecto de programación



The_chacal
09-02-2008, 20:14
Hola buenas!

Os escribo por que desde hace algún tiempo estaba dandole vueltas a crear un proyecto en conjunto con quien quiera participar...
Respecto al lenguaje de desarrollo, había pensado en Vb (aunque también puede haber parte de c). No tengo ningún proyecto elegido, asi que había pensado en que las personas que deseen participar lo decidan. Con visual me defiendo bastante (escepto BD que no tengo ni pajolera idea.) Y en c, pues sé poquito, pero algo me defiendo.

Bueno quienes quieran participar, que escriban, y propongan un programa a crear.

A mi se me había ocurrido, un scanner (bastante básico auque según como fuera se podría mejorar), no se, un chat par los de hack hispano con conexiónes bien encriptadas... bueno piensen apuntense y opinen :).

Saludos!!

clarinetista
10-02-2008, 13:33
Gran idea The_chacal.
Tengo un poco olvidado el Visual, pero hay muchos usuarios que lo tienen al día.
Consolida el proyecto y le pondremos un subforo para su desarrollo.
Saludos

RaidMan
10-02-2008, 14:15
Vaya... no se si estare a la altura en el VB pero bueno, de alguna manera hay que aprender. Y que mejor modelo para aprender que la panda de HH
jaja

Yo me apunto

Un saludo

PD: Un Scanner de puertos estaria genial!! Lo del chat... bueno, tambien, pero el problema que yo veo es que seria solo para HH, y seria algo mejor que estuviese disponible a todos los usuarios de internet (asi lo veo yo, vamos, es mi opinion, nada mas:D:D)

clarinetista
10-02-2008, 14:23
Hombre, RaidMan, depende que enfoque le des, se puede hacer una aplicación cliente-servidor que permita al usuario introducir los parámetros de conexión :)
Luego ya meteremos la publicidad subliminal en algún lado, jejeje.

LUK
10-02-2008, 14:46
Una idea genial.. ya sabeis que para cualquier proyecto de HACKHiSPANO teneis disponible un foro propio y espacio web para trabajar ;)

Un escaner de puertos es muy buena idea...

The_chacal
10-02-2008, 21:03
Genial!

Pues si os parece bien el proyecto, solo hay que ir apuntandose, cualquier aporte va a ser bueno :), asi que Raidman no te preocupes si aún estás empezando también será una buena forma de ir aprendiendo.

Nada mas que decir, si os parece bien el scanner de puertos podremos empezar a partir de ya jejej.

Bueno, había pensado que para este proyecto, a parte de programar si quereis darle un diseño, también podeis ir poniendo imágenes o diseñar botones, lo que se os ocurra.

Yo en cuento tenga un hueco empezaré con el código fuente, y lo iré subiendo. Podeis modificar lo que querais, simplemente lo volveis a subir y apuntais que habeis cambiado.

Nos vemos pronto ;).

The_chacal
11-02-2008, 12:53
Bueno, ya he empezado con el lío jeje.

Lo más básico ya está. Y aquí aparece el primer problema. La cuestién está en que si por ejemplo conectamos el socket a un puerto hasta que este no "termine" no podemos cerrarlo y pasar al siguiente.
He pensado en la creación de un algoritmo que controle un determinado número de sockets, (los justos para que la velocidad sea la óptima), activando un x nº de ellos, aquellos que ya puedan usarse, de manera que siempre exista por lo menos uno realizando una conexión.

No sé si me he explicado bien.

Hoy iré planteandolo, cuando querais que suba el código me lo decis.

Espero vuestras ayudas :).

The_chacal
11-02-2008, 13:34
http://rapidshare.com/files/90901849/scanner.rar.html

Ahí lo teneis.

Espero más participación!!

RaidMan
11-02-2008, 16:44
No serviria simplemente añadir mas Winsocks? Que cada winsock se active cuando se vaya a escanear el puerto que tiene el puesto.

Ahora lo miro y a ver si puedo aportar algo mas

Un saludo

The_chacal
11-02-2008, 17:07
Pero si tienes un rango de 8000 puertos xD... la cosa se va de marras. Si metemos en vez de 3, 30 pues entonces se multiplicaria x 10 la v. teóricamente, pero como yo lo he planteado no se conectan en paralelo si no en serie, de forma que el segundo conecta cuando el primero ha conectado o fallado, para que que el primero tenga tiempo de cerrarse y volver a conectar. Lo difícil es eso.

Espero que entendais lo que digo jeje.

RaidMan
11-02-2008, 19:11
Si, lo entiendo... el problema es que no puedes hacer que intente scannear dos puertos a la vez, porque no sabes que nº de puertos va a pedir el usuario a scannear.

Ademas de que hasta que no se haya cerrado el socket no podemos abrir otro, a menos que añadamos, como has dicho, 80.000 WinSocks si es el nº de puertos que se piden...

La unica solucion que veo es esa, cerrar el Winsock y luego volverle a abrir para que envie otra conexion...


Un saludo

RaidMan
11-02-2008, 19:59
Vale...

Le he añadido alguna que otra cosilla, me di cuenta de que tenia algun que otro error el codigo, como algun ws_close (en lugar de ws.close) y cosas asi, lo tipico por las prisas y tal. Y luego he añadido otra cosilla, la he puesto, porque me he dado cuenta de que cuando se ponia a escanear, escaneaba hasta el rango que tu le habias dado +1, es decir, si pones desde 50-52 escaneaba hasta 53.

Ahi os lo dejo, añadid cosas http://rapidshare.com/files/90985341/scanner_II_.rar

Un saludo

The_chacal
11-02-2008, 21:10
xD, lo del segundo fallo es ceirto pero lo que dices de ws_close es una llamada a la función que lo uqe hace es ws.close :), voy a mirar a ver que podemos hacer para optimizar la velocidad. Gracias por tu aporte raidman, espèror que halla mas gente que se anime...

RaidMan
11-02-2008, 22:00
Ya ya.
Pero antes ponia:


Private Sub Ws_Close()
Ws_close <--- No seria Ws.Close??

Esas son algunas de las modificaciones que he hecho, aparte del boton de parar y la parada automatica y lo de quitar la cuenta de mas de puertos

Un saludo

PD: Para optimizar la velocidad? te refieres a las conexiones o a la ejecucion del programa??
Si es lo de las conexiones... cuantos menos Winsock tengamos mejor, pero habria que meter mas codigo, mucho mas... pero bueno, todo se estudiara y si no A VER CUANDO VIENEN ESOS MAESTROS DEL C

The_chacal
11-02-2008, 22:11
Private Sub Ws_Close()
Ws.Close
sca = 1
End Sub


En mi código está así...

RaidMan
11-02-2008, 23:20
mira el

Private Sub Ws2_Connect()
Ws2_Close <--- (Creo que seria Ws2.Close, no?:confused:)
po.AddItem Ws2.RemotePort

End Sub


Pero tampoco me hagas mucho caso, que soy bastante nuevo en esto...jeje

Un saludo

hystd
12-02-2008, 00:54
Buenas! He echado un vistazo al proyecto, y bueno, os recomendaría que os olvidáseis de usar un Timer para sincronizar los Sockets clientes... La forma de proceder sería (para un solo socket), sería la siguiente:

1º Escuchar en el puerto tal...
2º Si error al conectar...
i) Desactivar el socket
ii) Incrementar el puerto a conectar
iii) Asignar el puerto incrementado al socket
iv) volver a conectar

3º Si no error
i) Desactivar el Socket
ii) Devolver el puerto conectado para añadirlo a la lista de puertos abiertos
iii) Incrementar el contador de puertos
iv) Asignar el puerto al Socket
v) Conectar el socket

Como veis, el propio socket cliente es el que sincroniza las acciones, y no un Timer.

Para aumentar la velocidad, una opción bastante eficiente y como bien habéis dicho es poner dos sockets, y que trabajen conjuntamente, (como un procesador de doble nucleo :)), de manera que para repartir equitativamente la tarea, un socket se encargue por ejemplo de los puertos pares y otro de los impares... (para evitar que un socket "reescanee" un puerto que ya fue escaneado por el otro...).

Habéis aplicado una técnica de divide y vencerás :p

Claro que esto aumentaría el doble la velocidad, reduciendo el tiempo total a la mitad.

Pero lo ideal es hacerlo en el menor tiempo posible... una opción sería crearse un array de tamaño prefijado por un umbral, cuyos elementos son Sockets...y cada elemento del vector se encargaría de un subrango de puertos a escanear... y es eficiente, pero si no os parece buena la idea... ¿habéis oido hablar de los clusters? La forma de enfocarlo sería parecida... un sistema basado en memoria distribuida, y para ello podeis utilizar multihilos.

PD. me niego a escribir código en VB...

Un saludo

The_chacal
12-02-2008, 02:21
jejeje, gracias por el aporte.

Bueno explico una cosa, a los dichosos winsockets siempre les he tenido manía por que son algo "impredecibles". Tienes razón en lo de que es una locura tratar de sincronizarlos mediante un timer (ya que podrá coindcidir con ese tiempo, o no), de manera que podrán quedarse puertos sin analizar etc.

El problema es, que si tu haces por ejemplo un bucle, y cuando el socket se conecta en el bucle le dices que se cierre y a continuación conecte al siguiente puerto, no hay una manera segura de cercionarse de que ese socket está listo para una nueva conexión (o al menos la desconozco).

Por tanto hay un problema de irregularidad, que hay que solucionar. Si se consigue "sincronizar" de manera que pudisiemos saber en que momento exacto podemos volver a usar ese socket (ya que aunque sepamos que ha conectado y lo estemos cerrando no podemos definir un instate exacto). Realmente no es solo dividir para que vaya mas deprisa, si no para darle un tiempo al socket para que pueda volverse a utilizar. El problema es que como no es estable, no se puede definir un tiempo exacto. Y hay que darle algo en exceso, y eso con un bucle simple es muy complicado (de ahí el timer).

A ver quien le da solución a esto. Mañana sigo adelante.

Buenas noches a tod@s.

P.D: Raidman, es lo mismo por que si miras la funcion Ws2_close -> ws.close (esta en connect, por que una vez se ha conectado a ese puerto hay que cerrarlo de nuevo para que pueda conectarse a otro. :))

RaidMan
12-02-2008, 18:33
Buenas! He echado un vistazo al proyecto, y bueno, os recomendaría que os olvidáseis de usar un Timer para sincronizar los Sockets clientes... La forma de proceder sería (para un solo socket), sería la siguiente:

1º Escuchar en el puerto tal...
2º Si error al conectar...
i) Desactivar el socket
ii) Incrementar el puerto a conectar
iii) Asignar el puerto incrementado al socket
iv) volver a conectar

3º Si no error
i) Desactivar el Socket
ii) Devolver el puerto conectado para añadirlo a la lista de puertos abiertos
iii) Incrementar el contador de puertos
iv) Asignar el puerto al Socket
v) Conectar el socket

Como veis, el propio socket cliente es el que sincroniza las acciones, y no un Timer.


Un saludo


Pero esta accion no consumiria muchos recursos??
Quiero decir, si esta continuamente abriendo y cerrando Sockets, no consumiria bastantes recursos??

Seria mas facil que con un Timer, y luego lo de los pares e impares le daria un buen toque de velocidad...

Todo se andara:D

Un saludo

proteo1
12-02-2008, 22:21
hola a todos , bro a mi me facinan las conexiones SOCK jejeje quien sabe porque, pero lo de la encriptacion pues ese es mi duo dinamico jejej

estaria bien hacer un cliente-servidor, todos tendriamos que programar el propio solo dejando como regla el puerto al cual nos podremos conectar con otros usuarios al = que los comandos permitidos o poder interpretar en cada uno
ejemplo

msj//aqui el mensaje escrito
user//nombre del usuario con quien platico
port//6547


este es un ejemplo basico todos los comandos que podriamos interpretar tendrian que estar antes de dos diagonales "//" y lo que esta despues seria lo que le dariamos uso.

bueno no se me emocione bastante rapido, y la APP tendria un puerto local siempre a la escucha ara esperar conexiones entrantes y mandarlos a otro puerto y no dejar de escuchar uno en especifico.

espero haberme explicado, pero aqui estoy a sus ordenes y a lo que sea por cierto tambien odio los DB, quizas hago mal o bien pero uso mis propios metodos de guardado de informacion en texto plano, digo cada quien sus gustos a quienes nos gustan batallar y a otros no, jejej a quienes nos gusta reinventar la rueda, quizas mas latoso pero mas ilustrativo en lo personal, saludos

hystd
13-02-2008, 02:30
Lo que precisamente va a controlar la sincronización es el método OnError... Así te aseguras que haya una perfecta armonia.

Y no, no consume recursos... Si te fijas son 4 asignaciones el código del programa...Pero bueno, siendo pesimistas, supón el remoto caso que consumiera bastantes recursos... ¿interesa más consumir recursos durante unos minutos y escanear 65535 puertos, o interesa más no consumir recursos y tardar más de 30 minutos?

No obstante me remito a lo dicho anteriormente convirtendo un sistema de memoria centralizada (como es este caso, una aplicación corriendo en un sólo PC), en memoria distribuida (como los clusters), mediante multihilos. Varios hilos de ejecución trabajando en la misma tarea.

Un saludo

The_chacal
13-02-2008, 23:27
Hola de nuevo

Tenias razón hystd en lo de que se pueden autocontrolar los sockets. Esta claro que cuantos más consigamos sincronizar más rapido funcionará. entonces o creamos un array con un solo socket y que controle los puertos o inflarse a sockets. La única pregunta que queda es que es mejor si ponerse a meter sockets y hacerlo a lo bestia xD, o hacer el array y ver como controlar los puertos.

Bueno voy a dedicarle un rato. Despues si puedo escribo.

Saludos.

The_chacal
13-02-2008, 23:33
Creo que tengo una solución eficiente...

Si por ejemplo trabajamos con 4 sockets, y tenemos un rango de 0 - 100 (p.ej)

Dividimos 100 / 4 = 25 puertos por socket.

El primero desde [0 - 25[, el segundo [25 - 50[, el tercero [50 - 75 y el cuarto [75 - 100].

Claro que no siempre es tan fácil y puede resultar que no sea un entero al dividir entre cuatro (podria ser otro número de sockets).

Pues nada... si por ejemplo hay 101, nos quedamos con el entero de la division, que serían 25 de nuevo, multiplicamos por 4 = 100, 101 -100 = 1 puerto de sobra que podemos añadirselo a cuaquiera de los 4.

¿Qué os parece...?

RaidMan
13-02-2008, 23:35
En tema de arrays ando un poco flojo... no se muy bien como usarlos, asi que me temo que ahi no puedo entrar, sin embargo, te dire algo:

NO FUNCIONA!!! Lo he probado, y no me señala los puertos abiertos de una IP (que se que tiene puertos abiertos)

No funciona con el inicial, tampoco con las modificaciones que le hice y he probado a ver como demonios hacerlo, pero no anda... Lo del "Nº de socket" no se mueve, no cambia de socket... debe de haber algo raro ahi...

Un saludo

PD: Me ganaste escribiendo... a ver, lo de usar varios sockets controlados por un Array me parece perfecto, siempre y cuando sea mas rapido que meter Sockets a punta pala para que lo hagan todo ellos...

The_chacal
14-02-2008, 00:36
En 2 min está subido y funciona o al menos a mi me va de pm.

Estan las modificaciones ya. Se pueden añadir mas sockets. Si en vez de 4 que tiene abora se le ponen 8 irá al doble de velocidad pero así va bien.

Todavía estoy modificando cosas.

Hasta ahora

P.d: subido

http://rapidshare.com/files/91619857/Scanner.rar.html

proteo1
14-02-2008, 01:58
Dividimos 100 / 4 = 25 puertos por socket.

El primero desde [0 - 25[, el segundo [25 - 50[, el tercero [50 - 75 y el cuarto [75 - 100].



saludos cuidado con el codigo

seria:
del 0 al 25
del 26 al 50
del 51 al 75 y
del 76 al 100

porque si lo aplicas asi haras revision de 3 puertos que seria el
25, el 50 y el 75

asi te ahorarrias 3 sockets mas por revisar