D

dacunha121

Usuario (Uruguay)

Primer post: 17 sept 2011Último post: 6 feb 2012
3
Posts
43
Puntos totales
9
Comentarios
S
Shell Scripts
Apuntes Y MonografiasporAnónimo9/17/2011

Los Shell Script son bastantes simples de crear, ejecutar, y trabajar con ellos, lo que necesitamos es algún sistema operativo GNU/LinuxEn esta página aprenderemos a crear Shell Scripts (en adelante script) de la forma más eficiente, sin dar muchas vueltas.Nivel 1 - No sé nada de scriptsBueno, ya que no sabés nada te voy a explicar como empezar:Paso 1: Abrís la consola, o terminal, ese va ser tu compilador y va ser donde ejecutes tu programa...Paso 2: Elegí tu editor de textos preferido, en la consola puedes ejecutar el comando "vi" o el comando "nano", de estos editores de la consola recomiendo usar el "nano", el "vi" es muy confuso usarlo.En caso de elegir el editor "vi": Tenés 3 niveles Modo Comando Modo insertar Modo última líneaHace mucho que no agarro mis cuadernos, pero creo que estoy en lo cierto, el modo insertar es el que vamos a utilizar para escribir en nuestro archivo, el modo comando se entra desde el modo insertar presionando Esc y luego ":", sino estando en el modo comando, presionando ":" y ejecutando un comando, también sirve... no voy a explicar eso, agarrenle la mano si quieren. Para entrar al modo insertar debemos presionar la letra "i" desde el modo comando, y la verdad no me acuerdo mucho de este editor, pero al menos ya tienen una base.En caso de elegir el editor "nano":En este entrás directamente a escribir, y presionando Ctrl+O guardas el archivo, Ctrl+X para salir, bueno, en la parte inferior les va mostrar las opciones...También podés elegir un editor de textos como el gedit, es como el Bloc de notas de windows, o cualquier editor de textos, el que mas les guste.Paso 3: Fijate en donde lo guardes, esa será la ruta para ir a ejecutar el script, /home/usuario/Escritoriosi donde lo guardamos fue en el escritorio, entonces esa será la ruta, para fijarnos en la ruta en la que estamos utilizamos el comando "pwd" en la consola.Para ir a un directorio entonces ejecutamos el comando "cd" y la ruta a la que queremos ir$ pwd/home/usuario$ cd Escritorio$ cd "mi carpeta"$ pwd/home/usuario/Escritorio/mi carpetaPara ver los archivos de un directorio lo hacemos con el comando "ls"$ lsarchivo1archivo2.textoarvhivo3.tarPaso 4: Ya sabemos manejarnos en nuestra computadora a traves de la consola, ahora, ¿cómo ejecutamos el script?El script tiene varias formas de ejecutarse, supongamos que nuestro script es el archivo1, para ejecutarlo utilizaremos el comando "sh"$ sh archivo1o el comando "bash"$ bash archivo1o el que recomiendo usar, "."$ . archivo1Con este último, el script además de ejecutarse y simplemente eso como lo hacen con "sh" y "bash", también lo que hace es dejar que el próximo script a ejecutarse, o solamente la consola en la que se ejecutó, se quede con el resultado de las variables.Esto es una ventaja, ya que si queremos controlar una variable desde la consola en la que se ejecuta este comando nos va ser muy útil.Paso 5: Vamos a crear un pequeño script con algunos comando basicosEn su editor preferido escriben:____________________________# Mi shell Scriptclearecho Este es mi shell scriptread -s -p "Presione enter para continuar..."____________________________Guardenlo con el nombre que más les guste, ejecutenlo, y les aparecerá esto:Este es mi shell scriptPresione enter para continuar..._Explicación: clear - Limpia la pantalla echo - Muestra una cadena de texto en pantalla read -s -p "texto" - Hace una pausa en el scriptNivel 2 - Ahora sé un poquitoBueno ya que sabés un poquito, empieza el teórico feo, el mal necesario...Tenemos que saber que como un lenguaje de programación, este lenguaje es un lenguaje estructurado.Yo les voy a enseñar usar 3 estructuras que son las más importantes para mi, una es el IF, la segunda es CASE y la tercera es WHILE, obvio señores, estas son las que me parecen las más importantes, pero esta el FOR, el UNTIL, y no me acuerdo más...Empecemos con el IF, la más usada diría yo, su sentencia es fácil: Una sola condición Dos o más Ejemploif condición then comandos fi if condición then comandos else comandos fi if test 2 -eq 2 then echo el número es 2 fiExplicación: el "test" es un comando que se puede usar con el "if" tanto como con cualquier estructura condicional, este comprueba que una sentencia es verdadera, en el ejemplo, si lo traducimos al "español", dice: si 2 es igual a 2 entonces...en el "test" se comparan números o cadenas de texto, para comparar números se utilizan-eq Igual a-gt Mayor que-lt Menor que-ge Mayor o igual a-le Meno o igual a-ne Distinto dey para las cadenas de texto= Igual a> Mayor que< Menor que>= Mayor o igual a<=Menor o igual a!= Distinto deAntes de continuar, les voy a enseñar a usar variables, estas pueden guardar adentro cualquier valor numérico y cadena de texto, salidas de comandos, etc...Se declaran así:variable=valory se las llama así:$variablesEjemplo:$ variable="hola como estas?"$ echo $variablehola como estas?Pero las variables las vamos a usar para muchísimas partes del programa, desde operaciones numéricas hasta para guardar cadenas de texto, o salidas de comandos.Para guardar una salida de comando en una variable vamos a utilizar el tilde que apunta hacia la izquierda "`", encerrando al comando.De esta forma:$ variable=`echo hola`$ echo $variableholaEs un ejemplo nada más... a medida que avancen en un shell script podrán darse cuenta de como utilizar las variables para las salidas de comando,ahora para hacer operaciones matematicas usamos el comando "expr", y lo guardamos en una variable el resultado, asi, de esta forma:$ operacion=`expr 1 + 1`$ echo $operacion2El "expr" también puede utilizar variables en sus operaciones, de esta forma:$ numA=1$ numB=2$ operacion=`expr $numA * $numB`$ echo $operacion2Bien, ahora que sabemos como manejar variables, entonces vamos a seguir con las estructuras de programación, y la siguiente es el WHILEEl "while" es un bucle repetitivo que se ejecuta mientras se cumpla la condición: while Ejemplo while condición do comandos done while test 2 -eq 2 do echo el numero es dos doneLa salida de esta estructura van a ser infinitos:el numero es dosel numero es dosel numero es dosel numero es dosel numero es dosel numero es dosel numero es dos...y así hasta que se agota la energía de la tierra... porque se ejecuta mientras 2 sea igual a 2.Pero para manejar un "while" de manera correcta, lo que tenemos que aprender es a hacer que el usuario ingrese valor de variables en nuestro script, y ahí viene el otro uso que le vamos a dar al comando "read" y su sentencia es muy simple:$ read variable_El comando queda esperando a que le ingresemos un valor a variable y luego presionemos «enter»$ read variablehola$ echo $variableholaBueno ahora nuestro while y cualquier otra estructura ya va cobrando vida, voy hacer un ejemplo con un if___________________________________clearecho ingrese un numero:read numif test $num -eq 5 then echo Saliste sorteado, el numero ganador es 5 else echo Perdiste, el numero ingresado no es el ganador fi_____________________________________En este script, que tiene un if de dos condiciones, solo nos va aparecer "Saliste sorteado, el numero ganador es 5", si el numero que ingresamos en el read es igual a 5, en caso contrario no aparecerá "Perdiste, el numero ingresado no es el ganador"Y para continuar, vamos a seguir con nuestra tercera estructura, el CASE, es una estructura de selección, según el valor de la variable va ser el menú al cual entre el case, su estructura es así: case Ejemplo case $var in1)comandos;;2)comandos;;esac read opcioncase $opcion in1)echo la opcion es 1;;2)echo la opcion es 2;;esacen caso de números en las opciones pueden usar letras, sabiendo de antemano que en linux se diferencian las mayúsculas de las minúsculas, pero tenemos un OR que es un operador lógico, y este nos va ayudar con el case, "a|A)" -> esto significa "a o A", nuestro operador lógico es el pipe, que es igual a OR que en español significa O. También en el case tenemos comodines, que para remplazar 1 carácter tenemos al "?" y para remplazar una cantidad indeterminada de caracteres tenemos al "*", el asterisco siempre se utiliza al final como el default de salida, les voy a mostrar un pequeño ejemplo:____________________________________read opcioncase $opcion ina|A)echo la opcion es A;;1)echo la opcion es 1;;?0)echo la opcion es un multiplo de 10;;*)echo No se ingreso nada valido;;esac____________________________________Hay que tener en cuenta que para terminar cada opción del CASE es necesario poner ";;", asi finalizará cada opción correctamente.Nivel 3 - Dale flaco, empezá a enseñarme comandos que quiero hacer mi scriptBueno, bueno... ya va... el tema es que no me voy a poner a explicar comandos como loco, porque hay demasiados comop para que me sacrifique explicando cada uno de ellos, pero les voy a enseñar algunos que les va servir abundante en cada script que creen ustedes:supongamos que tenemos un archivo llamada datos y el contenido es este:_____________________jose:pedro:34anibal:clementino:46debora:juliana:27juan:noel:31_____________________grep - Este comando busca cadenas de texto en un archivo o en la salida de un comandogrep "jose" "datos"va buscar la palabra "jose" en el archivo "datos"... y la salida es esta:jose:pedro:34cut - lo vamos a utilizar para separar campos en un archivocut -f2 -d: datosva mostrarnos los palabras del campo 2 con el separador de campos que es ":" en el archivo datos.. y la salida es esta:pedroclementinojuliananoeltail y head - Nos va mostrar tantas lineas le digamos que muestre dependiendo si es head, las primeras lineas o tail empezando desde las ultimas.tail -2 datosnos va mostrar las ultimas 2 lineas del archivo "datos"... y la salida es esta:debora:juliana:27juan:noel:31head -2 datosnos va mostrar las primeras 2 lineas del archivo "datos"... y la salida es esa:jose:pedro:34anibal:clementino:46awk - un comando bastante útil, que separa los campos, podemos usarlo para salidas de un comando y separar sus distintos campos y mostrarlos en el orden que queramos, pero antes de que les enseñe a usar este comando, tiene que aprender a usar el pipe, que es "|" (Alt Gr+1), es lo mismo que el OR del CASE, pero de esta vez no es OR es un direccionador de salida de comando.En el próximo caso supongamos que el archivo "datos" tiene muchos reglones, unos 100 renglones.cat datos | moreExplicación: "cat" es el comando que muestra el contenido de un archivo especificado posteriormente, y more muestra el resultado de la salida de un comando (en este caso, por el pipe) por pantallas para que pudiéramos ver cada parte del archivo(en este caso "datos".Les explico esto porque el awk siempre lo vamos a utilizar con el pipe.Ahora un comando para explicarles el awk y de paso ya aprenden otro comando:df es el comando que nos muestra la información de los discos instalados, y el parámetro "-h" (df -h) nos muestra los datos de los discos en forma que lo podamos leer.$ df -h | awk ' {print $2 " - " $6} 'Tamaño - Montado36G - /876M - /dev881M - /dev/shm881M - /var/run881M - /var/lock881M - /lib/init/rw150G - /media/04E4A38UE4A37C94_*/Este es el caso de mi computadora/* El comando lo que hace es mandar la salida del comando "df -h" a awk, y awk toma el campo 2 y el 6, entre medio de ellos pone el "-" que lo utilize como separador, y eso nos muestra en pantalla.POR MÁS COMANDOS PIDANLOS POR COMENTARIOS. Por ayuda de cada comando esta es la sentencia: "comando --help" o "man comando"Nivel 4 - Ya hice mi script, pero enseñame algo de redes.(Recomiendo que a medida que encuentren siglas o palabras que no conozcan, búsquenlas en Internet)Como ya saben, el tema redes, es el más importante en la computación. Por eso les voy a enseñar a crear scripts con comandos que les servirán en una red. Pero tengan en cuenta que los van a tener que releer muchas veces, ya que algunos no son tan fáciles de usar, pero esta es la parte en la que voy a usar scripts para explicarles.ping - es un comando que comprueba el estado de conexión del equipo actual a uno o más equipos remotos. Esto se logra ingresando la ip del equipo destino o el DNS. Supongamos que queremos comprobar conexion con la ip 127.0.0.1 (IP del host local)$ ping 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.062 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.057 ms64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.053 ms64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.057 ms64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.039 ms64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.044 ms...Y así infinitas veces. Pero si solo queremos que haga 2 ping al host entonces usamos el parámetro "-c número_de_veces", así:$ ping -c 2 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.055 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.060 ms--- 127.0.0.1 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 999msrtt min/avg/max/mdev = 0.055/0.057/0.060/0.008 msPero supongamos que no tenemos el número de ip del destinatario, pero sabemos su DNS, entonces el ping es la misma sentencia, pero en vez de ip vamos a poner la URL del destinatario, así:ping -c 4 www.google.comPING www.l.google.com (200.40.0.83) 56(84) bytes of data.64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=1 ttl=60 time=13.7 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=2 ttl=60 time=816 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=3 ttl=60 time=12.3 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=4 ttl=60 time=15.9 ms--- www.l.google.com ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3338msrtt min/avg/max/mdev = 12.318/214.533/816.162/347.353 msY entonces nos estará mostrando la ip de google, en este caso es 200.40.0.83. (Descargar ping.sh)Script de muestraw - Nos muestra en pantalla los usuarios conectados a la redwho - Similar a "w"traceroute - (misma sentencia que ping) Nos muestra los saltos que hay desde nuestro equipo hasta el equipo destino. Mostrándonos todo el camino que hace.netstat - conexiones activas de Internetifconfig - información de todas las interfaces de redes de nuestro equipoy bla bla bla... por comandos así busquen en Internet... hay muchos más... pero les voy a enseñar uno difícil e importante.iptables - establece la configuración del firewall de linux(para ingresar cambios con iptables deben ingresar como superusuario con el comando "su"Por los que no saben que es un firewall, en este caso es un software, que filtra las entradas y salidas de paquetes de o a nuestro equipo, permitiendo pasar simplemente los que tengan un destino que le hayamos permitido (con iptables), o que ingrese de un destino confiable, lo que le explicitaremos cuales son confiables o no con el iptables. Esto es una definición muy básica de lo que es un firewall.El iptables, es el comando que no ayudará a controlar estos paquetes, pero tengo que explicarles que este comando es un gran mapa, y tiene una sentencia que varia muchisimo.Este comando se divide en tres reglas: Tablas NAT Mangle Tablas de filtrosPero yo les voy a enseñar como usar el iptables para los filtros, para filtrar paquetes.Empecemos; el iptables tiene como primer recurso las políticas, es decir, que se va hacer con cada paquete por defecto, y hay tres cadenas, los paquetes de entrada, los de salida, y los que se va a direccionar a otra parte. Estas políticas las pueden ver con "iptables -L", y ya verán también las reglas que tienen puestas.$ iptables -LChain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destinationLo que dice aqui es que las cadenas, ninguna de ellas tiene reglas, y sus politicas están en aceptar todos los paquetes entrantes, salientes y direccionados.El parámetro para cambiar una política es el "-P nombre_cadena acción", así:$ iptables -P INPUT DROP$ iptables -LChain INPUT (policy DROP)target prot opt source destination Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination Acciones: ACCEPT (Acepta los paquetes) REJECT (Rechaza los paquetes con aviso, es decir, avisa el origen del pquete de que no se puede recibir el paquete) DROP (Rechaza sin aviso)Para los filtros de entrada y salida, la sentencia es:iptables -regla comando -p protocolo tipo puerto -j accionDonde regla es: "I" Para agregar regla al principio "A" Para agregar regla al final "D" Para borrar una regla existenteDonde comando es: INPUT OUTPUTDonde protocolo es: tcp Si pertenece a la lista de protocolos TCP udp Si pertenece a la lista de protocolos UDPDonde tipo es: "--dport" Para especificar que es puerto destino "--sport" Para especificar que es puerto de origenDonde puerto es: Número de puerto (Ejemplo: 22) Nombre de puerto (Ejemplo: ssh)Donde accion es: ACCEPT REJECT DROPEjemplo:$ iptables -I OUTPUT -p tcp --dport 22 -j REJECTEsta sentencia lo que hace es ingresar al principio de la tabla OUTPUT que todos los paquetes del protocolo tcp con destino al puerto 22 sean rechazados con aviso.Aclaro, las reglas no se guardan al ejecutarlas, esto significa que cuando reinicien el equipo, las reglas volverán su valores normales, pero si lo que deseamos es guardar los cambios, ejecutamos:iptables-savePara los filtros de direccionamiento de paquetes la sentencia es:iptables -regla comando -p protocolo -s origen -o destino -j accionDonde origen es la ip de salida del paquete y destino es la ip del destinatario, a donde se va direccionar el paquete... regla, comando, protocolo y accion tienen las mismas características que para los filtros de entrada y salida.$ iptables -A FORWARD -p tcp -s 192.168.0.1 -o 192.168.0.2 -j ACCEPTEsta sentencia loq ue hace es ingresar al final de la tabla FORWARD, la accion de aceptar todos los paquetes tcp de origen en 192.168.0.1 y destino 192.168.0.2, es decir, deja pasar al paquete por la red.Ping.sh: Descargar - https://sites.google.com/site/vddcnsite/home/shell-script/ping.sh?attredirects=0&d=1***FIN***

