/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Programacion de redes con C

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 08/11/2007 4:00 am
Título: Programacion de redes con C

Hola, necesitaba alguna idea para saber como transferir todo el trafico de red entre dos tarjetas ethernet del mismo ordenador. Es decir que todo lo que llegue por una interfaz pase a la otra directamente y viceversa, todo de manera transparente al usuario. Estube mirando y encontre algo sobre la libreria libpcap pero no se si sirve para lo que yo quiero.
Seria programando en C.
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 481
Ubicación: Cono Sur

MensajePublicado: 08/11/2007 5:30 am
Título:

Investiga también el uso de sockets en C.

Un saludo
Volver arriba
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 09/11/2007 12:32 am
Título:

Sobre sockets en C estube ya mirando pero lo unico que se me ocurre es abrir un socket esperando peticiones y luego mandarselo a otro en la otra tarjeta de red, pero creo que eso es un poco chapuza y no tengo muy claro tampoco si funcionaria. Yo lo que necesito es hacer como una especie de puente entre las dos tarjetas, pero programandolo. Si se te ocurre alguna idea te lo agradecería.
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 293

MensajePublicado: 09/11/2007 2:24 am
Título:

Hola,

La librería libpcap o winpcap (q creo recordar q era la version DLL para windows) es una librería para el acceso a bajo nivel a la tarjeta de red. Se usa principalmente para snifar el tráfico q pasa por la tarjeta de red.
No me conozco la librería muy a fondo, ya q sólo la he usado para capturar el tráfico de red, y analizarlo. Por lo q no te puedo decir mucho sobre si es capaç de redireccionar el tráfico o duplicarlo, a malas puedes capturar el tráfico y reenviarlo a la otra tarjeta. No obstante debes tener en cuenta, q si replicas exactamente lo q te llega, puedes tener problemas, ya q la otra tarjeta puede q no vea el tráfico q le llega, por no ser para ella. Es decir, por red pueden pasar un montón de paquetes y datagramas, sobretodo si el tráfico le llega a través de un Hub. La tarjeta de red es capaç de descartar lo q no le interesa y capturar lo q sí. Si replicas exactamente lo q le está llegando a una tarjeta, sin cambiar IPs, MACs y/o puertos (además de ciertos dígitos de control q hay en las cabeceras de las peticiones IP y TCP/IP), puede q la otra tarjeta no sea capaç de identificar q lo q le está llegando es para ella, y lo descarte.

Una opción sería q sea tu programa el q se encargue de enviarle directamente a la otra tarjeta lo q a ti te interese enviarle y lo haga a través de un socket, y una estructura q ambas entiendan.

Por último, no podrías engañar a la red cambiando las direcciones MAC de las tarjetas? Y así ya no tendrías q redirigir el tráfico!!!!

El programa Ethereal, q es open source, hace un uso a fondo de esa librería.

Saludos.
Volver arriba
tatanka-ricardo



Registrado: 09 Nov 2007
Mensajes: 8

MensajePublicado: 10/11/2007 1:56 am
Título:

Das pocos, detalles, pero si únicamente deseas enviar el trafico de eth0 a eth1 por ejemplo, parece más facil de hacer usando el archivo de configuración del iptables que programandolo directamente ¿no?
Volver arriba
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 14/11/2007 2:30 am
Título:

Lo de hacer un puente entre las dos tarjetas no me serviria. Lo que necesito es cojer el trafico (todos los paquetes) que me llegan a una interfaz, copiarlos, almacenarlos, o no hacerles nada, y reenviarlos por la otra interfaz. Para ello necesito programarlo en C. Estuve mirando y vi que algo se podría hacer con sockets, si alguien me pudiese ayudar lo agradecería.
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
tatanka-ricardo



Registrado: 09 Nov 2007
Mensajes: 8

MensajePublicado: 14/11/2007 4:19 am
Título:

Pues en C no se me ocurre nada... lo veo complicado y realmente si ya está implementado.... no se.

Yo redirigiria todo el trafico de eth0 a eth1 con iptables
A la vez usaria tcpdump para filtrar todo el trafico entrante a eth0 y lo almacenaria en un archivo.
Luego con un programa en C manipulalo como te convenga.

Si aun así prefieres programarlo todo... pues te aconsejo que mires el codigo de tcpdump (es open source) y mires como hace él.

Yo más no puedo ayudarte he trabajado con sockets TCP pero UDP, ARP... y demás hiervas que recibirá la tarjeta no tengo ni idea Sad
Volver arriba
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 14/11/2007 4:33 am
Título:

Lo de las iptables y el tcpdump sería una buena opción, el problema es que yo tengo que hacer todo eso programandolo, se trata de un proyecto que me han asignado. Debido a eso me toca programarlo todo, incluido los filtros y demas historias, algo parecido a tcpdump. Estoy un poco perdido jejejeje Confused
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
tatanka-ricardo



Registrado: 09 Nov 2007
Mensajes: 8

MensajePublicado: 14/11/2007 4:47 am
Título:

Glogeando veo que en este mismo foro ya se habló del tema y pusieron este link:

http://www.security-freak.net/raw-sockets/raw-sockets.html

Mira como manejar los raw-sockets que parece que es lo que te hace falta Wink
Volver arriba
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 15/11/2007 2:00 am
Título:

Ya habia visto ese enlace antes jejeje, si explica bastantes cosas pero no me queda claro como puedo hacer lo que necesito. Podrias decirme si enlazando un socket a mi interfaz eth0 escuchando, y que lo que recibe lo almacene en un buffer y luego lo reenvie a otro socket enlazado a la interfaz eth1, y viceversa, la cosa funcionaria, es decir, mi ordenador sería transparente??


LAN ------------- eth0-Mi PC-eth1 ------------ ROUTER-INTERNET

Trafico
------------------>
<-----------------
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
polly



Registrado: 19 Jul 2007
Mensajes: 68

MensajePublicado: 15/11/2007 1:24 pm
Título:

hablando de programacion con redes : por que se suele hablar mas de programacion de redes en C que prog de redes en C++ o Java o cualquier otro ?? es mas efectivo C? , es el mas usual ? ,mas usado ?
_________________
R.I.P Kurt Cobain
-------------------------
Volver arriba
ViTo2k7



Registrado: 08 Nov 2007
Mensajes: 11

MensajePublicado: 16/11/2007 12:47 am
Título:

Pues la verdad que no tengo ni idea. Tengo entendido que es bastante robusto y hay muchas cosas de programacion con redes hechas en C. Cosas por ejemplo de mas bajo nivel. En java hay muchas aplicaciones de red, pero vamos que no se muy bien porque se habla tanto de C. A mi es el lenguaje que me asignaron para hacer esto que estoy preguntando y asi lo tendre que hacer jajaja. A ver si alguien me hecha una mano please.
_________________
“Si compila esta bien, si arranca es perfecto.” by Linus Torvalds.
Volver arriba
tatanka-ricardo



Registrado: 09 Nov 2007
Mensajes: 8

MensajePublicado: 17/11/2007 1:51 pm
Título:

Basicamente.... tengo entendido.... que java precisamente no permite acceder a socket-raw, que precisamente es lo necesario para el asunto de este hilo, C y C++ si.

Me imagino que cuando dicen que java no implementa socket-raw, será que no lo hace de forma multiplataforma, pues siempre se pueden usar llamdas al sistema anfitrión, aunque el código deja de ser transportable claro.

La verdad yo lo único que he encontrado sobre socket-raw está en el libro "programación de socket en linux" pero solo habla de hacer comandos ping y traceroute, nada de como escuchar lo que entra por una interfaz de red Sad
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com