Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Envíar datos de red mediante NetFlow al ntop

Estas en el tema de Envíar datos de red mediante NetFlow al ntop en el foro de C/C++ en Foros del Web. Hola! Estoy haciendo un programa en "C" que envía datos de red, como direcciones IP, mediante el protocolo NetFlow para poder visualizar esa información en ...
  #1 (permalink)  
Antiguo 07/11/2006, 19:23
 
Fecha de Ingreso: noviembre-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Envíar datos de red mediante NetFlow al ntop

Hola!

Estoy haciendo un programa en "C" que envía datos de red, como direcciones IP, mediante el protocolo NetFlow para poder visualizar esa información en el ntop.

El problema es que si lo programo para envíar menos de 3 flow data records no me aparece nada en el ntop. Y si envío 3 o más flow data records me aparecen todos excepto los 2 últimos. Vamos que el problema es que los 2 últimos flow data records no salen.

Para usar el ntop para recoger datos Netflow simplemente hay que activar el plugin netflow (en la interfaz web del netflow, en admin->plugins) de manera que se crea un nuevo interfaz de red aparte del eth0. Luego se va a admin->switch NIC y se selecciona la nueva interfaz netflow para que sean esos datos los que muestre en tráfico y demás.

Por tanto no creo que el error esté en el ntop, pienso que será algo que hago mal en el programa que estoy haciendo. Lo he programado acorde a los datos del RFC de Netflow, y siguiendo el ejemplo del RFC pero sin las opciones y con algún campo menos.

A continuación dejo el código del programa que envía 3 flow data records por si alguién sabe algo y me puede echar una mano. Cualquier duda la respondere con mucho gusto. Gracias de antemano.

Código:

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#define PORT 2055 /* el puerto donde se enviaran los datos (el que usa NetFlow por defecto)*/

/* Cabecera NetFlow */
struct netflow_hdr {
unsigned short int version;
unsigned short int count;
unsigned long int sys_up_time;
unsigned long int unix_secs;
unsigned long int sequence_number;
unsigned long int source_id;
};

struct template_flowset {
unsigned short int flowset_id;
unsigned short int length;
unsigned short int template_id;
unsigned short int field_count;
unsigned short int fields[8];
};

struct data_flowset {
unsigned short int flowset_id;
unsigned short int length;
unsigned long int field[12];// 3 data records de 4 campos cada uno
};

int main()
{
int sockfd;
struct sockaddr_in their_addr; /*Almacenara la direccion IP y numero de puerto del destino*/
struct hostent *he;
int numbytes;
FILE *fichero=NULL;
unsigned long int temp;


/* Tamaño del buffer capaz de contener un paquete NetFlow */
unsigned int buffer_size=sizeof(struct netflow_hdr)+sizeof(struct template_flowset)+sizeof(struct data_flowset);

/* Buffer que contendra el paquete NetFlow */
unsigned char buffer[buffer_size];
memset(buffer,0,buffer_size);//se rellena con ceros

/* Cabecera NetFlow */
struct netflow_hdr *header=(struct netflow_hdr *)buffer;

/* template flowset */
struct template_flowset *template=(struct template_flowset *)(buffer + sizeof(struct netflow_hdr));

/* data flowset */
struct data_flowset *data=(struct data_flowset *)(buffer + sizeof(struct netflow_hdr)+ sizeof(struct template_flowset));

/* convertimos el hostname a su direccion IP */
if ((he=gethostbyname("localhost")) == NULL)
{

herror("gethostbyname");
exit(1);

}
/* Creamos el socket */
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{

perror("socket");
exit(1);

}

//rellenamos el paquete NetFlow teniendo en cuenta que hay que usar network byte order:

fichero = popen ("date +%s", "r");//para rellenar header->unix_secs
if (fichero == NULL)
{
perror ("No se puede abrir /bin/ls");
exit (-1);
}

fscanf(fichero,"%d",&(temp));//Se guarda la información de salida del comando "date +%s" que
// estaba en el fichero en la variable temp para después rellenar la estructura

header->version=htons(9);// versión 9 de netflow
header->count=htons(4);// número total de records: 1 template record + 3 data record
header->sys_up_time=htonl(10000);// milisegundos desde que el dispositivo fue arrancado
header->unix_secs=htonl(temp);// segundos que han pasado desde 1970
header->sequence_number=htonl(1);//número de secuencia
header->source_id=htonl(250);//identificador de la fuente

template->flowset_id=htons(0);//El cero está reservado para el template flowset ID
template->length=htons(sizeof(struct template_flowset));
template->template_id=htons(256);//Template ID de data flowsets son mumerados desde 256 hasta 65535
template->field_count=htons(4); //Número de campos en cada template record
//(para que el colector sepa el final de cada template record)
template->fields[0]=htons(8);//campo 1: IP_SRC_ADDR
template->fields[1]=htons(4);//longitud del campo IP_SRC_ADDR
template->fields[2]=htons(12);//campo 2: IP_DEST_ADDR
template->fields[3]=htons(4);//longitud del campo IP_DEST_ADDR
template->fields[4]=htons(2);//campo 3: IN _PKTS
template->fields[5]=htons(4);//longitud del campo IN_PKTS
template->fields[6]=htons(1);//campo 4: IN_BYTES
template->fields[7]=htons(4);//longitud del campo IN_BYTES

data->flowset_id=htons(256);//Tiene que ser igual que el template_id
data->length=htons(sizeof(struct data_flowset));
data->field[0]=inet_addr("198.168.1.12");//record 1, valor del campo 1
data->field[1]=inet_addr("10.5.12.254");//record 1, valor del campo 2
data->field[2]=htonl(5009);//record 1, valor del campo 3
data->field[3]=htonl(5344385);//record 1, valor del campo 4
data->field[4]=inet_addr("198.168.1.15");//record 2, valor del campo 1
data->field[5]=inet_addr("10.5.10.254");//record 2, valor del campo 2
data->field[6]=htonl(3000);//record 2, valor del campo 3
data->field[7]=htonl(2863790);//record 2, valor del campo 4
data->field[8]=inet_addr("198.168.1.16");//record 3, valor del campo 1
data->field[9]=inet_addr("10.5.18.254");//record 3, valor del campo 2
data->field[10]=htonl(2000);//record 3, valor del campo 3
data->field[11]=htonl(1563790);//record 3, valor del campo 4

//Procedemos al envío (sobre UDP)

their_addr.sin_family = AF_INET; /* host byte order */
their_addr.sin_port = htons(PORT); /* network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);

if ((numbytes=sendto(sockfd, buffer, buffer_size, 0, (struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{

perror("sendto");
exit(1);

}
printf("enviados %d bytes hacia %s\n",numbytes,inet_ntoa(their_addr.sin_addr));
close(sockfd);
return 0;
}
  #2 (permalink)  
Antiguo 08/11/2006, 02:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
http://www.faqs.org/rfcs/rfc3954.html
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 08/11/2006, 18:34
 
Fecha de Ingreso: noviembre-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Cita:
Iniciado por Alnorte Ver Mensaje
Lo he programado acorde a los datos del RFC de Netflow, y siguiendo el ejemplo del RFC pero sin las opciones y con algún campo menos.
Gracias por la ayuda Eternal Idol, pero ya tengo el RFC. Si no fuese por el RFC ni siquiera hubiese podido hacer lo que he hecho. La verdad es que viene muy completo y es lo mejor que he encontrado sobre Netflow. Pero el fallo ese no se a qué puede ser debido... he revisado los campos del paquete Netflow que se encapsula sobre UDP y no veo nada que esté mal.

Saludos.
  #4 (permalink)  
Antiguo 09/11/2006, 01:15
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Cita:
Iniciado por Alnorte Ver Mensaje
Gracias por la ayuda Eternal Idol, pero ya tengo el RFC. Si no fuese por el RFC ni siquiera hubiese podido hacer lo que he hecho. La verdad es que viene muy completo y es lo mejor que he encontrado sobre Netflow. Pero el fallo ese no se a qué puede ser debido... he revisado los campos del paquete Netflow que se encapsula sobre UDP y no veo nada que esté mal.
No se ni quiero saber nada sobre Netflow, voy a suponer que esas "opciones y campos menos" no son obligatorias.

Lo unico "raro" que veo, asi a simple vista, es esto:
Código:
unsigned char buffer[buffer_size];
Por las dudas comproba que no sea eso el problema usando memoria dinamica (malloc/free por ejemplo).

Sino trata de hacer ingenieria inversa, consegui un cliente de eso y create un servidor que escuche en ese puerto y analiza los paquetes de lleguen y comparalos con los que envias ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 09/11/2006, 07:31
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Si está documentado en una RFC, y sigues todos los pasos descritos, DEBE funcionar.

Y si no, es que no es realmente el tal protocolo Netflow, sino algo con añadidos propietarios - no documentados, es decir, porquería para que no puedas usarlo tú ;)
  #6 (permalink)  
Antiguo 09/11/2006, 16:18
 
Fecha de Ingreso: noviembre-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Si el caso es que funcionar funciona, y puedo ver los datos del paquete en el ntop. Pero los dos últimos flow data records del paquete son los que no salen, ese es el problema. Si en vez de 3 mando 6, puedo ver perfectamente en el ntop los 4 primeros flow data records. Así que no creo que falte nada en el RFC.

Código:
unsigned char buffer[buffer_size];
Éso lo vi en un manual o un artículo sobre programación con sockets UDP. Simplemente es para reservar memoria del tamaño del paquete netflow que hay que encapsular en UDP. Luego a la cabecera y demás accedo con punteros.

Gracias por las respuestas. Intentaré mirar lo de la ingeniería inversa con un cliente.

Saludos.
  #7 (permalink)  
Antiguo 10/11/2006, 01:07
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Cita:
Iniciado por Alnorte Ver Mensaje
Éso lo vi en un manual o un artículo sobre programación con sockets UDP. Simplemente es para reservar memoria del tamaño del paquete netflow que hay que encapsular en UDP. Luego a la cabecera y demás accedo con punteros.
Si pero se supone que en este caso buffer_size es incierto en tiempo de compilacion al tomar el valor de una variable local ... tu compilador debe asumir que al usar en esa variable solo sizeof's puede determinar el tamaño del array en tiempo de compilacion, hay otros compiladores que no lo hacen.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 12/11/2006, 18:51
 
Fecha de Ingreso: noviembre-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Cita:
Iniciado por Eternal Idol Ver Mensaje
Si pero se supone que en este caso buffer_size es incierto en tiempo de compilacion al tomar el valor de una variable local ... tu compilador debe asumir que al usar en esa variable solo sizeof's puede determinar el tamaño del array en tiempo de compilacion, hay otros compiladores que no lo hacen.
Uso el compilador gcc, en la IDE Anjuta. Parece ser que sí que asume éso, porque cuando envío el paquete UDP guardo en una variable los bytes envíados y luego los saco por pantalla (al final del código) y me indica los bytes exactamente como debe de ser según el paquete que pretendo envíar.
  #9 (permalink)  
Antiguo 17/10/2007, 07:46
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

Cita:
Iniciado por Alnorte Ver Mensaje
Hola!

Estoy haciendo un programa en "C" que envía datos de red, como direcciones IP, mediante el protocolo NetFlow para poder visualizar esa información en el ntop.

El problema es que si lo programo para envíar menos de 3 flow data records no me aparece nada en el ntop. Y si envío 3 o más flow data records me aparecen todos excepto los 2 últimos. Vamos que el problema es que los 2 últimos flow data records no salen.

Para usar el ntop para recoger datos Netflow simplemente hay que activar el plugin netflow (en la interfaz web del netflow, en admin->plugins) de manera que se crea un nuevo interfaz de red aparte del eth0. Luego se va a admin->switch NIC y se selecciona la nueva interfaz netflow para que sean esos datos los que muestre en tráfico y demás.

Por tanto no creo que el error esté en el ntop, pienso que será algo que hago mal en el programa que estoy haciendo. Lo he programado acorde a los datos del RFC de Netflow, y siguiendo el ejemplo del RFC pero sin las opciones y con algún campo menos.

A continuación dejo el código del programa que envía 3 flow data records por si alguién sabe algo y me puede echar una mano. Cualquier duda la respondere con mucho gusto. Gracias de antemano.

Código:

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#define PORT 2055 /* el puerto donde se enviaran los datos (el que usa NetFlow por defecto)*/

/* Cabecera NetFlow */
struct netflow_hdr {
unsigned short int version;
unsigned short int count;
unsigned long int sys_up_time;
unsigned long int unix_secs;
unsigned long int sequence_number;
unsigned long int source_id;
};

struct template_flowset {
unsigned short int flowset_id;
unsigned short int length;
unsigned short int template_id;
unsigned short int field_count;
unsigned short int fields[8];
};

struct data_flowset {
unsigned short int flowset_id;
unsigned short int length;
unsigned long int field[12];// 3 data records de 4 campos cada uno
};

int main()
{
int sockfd;
struct sockaddr_in their_addr; /*Almacenara la direccion IP y numero de puerto del destino*/
struct hostent *he;
int numbytes;
FILE *fichero=NULL;
unsigned long int temp;


/* Tamaño del buffer capaz de contener un paquete NetFlow */
unsigned int buffer_size=sizeof(struct netflow_hdr)+sizeof(struct template_flowset)+sizeof(struct data_flowset);

/* Buffer que contendra el paquete NetFlow */
unsigned char buffer[buffer_size];
memset(buffer,0,buffer_size);//se rellena con ceros

/* Cabecera NetFlow */
struct netflow_hdr *header=(struct netflow_hdr *)buffer;

/* template flowset */
struct template_flowset *template=(struct template_flowset *)(buffer + sizeof(struct netflow_hdr));

/* data flowset */
struct data_flowset *data=(struct data_flowset *)(buffer + sizeof(struct netflow_hdr)+ sizeof(struct template_flowset));

/* convertimos el hostname a su direccion IP */
if ((he=gethostbyname("localhost")) == NULL)
{

herror("gethostbyname");
exit(1);

}
/* Creamos el socket */
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{

perror("socket");
exit(1);

}

//rellenamos el paquete NetFlow teniendo en cuenta que hay que usar network byte order:

fichero = popen ("date +%s", "r");//para rellenar header->unix_secs
if (fichero == NULL)
{
perror ("No se puede abrir /bin/ls");
exit (-1);
}

fscanf(fichero,"%d",&(temp));//Se guarda la información de salida del comando "date +%s" que
// estaba en el fichero en la variable temp para después rellenar la estructura

header->version=htons(9);// versión 9 de netflow
header->count=htons(4);// número total de records: 1 template record + 3 data record
header->sys_up_time=htonl(10000);// milisegundos desde que el dispositivo fue arrancado
header->unix_secs=htonl(temp);// segundos que han pasado desde 1970
header->sequence_number=htonl(1);//número de secuencia
header->source_id=htonl(250);//identificador de la fuente

template->flowset_id=htons(0);//El cero está reservado para el template flowset ID
template->length=htons(sizeof(struct template_flowset));
template->template_id=htons(256);//Template ID de data flowsets son mumerados desde 256 hasta 65535
template->field_count=htons(4); //Número de campos en cada template record
//(para que el colector sepa el final de cada template record)
template->fields[0]=htons(8);//campo 1: IP_SRC_ADDR
template->fields[1]=htons(4);//longitud del campo IP_SRC_ADDR
template->fields[2]=htons(12);//campo 2: IP_DEST_ADDR
template->fields[3]=htons(4);//longitud del campo IP_DEST_ADDR
template->fields[4]=htons(2);//campo 3: IN _PKTS
template->fields[5]=htons(4);//longitud del campo IN_PKTS
template->fields[6]=htons(1);//campo 4: IN_BYTES
template->fields[7]=htons(4);//longitud del campo IN_BYTES

data->flowset_id=htons(256);//Tiene que ser igual que el template_id
data->length=htons(sizeof(struct data_flowset));
data->field[0]=inet_addr("198.168.1.12");//record 1, valor del campo 1
data->field[1]=inet_addr("10.5.12.254");//record 1, valor del campo 2
data->field[2]=htonl(5009);//record 1, valor del campo 3
data->field[3]=htonl(5344385);//record 1, valor del campo 4
data->field[4]=inet_addr("198.168.1.15");//record 2, valor del campo 1
data->field[5]=inet_addr("10.5.10.254");//record 2, valor del campo 2
data->field[6]=htonl(3000);//record 2, valor del campo 3
data->field[7]=htonl(2863790);//record 2, valor del campo 4
data->field[8]=inet_addr("198.168.1.16");//record 3, valor del campo 1
data->field[9]=inet_addr("10.5.18.254");//record 3, valor del campo 2
data->field[10]=htonl(2000);//record 3, valor del campo 3
data->field[11]=htonl(1563790);//record 3, valor del campo 4

//Procedemos al envío (sobre UDP)

their_addr.sin_family = AF_INET; /* host byte order */
their_addr.sin_port = htons(PORT); /* network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);

if ((numbytes=sendto(sockfd, buffer, buffer_size, 0, (struct sockaddr *)&their_addr,sizeof(struct sockaddr))) == -1)
{

perror("sendto");
exit(1);

}
printf("enviados %d bytes hacia %s\n",numbytes,inet_ntoa(their_addr.sin_addr));
close(sockfd);
return 0;
}
RESPUESTA DE LIZA
HOLA, ES UN PLACER CONOCERTE LA INQUIETUD QUE TENGO HACERCA DE TU CODIGO ES LA SIGUIENTE.: DONDE LO COLOCAS DENTRO DEL NTOP PARA CORRERLO. CREO QUE LE PUEDO HACER UNAS MODIFICACION PARA QUE HAGA LO QUE TU QUIERES. BUENO ESPERO TU PRONTA RESPUESTA MI CORREO ES [email protected] SOY DE VENEZUELA
  #10 (permalink)  
Antiguo 17/10/2007, 12:16
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Re: Envíar datos de red mediante NetFlow al ntop

¿Pero no enseñan ya a escribir?
  #11 (permalink)  
Antiguo 22/10/2007, 09:20
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

la pregunta que hago es para alnorte porque no responde...
  #12 (permalink)  
Antiguo 22/10/2007, 10:17
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Re: Envíar datos de red mediante NetFlow al ntop

Cita:
Iniciado por liza Ver Mensaje
la pregunta que hago es para alnorte porque no responde...
Tal vez viendo su perfil te des cuenta: Última Actividad: 13/11/06 01:51:42.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #13 (permalink)  
Antiguo 23/10/2007, 11:02
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

entonces puedes tu ayudarme en esto... please
  #14 (permalink)  
Antiguo 25/10/2007, 12:29
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

el programa de enviar datos de red mediante netflow al ntop lo corres fuera del ntop o dentro del ntop, lo que pasa es que estoy haciendo un proyecto y necesito que me ayuden por favor...
  #15 (permalink)  
Antiguo 25/10/2007, 12:41
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Re: Envíar datos de red mediante NetFlow al ntop

Cita:
Iniciado por liza Ver Mensaje
el programa de enviar datos de red mediante netflow al ntop lo corres fuera del ntop o dentro del ntop, lo que pasa es que estoy haciendo un proyecto y necesito que me ayuden por favor...
Es un programa independiente que usa el protocolo netflow ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #16 (permalink)  
Antiguo 26/10/2007, 07:57
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

ok gracias por tu respuesta.... voy a probar y luego te cuento como me ha ido en el proyecto...
  #17 (permalink)  
Antiguo 14/11/2007, 11:41
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

hola eternal idol, soy yo otra vez ya me funciono el programa de alnorte ahora el problema es que no encuentro la manera de enlazarlo con ntop, bueno yo no se mucho sobre esto pero el programa por lo menos me funciona bien, es para mi proyecto. gracias de antemano y esperando tu pronta respuesta.
  #18 (permalink)  
Antiguo 14/11/2007, 13:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Re: Envíar datos de red mediante NetFlow al ntop

Cita:
Iniciado por liza Ver Mensaje
hola eternal idol, soy yo otra vez ya me funciono el programa de alnorte ahora el problema es que no encuentro la manera de enlazarlo con ntop, bueno yo no se mucho sobre esto pero el programa por lo menos me funciona bien, es para mi proyecto. gracias de antemano y esperando tu pronta respuesta.
Yo se menos que vos sobre este tema.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #19 (permalink)  
Antiguo 15/11/2007, 07:16
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

hola como estas quisiera saber si me puedes ayudar con este programa que trae el ntop; lo que hace es llenar la base de datos pero hay una funcion que no me deja pasar a la siguiente linea bueno aqui dejo el programa se corre con perl. la linea es recv(), no me la reconoce, en realidad no se si me falta declarar algo,por favor ayudame please. El programa se llama mySQLserver.pl lo puedes buscar por internet por si acaso me eqivoque en algo. gracias y que diosito este iluminandote

#!/usr/bin/perl
# This is a sample program written in Perl that does the same thing as the
# java program ODBCServer.java
#
# This program needs DBI and DBD installed to works
#
# Author: Daniel Savard <[email protected]>
#
use DBI;
use IO::Socket;
use Sys::Hostname;

# Main program
my $buffer = " ";
my $bufLength = 1514;
my $DBDServer = "DBI:mysql:NTOP";
my $socket = null;
my $rv;

# Listen to the udp port
$socket = IO::Socket::INET->new(LocalAddr => 'localhost',
LocalPort => 4000,
Proto => 'udp',
Type => SOCK_DGRAM);

# Open the database connection
my $dbh = DBI->connect('DBI:mysql:NTOP', 'NTOP', 'NTOP') or die "Couldn't conne$ DBI->errstr;

# Infinite loop
while(1) {

# Receive the SQL statement
recv($socket, $buffer, $bufLength, 0) || die "recv: $!";

# Print the SQL statement
print "$buffer\n";

# Correct the SQL if needed
$buffer =~ s/^DELETE \*/DELETE/; # Change 'DELETE *' for 'DELETE'

# Correct dates, not needed if ntop gives us yyyy-mm-dd, ntop up
# to 1.2a12 gives mm/dd/yy . 06.02.00 Ralf Amandi
# @dates= ($buffer =~ m!'../../.. ..:..:..'!g);
# foreach $date (@dates) {
# # mm/dd/yy -> yy-mm-dd
# @items=split("[/ ']",$date,6);
# $new="'$items[3]-$items[1]-$items[2] $items[4]'";
# $buffer =~ s/$date/$new/g;
# }

# Correct insert into host (in the mdb database the default
# for FirstSeen is set to now(). mySQL can not handle this). 06.02.00 Ralf Aman
if (substr($buffer,0,59) eq 'INSERT INTO Hosts (IPaddress, MACaddress, NICven$ $buffer='INSERT INTO Hosts (IPaddress, MACaddress, NICvendor, FirstSeen) $ }

# Execute the SQL statement
$rv = $dbh -> do($buffer);

# Print a blank line
print "\n";
}
  #20 (permalink)  
Antiguo 10/12/2007, 11:36
 
Fecha de Ingreso: junio-2004
Mensajes: 8
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Envíar datos de red mediante NetFlow al ntop

Por Favor Necesito Ayuuudaaaaaaaaaaa
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 14:04.