10
0
Hacer un buscador en Visual Basic
Hacer un buscador en Visual Basic
Ciencia EducacionporAnónimo2/6/2012

El contenido de este post contiene una estructura bastante fácil que tiene la función de buscar cadenas de texto coincidentes dentro de alguna otra cadena de texto. Es algo así como un buscador. No maneja comodines como "*" o "?", pero sirve en muchas ocasiones. En este ejemplo voy a utilizar un cuadro de texto (TextBox1) para ingresar la cadena que quiero buscar, y donde la estructura va a buscar va ser en una matriz (ficha.buscar) La estructura la hicimos un amigo y yo. Y es muy eficaz. Private Sub Text1_Change() 'La variable cc toma el valor del largo del TextBox1 cc = Len(Text1.Text) 'Limpiamos el List1 que es donde se van a mostrar los resultados. List1.Clear 'Iniciamos un For para recorrer la matriz, teniendo en cuenta que ficha.var es un entero que tiene 'el valor del largo de la matriz For i = 1 To ficha.var 'La variable rc toma el largo del atributo nom de la matriz ficha.buscar rc = Len(ficha.buscar(i).nom) 'Iniciamos un For que va recorrer la cadena de texto tomada de la matriz donde la variable 'a cambia hasta tomar el valor de la variable rc For a = 1 To rc 'La variable tr toma una cantidad "a" de caracteres por la derecha de un lugar de la matriz epecífico por el 'For tr = Right(ficha.buscar(i).nom, a) 'Declaramos un IF que va comparar el texto del TextBox1 con una cantidad de caracteres "cc" tomados 'de la cadena de texto tr, y si son iguales entonces el resultado lo mostramos en un listBox If UCase(Text1.Text) = UCase(Left(tr, cc)) Then 'Aquí ingresamos las sentencias que queremos que se ejecuten si los resultados fueron encontrados 'Pueden ser, mostrar los resultados en un ListBox o simplemente hacer un conteo de los 'resultados encontrados, todo depende de la destreza del programador. List1.AddItem ficha.buscar(i).nom End If Next Next 'Declaramos un IF que va informar si no se encontraron resultados. If List1.ListCount = 0 Then List1.AddItem "No se encontraron resultados en la matriz para" & Chr(34) & Text1.Text & Chr(34) & "." 'Y por último declaramos un IF el cual limpiara el ListBox si el TextBox está limpio. If Text1 = "" Then List1.Clear End Sub Esta estructura está hecha en Visual Basic 6.0, pero con mínimos cambios si el programador entiende este lenguaje, lo podrá usar en todos los Visual Basic, incluso si es un buen programador y entiende la lógica lo podrá usar en cualquier otro lenguaje. Es una estructura muy simple y de vez en cuando necesaria cuando el programa va manejar datos de una oficina o algo por el estilo. Aquí la estructura sin comentarios. Private Sub Text1_Change() cc = Len(Text1.Text) List1.Clear For i = 1 To ficha.var rc = Len(ficha.buscar(i).nom) For a = 1 To rc tr = Right(ficha.buscar(i).nom, a) If UCase(Text1.Text) = UCase(Left(tr, cc)) Then List1.AddItem ficha.buscar(i).nom End If Next Next If List1.ListCount = 0 Then List1.AddItem "No se encontraron resultados en la matriz para" & Chr(34) & Text1.Text & Chr(34) & "." If Text1 = "" Then List1.Clear End Sub Espero les haya servido.

