Foros del Web » Programación para mayores de 30 ;) » .NET »

[AYUDA] Algo parecido a Snifear packets

Estas en el tema de [AYUDA] Algo parecido a Snifear packets en el foro de .NET en Foros del Web. Hola usuarios de Foros del Web, tengo otra de mis muchas dudas :) Resulta que estoy desarrollando una aplicación que más que nada lo que ...
  #1 (permalink)  
Antiguo 04/07/2009, 08:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 141
Antigüedad: 16 años, 5 meses
Puntos: 2
[AYUDA] Algo parecido a Snifear packets

Hola usuarios de Foros del Web, tengo otra de mis muchas dudas :)

Resulta que estoy desarrollando una aplicación que más que nada lo que hace es eso ver los packets que se envían entre dos aplicaciones. Pero lo que hago realmente es lo siguiente:

el cliente realmente se conecta al server por el puerto 3724 entonces yo al server le he cambiado el puerto al 3723 y yo he creado una aplicación con dos librerías cliente/servidor que se encarga de escuchar y enviar esos packets que recibo, ahora el problema que yo tengo lo que recibo por parte del cliente no se como enviarlo exactamente igual al servidor, porque en mi caso lo he intentando con variables del tipo string y byte pero claro esto cambia la cadena original y luego al enviarla ya no es la misma entonces no funciona.

Yo simplemente lo que quiero es ser un intermediario entre dos aplicaciones cliente/servidor y ver los packets que se envían entre ellos, sin que ello influya en el funcionamiento de los programas, basicamente es eso que no cambie la cadena que recibo para poderla enviar igual al servidor y viceversa.

Si no quedo claro mi duda decídmelo y pondré ejemplos para que entendáis lo que quiero decir.

Gracias de antemano :)
  #2 (permalink)  
Antiguo 04/07/2009, 08:40
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Respuesta: [AYUDA] Algo parecido a Snifear packets

Pasa todo lo que envias por red a array de byte[] así tu no sabes ni que se mandan ellos solo sabes que es array de byte y lo que haras es retrasmitir lo mismo que te mandan de ambos lados.

Saludos,
  #3 (permalink)  
Antiguo 04/07/2009, 08:49
 
Fecha de Ingreso: noviembre-2007
Mensajes: 141
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: [AYUDA] Algo parecido a Snifear packets

Ok, gracias probare haber si me funciona ^^
Por lo que tengo entendido simplemente las variables en la que almaceno los datos los modifico por un array del tipo byte.
  #4 (permalink)  
Antiguo 04/07/2009, 09:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 141
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: [AYUDA] Algo parecido a Snifear packets

No se que pasa pero no me funciona :S es como si los datos cambiaran mira te pongo el codigo que utilizo

Uso las clases de Elguille sockets modificadas:
Solo pondre las cosas que cambie:
----------------
Clase Cliente
----------------
Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal Datos() As Byte)
  2.         Dim BufferDeEscritura() As Byte
  3.         BufferDeEscritura = Datos
  4.         If Not (Stm Is Nothing) Then
  5.             'Envio los datos al Servidor
  6.            Stm.Write(BufferDeEscritura, 0, BufferDeEscritura.Length)
  7.         End If
  8.     End Sub
  9. 'Envia los datos como array Byte()

Código vb:
Ver original
  1. Private Sub LeerSocket()
  2.         Dim BufferDeLectura() As Byte
  3.         While True
  4.             Try
  5.                 BufferDeLectura = New Byte(65535) {}
  6.                 'Me quedo esperando a que llegue algun mensaje
  7.                Stm.Read(BufferDeLectura, 0, BufferDeLectura.Length)
  8.                'Genero el evento DatosRecibidos, ya que se han recibido datos desde el Servidor
  9.                RaiseEvent DatosRecibidos(BufferDeLectura)
  10.             Catch e As Exception
  11.                 Exit While
  12.             End Try
  13.         End While
  14.         'Finalizo la conexion, por lo tanto genero el evento correspondiente
  15.        RaiseEvent ConexionTerminada()
  16.     End Sub
  17. 'Lee los datos como array byte()


Código vb:
Ver original
  1. Public Event DatosRecibidos(ByVal datos() As Byte)
  2. 'Variable

-------------------
Clase Servidor
-------------------
Código vb:
Ver original
  1. Public UltimosDatosRecibidos() As Byte 'Ultimos datos enviados por el cliente

