| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
ViTo2k7
Registrado: 08 Nov 2007 Mensajes: 11
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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  |
|
| Volver arriba | |
 |
ViTo2k7
Registrado: 08 Nov 2007 Mensajes: 11
| Publicado: 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  _________________ “Si compila esta bien, si arranca es perfecto.” by Linus Torvalds. |
|
| Volver arriba | |
 |
tatanka-ricardo
Registrado: 09 Nov 2007 Mensajes: 8
| |
| Volver arriba | |
 |
|
ViTo2k7
Registrado: 08 Nov 2007 Mensajes: 11
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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  |
|
| Volver arriba | |
 |
|
|