elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con alcance de variable en class de C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con alcance de variable en class de C++  (Leído 2,184 veces)
arturoro

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Problema con alcance de variable en class de C++
« en: 21 Mayo 2012, 22:27 pm »

Hola a todos:

Creo que el problema que tuve la otra vez de "variable iniciada pero no declarada nunca sera referenciada" fue por el alcance de la variable en class, pero volvi a checar y nada raro le veo, les mando completo las instrucciones:

#ifndef SCANNER_H
#define SCANNER_H

#include "main.h"

#define SCANNER_PADSIZE 0
#define SCANNER_FRAMESIZE (sizeof(Ethernet_FrameHeader) + sizeof(IP_PacketHeader) + sizeof(TCP_SegmentHeader) + SCANNER_PADSIZE)


class Scanner
{
private:
Sniffer *sniffer;
Ticker scan_timer;
Timeout scan_timeout;

u8 raw_frame[SCANNER_FRAMESIZE];

IP_Address destip;
u16 port_idx; //////////////////////////////// AQUI DECLARO LA VARIABLE
u16 pseudo_checksum;

set<u16> open_ports;

LocalFileSystem local;

public:
inline Scanner(Sniffer *_sniffer)
: sniffer(_sniffer), local("local")
{
sniffer->attach_tcp(this, &Scanner::handle_tcp);
}


inline void handle_tcp(TCP_SegmentHeader *packet, u32 data_bytes)
{
if (packet->syn && packet->ack)
{
open_ports.insert(packet->source_port);
}
}


inline void finish()
{
FILE *fp = fopen("/local/PortScan.txt", "w");
fprintf(fp, "Open Ports on %d.%d.%d.%d:\n", destip.octet[0], destip.octet[1], destip.octet[2],estip.octet[3]);

for (set<u16>::iterator iter = open_ports.begin(); iter != open_ports.end(); ++iter)
{
fprintf(fp, " TCP:%-5d OPEN\n", *iter);
}
fclose(fp);

main_log.printf("Open ports:");
for (set<u16>::iterator iter = open_ports.begin(); iter != open_ports.end(); ++iter)
{
main_log.printf(" TCP:%-5d OPEN", *iter);
}
main_log.printf("Port scan complete.");
}

inline void start(Ethernet_MAC src, Ethernet_MAC dst, IP_Address srcip, IP_Address dstip)
{

static Ethernet_FrameHeader *frame = (Ethernet_FrameHeader*)raw_frame;
static IP_PacketHeader *packet = (IP_PacketHeader*)frame->payload;
static TCP_SegmentHeader *segment = (TCP_SegmentHeader*)packet->data;

destip = dstip;
main_log.printf("Starting TCP port scan of %d.%d.%d.%d...", dstip.octet[0], dstip.octet[1], dstip.octet[2], dstip.octet[3]);


memset(raw_frame, '\0', SCANNER_FRAMESIZE);


frame->destination = dst;
frame->source = src;
frame->ethertype = ETHERTYPE_IPV4;

packet->source = srcip;
packet->version = 0x04;
packet->header_bytes_div4 = 5;
packet->packet_bytes = SCANNER_FRAMESIZE-sizeof(Ethernet_FrameHeader);
packet->ttl = 64;
packet->protocol = IPPROTO_TCP;
packet->destination = dstip;

segment->sequence_number = 0xBADBEEF0;
segment->data_offset_bytes_div4 = sizeof(TCP_SegmentHeader)/4;
segment->syn = 1;
segment->window_size = 8192;
pseudo_checksum = pseudo_header_checksum(srcip, dstip, sizeof(TCP_SegmentHeader));

port_idx = 0; //////////////// AQUI LA INICIALIZO

open_ports.clear();
scan_timer.attach_us(this, &Scanner::scan, 50);
}


inline void scan()
{

/////////////////////////// AQUI CREO LA MATRIZ

static u16 port_idx[] = {1, 2, 3, 5, 7, 9, 11, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 35, 37, 39,
41, 42, 43, 47, 49, 50, 51, 52, 53, 54, 56, 58, 70, 79, 80, 83, 88, 90, 101, 102,
104, 105, 107, 108, 109, 110, 111, 113, 113, 115, 117, 118, 119, 135, 137, 138, 139, 143, 152, 153,
156, 162, 170, 177, 179, 194, 199, 201, 209, 210, 213, 218, 220, 259, 264, 308, 311, 318, 350, 351,
366, 369, 371, 383, 384, 387, 389, 401, 427, 443, 444, 445, 464, 475, 497, 504, 512, 513, 514, 515,
520, 524, 530, 532, 540, 542, 543, 544, 546, 547, 548, 554, 556, 563, 587, 591, 593, 604, 631, 635,
636, 639, 641, 646, 647, 648, 653, 654, 657, 660, 674, 691, 692, 694, 695, 699, 700, 701, 702, 706,
711, 712, 749, 750, 751, 752, 753, 754, 760, 860, 873, 902, 989, 990, 991, 992, 993, 995, 1058,
1080, 1085, 1098, 1099, 1140, 1169, 1176, 1182, 1194, 1198, 1200, 1214, 1220, 1223, 1241, 1270, 1293, 1337, 1352, 1387,
1414, 1417, 1418, 1419, 1420, 1431, 1433, 1470, 1494, 1512, 1513, 1521, 1524, 1533, 1547, 1677, 1720, 1723, 1755, 1761,
1762, 1763, 1764, 1765, 1766, 1767, 1768, 1801, 1812, 1813, 1863, 1935, 1947, 1970, 1971, 1972, 1984, 1994, 1998, 2000,
2031, 2053, 2073, 2074, 2082, 2083, 2086, 2102, 2103, 2104, 2105, 2144, 2145, 2161, 2181, 2210, 2211, 2212, 2219, 2220,
2261, 2262, 2369, 2370, 2404, 2447, 2483, 2484, 2500, 2612, 2713, 2714, 2735, 2809, 2868, 2947, 2948, 2949, 3050, 3051,
3074, 3225, 3233, 3235, 3260, 3268, 3269, 3283, 3305, 3306, 3386, 3389, 3396, 3412, 3455, 3423, 3424, 3478, 3483, 3516,
3532, 3533, 3606, 3632, 3689, 3690, 3702, 3880, 3868, 3900, 3945, 3999, 4018, 4089, 4093, 4096, 4111, 4116, 4321, 4662,
4728, 4840, 4843, 4847, 4993, 4894, 4899, 4950, 5000, 5001, 5003, 5004, 5005, 5051, 5060, 5061, 5070, 5084, 5085, 5099,
5151, 5154, 5190, 5222, 5269, 5298, 5351, 5355, 5402, 5405, 5421, 5432, 5556, 5631, 5814, 5900, 5984, 5999, 6000, 6005,
6086, 6110, 6111, 6112, 6129, 6346, 6347, 6350, 6432, 6444, 6445, 6619, 6665, 6666, 6667, 6668, 6669, 6888, 6969, 7005,
7006, 7400, 7401, 7402, 7547, 7787, 7788, 8000, 8008, 8078, 8080, 8118, 8123, 8243, 8280, 8400, 8442, 8880, 8888, 9009,
9080, 9100, 9105, 9119, 9306, 9312, 9418, 9535, 9536, 9800, 9898, 9996, 10008, 10010, 10050, 10051, 10113, 10114, 10115,
10116, 13076, 13720, 13721, 13724, 13782, 13783, 13785, 13786, 15000, 15345, 17500, 18104, 19283, 19315, 22347, 22350,
24465, 24554, 26000, 31457, 33434, 40000, 43047, 43048, 47808};


static Ethernet_FrameHeader *frame = (Ethernet_FrameHeader*)raw_frame;
static IP_PacketHeader *packet = (IP_PacketHeader*)frame->payload;
static TCP_SegmentHeader *segment = (TCP_SegmentHeader*)packet->data;

segment->source_port = port_idx; //////// AQUI LA VUELVO A UTILIZAR
segment->destination_port = port_idx; //////////// AQUI HAGO LO MISMO

fix_endian_tcp(segment);
segment->checksum = checksum(segment, sizeof(TCP_SegmentHeader), &segment->checksum, sizeof(segment->checksum), pseudo_checksum);

fix_endian_ip(packet);
packet->header_checksum = checksum(packet, sizeof(IP_PacketHeader), &packet->header_checksum, sizeof(packet->header_checksum));

fix_endian_ethernet(frame);
sniffer->inject(frame, SCANNER_FRAMESIZE);

fix_endian_ethernet(frame);
fix_endian_ip(packet);
fix_endian_tcp(segment);


segment->sequence_number++;


/////////////////////////////////// AQUI PREGUNTO SI PORT ES MAYOR O IGUAL A 65,535
if (port_idx >= 65535)
{
scan_timer.detach();
scan_timeout.attach(this, &Scanner::finish, 7);
}
port_idx++; //////////////// POR ULTIMO INCREMENTO EL VALOR DE PORT
}
};