Código vb:
Ver original
  1. Public Function ObtenerDatos(ByVal IDCliente As Net.IPEndPoint) As Byte()
  2. 'Una función del tipo Byte()

Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal IDCliente As Net.IPEndPoint, ByVal Datos() As Byte)
  2.         Dim Cliente As InfoDeUnCliente
  3.         'Obtengo la informacion del cliente al que se le quiere enviar el mensaje
  4.        Cliente = Clientes(IDCliente)
  5.         'Le envio el mensaje
  6.        Cliente.Socket.Send(Datos)
  7.     End Sub
  8. 'Envio los datos de forma array Byte()

-----------------------
Aplicación Servidor
-----------------------
Código vb:
Ver original
  1. Private Sub WinSockServer_DatosRecibidos(ByVal IDTerminal As System.Net.IPEndPoint) Handles WinSockServer.DatosRecibidos
  2.         'Muestro quien envio el mensaje
  3.        IDTerminal_Jugador_Actual = IDTerminal
  4.         Dim Datos() As Byte = WinSockServer.ObtenerDatos(IDTerminal)
  5.         Log_Servidor("El serivodor ha recibo los datos correctamente")
  6.         WinSockCliente.EnviarDatos(Datos)
  7.     End Sub

Código vb:
Ver original
  1. Private Sub WinSockServer_NuevaConexion(ByVal IDTerminal As System.Net.IPEndPoint) Handles WinSockServer.NuevaConexion
  2.         'Muestro quien se conecto
  3.        Log_Servidor("Nuevo Jugador intentando acceder al servidor desde la IP: " & IDTerminal.Address.ToString & ",Puerto: " & IDTerminal.Port)
  4.         WinSockCliente.IPDelHost = "localhost"
  5.         WinSockCliente.PuertoDelHost = 3723
  6.         WinSockCliente.Conectar()
  7.     End Sub

Código vb:
Ver original
  1. Public Sub EnviarDatos(ByVal Datos() As Byte)
  2.         Dim Cliente As InfoDeUnCliente
  3.         'Recorro todos los clientes conectados, y les envio el mensaje recibido
  4.        'en el parametro Datos
  5.        For Each Cliente In Clientes.Values
  6.             EnviarDatos(Cliente.Socket.RemoteEndPoint, Datos)
  7.         Next
  8.     End Sub

----------------------
Aplicación Cliente
----------------------
Código vb:
Ver original
  1. Private Sub WinSockCliente_DatosRecibidos(ByVal datos() As Byte) Handles WinSockCliente.DatosRecibidos
  2.         Log_Cliente("El cliente ha enviado los datos bien")
  3.         WinSockServer.EnviarDatos(datos)
  4.     End Sub

Código vb:
Ver original
  1. Private Sub WinSockCliente_ConexionTerminada() Handles WinSockCliente.ConexionTerminada
  2.         Log_Cliente("La conexión con la IP: " & IDTerminal_Jugador_Actual.Address.ToString & ", ha finalizado")
  3.         WinSockServer.Cerrar(IDTerminal_Jugador_Actual)
  4.     End Sub

Y esto es todo, sabes donde puedo estar fallando?

Última edición por ErCaZa; 04/07/2009 a las 09:16
  #5 (permalink)  
Antiguo 04/07/2009, 11:19
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Respuesta: [AYUDA] Algo parecido a Snifear packets

Ok pero define cosas como por ejemplo:

1- Que mandas a traves de socket, que manda el cliente y que recive el servidor? pero lo que recibe el cliente y servidor real al cual quieres meterte en el medio
2- Que errores marca?? no lei nada de errores solo dices no llega igual, muestra que manda antes y que llega despues
3- Como es socket de ambas via siempre mandas byte array porque es la via de comunicacion de el socket, mandas objetos serializados?? ó que mandas?? para saber si cuando recibes conviertes el byte array en algo más.

Saludos,
  #6 (permalink)  
Antiguo 07/07/2009, 06:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 141
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: [AYUDA] Algo parecido a Snifear packets

Ya lo he solucionado de otra forma:
Yo queria obligar a los usuarios de World Of Warcraft de mi servidor a ejecutar obligatoriamente el launcher que desarrolle para el cliente, pero claro, ellos ejecutaban el wow.exe y ningun problema entonces estube pensando en monitorizar los packets que enviava el cliente al server y para aceptar la conexion primero tenia que recibir por ejemplo "pepito" y si no recibia primero eso pss denegaba la conexion.

Pero encontre los source de Mangos sin compilar, el problema esque es con VS 2008 C++ pero con un poco de imaginación puede aprender analizar el primero y ya lo tengo solucionado, gracias por todo, se que es un poco lioso lo que queria hacer pero bueno :P
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:22.