12
0
C
Como hacer conexión remota fácilmente (Para quien no sabe)
Hazlo Tu MismoporAnónimo2/1/2012

Conexión remota Primer paso - Conocer:                     Para hacer una conexión remota hay que tener en cuenta que la PC a la que nos vamos a conectar la voy a llamar "Servidor", y la PC desde la cual nos vamos a conectar la voy a llamar "Cliente".                     Para quienes no saben que es conexión remota: Es conectar un equipo con otro, en la acutalidad casi cualquier equipo que maneje direcciones IP (Ejemplo: IPod-IPhone-IPad a PC, PC a PC, etc.), y controlarlo sin estar fisicamente en él. Segundo paso - Explicación:                     El programa en este caso que vamos a utilizar va ser el Radmin, este tiene la versión gratuita que es el Cliente y la versión paga con una prueba válida de 30 días que es el Servidor. Descargar Cliente: Descargar Servidor: Suponiendo que queremos controlar la PC de nuestra casa desde la PC de nuestro trabajo entonces el Radmin Server 3.4 lo instalamos en nuestra casa, y el Radmin Viewer lo instalamos en nuestra PC del trabajo. Tercer paso - Configurar: Configuración del Servidor: 1- Abrir "Configuración para Radmin Server 3.4" 2- Hacer click en "Permisos" 3- Seleccionar "Seguridad de Radmin" y hacer click en "Permisos", luego hacer click en "Agregar usuario" 4- Ingresar el nombre de usuario y la contraseña que vamos a usar para conectarnos Listo, ahora tenemos configurado nuestro Servidor. Nota: Para más seguridad ir a "Opciones", desmarcar "Usar puerto predeterminado" e ingresar el puerto que prefieran ustedes. (El puerto predeterminado es 4899 y es el que voy a usar para explicarles como configurar el Cliente)Configuración del Cliente: 1- Abrimos "Radmin viewer 3.4" y hacemos click en "Agrega nueva conexión" 2- Agregamos los datos de la nueva conexión, para eso hay que conocer la IP del servidor, si tiene IP fija entonces siempre nos conectaremos con esa IP, en cambio si la IP que tenemos en nuestra casa no es fija, que generalmente es asi, entonces debemos repetir estos paso cada vez que nos vayamos a conectar, obviamente siempre conociendo la IP del cliente. Listo. Ahora podemos conectarnos a nuestra casa desde nuestro trabajo. Preguntas a o en comentarios.

21
6
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.