#endif

Como ven, no se porque a la hora de compilar, me manda ese error de que la variable es inicializada pero no declarada, me la manda en la linea que dice "static u16 port_idx[]", en la creacion de matriz

Si me podrian ayudar?

GRACIAS DE ANTEMANO!!!


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.908


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con alcance de variable en class de C++
« Respuesta #1 en: 22 Mayo 2012, 11:23 am »

¿Alguna razon para usar dos veces el mismo nombre de variable?

u16 port_idx;
static u16 port_idx[];

En el codigo original no hace eso ....

http://mbed.org/users/etherealflaim/programs/NetTool/lg5k8l/docs/scanner_8h_source.html

Supongo que es el problema de copiar y pegar codigo sin entenderlo.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
arturoro

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Explicacion a lo que me dices
« Respuesta #2 en: 22 Mayo 2012, 23:04 pm »

¿Alguna razon para usar dos veces el mismo nombre de variable?

u16 port_idx;
static u16 port_idx[];

En el codigo original no hace eso ....

http://mbed.org/users/etherealflaim/programs/NetTool/lg5k8l/docs/scanner_8h_source.html

Supongo que es el problema de copiar y pegar codigo sin entenderlo.


No es eso, aun con el codigo original (ports) me sigue mandando el mismo error de que la variable inicializada pero no declarada, aun asi, me sigue mandando el mismo error, le puse la misma variable porque se necesita que guarde en la matriz los valores que necesito.

Si compilas ese codigo, te manda el mismo error.

 :rolleyes:
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.908


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con alcance de variable en class de C++
« Respuesta #3 en: 22 Mayo 2012, 23:23 pm »

¿Asi que no es eso? Le pusiste el mismo nombre a un array e intentaste asignarlo a un entero, no entendes lo que estas haciendo.

Bueno, ya es el segundo hilo que abris al respecto, el problema es tu codigo, esta mal y no tiene sentido, volvelo a leer. Y asegurate de estar compilando correctamente el fuente actualizado.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La variable de tipo Object o la variable de bloque With no está establecida
Programación Visual Basic
rubeng 5 11,300 Último mensaje 17 Septiembre 2007, 00:04 am
por rubeng
Problema con variable
Scripting
kraszic 6 3,237 Último mensaje 2 Agosto 2008, 00:42 am
por kraszic
Error 91: Variable de tipo object o la variable de bloque with no esta estableci
Programación Visual Basic
brus_k10 2 5,738 Último mensaje 16 Junio 2009, 16:20 pm
por cassiani
Duda con variable "fuera de alcance"[SOL]
Programación C/C++
Leber 9 4,336 Último mensaje 4 Diciembre 2010, 18:38 pm
por Leber
Problema con Prototype & Widows CLass
Desarrollo Web
Riki_89D 0 1,377 Último mensaje 26 Noviembre 2010, 18:19 pm
por Riki_89D
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines