This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Polsaker

Pages: [1]
1
Wargames y retos / Red de sitios de retos y wargames.
« on: June 05, 2015, 01:46:45 pm »


Hace poco me encontré con You are not allowed to view links. Register or Login, que es una red de 59 sitios que tienen todo tipo de retos, desde los You are not allowed to view links. Register or Login, sobre You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login y muchos mas.
Solo su página principal (sin contar los demás sitios en la red) tiene You are not allowed to view links. Register or Login, algunos bien fáciles y You are not allowed to view links. Register or Login

Pruébenlo y comenten que les parece, a ver si alguien llega al You are not allowed to view links. Register or Login

2
Este sencillo snippet que hice en mi tiempo libre, muestra la cantidad de años que transcurrieron desde una fecha determinada con diez dígitos decimales de precisión (y se actualiza en tiempo real)
Code: (html5) You are not allowed to view links. Register or Login
<html>
    <head>
        <title>Edad</title>
    </head>
   
    <body>
     <h1 id="age" style="margin-left:auto; margin-right:auto; width: 40%; margin-top: 10%; font-family: sans-serif;"></h1>
        <script>
            function calcAge(dateString) {
              var birthday = +new Date(dateString);
              var years = ((Date.now() - birthday) / (31557600000));
              document.getElementById("age").innerHTML = years.toFixed(10) + " a&ntilde;os";
            }
            window.setInterval(function(){
              calcAge("2014/06/29 04:30"); // fecha desde la cual se calcula
            }, 100);
        </script>
    </body>
</html>

3
Redes y antenas / Cjdns e Hyperboria: ¿Qué son y para qué sirven?
« on: June 04, 2015, 01:26:37 am »

Cjdns es un protocolo de red. Su filosofía es que las redes deberían ser fáciles de armar y configurar, que el protocolo debería llegar a mayores escalas sin problema y que la seguridad debe ser ubicua
Cjdns implementa una red IPv6 utilizando cifrado de clave pública para distribuir las direcciones IPv6 y una You are not allowed to view links. Register or Login para el enrutamiento.
La implementación se comunica con otros programas utilizando un dispositivo TUN (que la computadora ve como una conexión regular), lo cual hace que cualquier programa que soporte IPv6 pueda comunicarse utilizando cjdns sin que se deba realizar ninguna modificación.

You are not allowed to view links. Register or Login

Hyperboria
Hyperboria vendría a ser la implementación mas grande existente de una red utilizando cjdns. Es una red experimental (que alguna gente dice, que junto a tor, es parte de la llamada deep web), de alcance prácticamente mundial,  con aproximadamente 500 nodos conectados.
Es una red bastante exclusiva, ya que solo se puede entrar en ella si tienes un amigo que esté dentro (o desde nodos públicos, que generalmente colapsan al poco tiempo).

El objetivo final de Hyperboria con cjdns es reemplazar al Internet convencional y crear una red mundial en donde todos sus integrantes estén al mismo nivel, y conectados utilizando redes inalámbricas.
Aunque de momento, la mayor parte de las conexiones se realicen utilizando el Internet regular, hay varios meshlocals (comunidades locales bastante grandes) que se conectan utilizando exclusivamente Wi-fi u otros medios inalambricos.



¿Y, que opinan? Sería interesante convencer a todos esos LUG (grupos de usuarios de Linux) de américa que están creando sus propias meshnets y ya tienen algo de infraestructura de que utilicen cjdns y se unan a Hyperboria.

4
Casi siempre, al hacer un bot o cliente IRC desde cero uno suele tener problemas al parsear los mensajes del IRC de forma correcta y rápida (Teniendo en cuenta las nuevas características del You are not allowed to view links. Register or Login que se están viniendo, la velocidad, ya que el 90% de las alternativas utilizan expresiones regulares, etc).

Ircreactor parsea los mensajes en crudo del IRC a un objeto intermedio (un diccionario de Python), facilitando la programación de bots y clientes.

Un ejemplo de su uso:
Code: (python) You are not allowed to view links. Register or Login
from ircreactor.envelope import RFC1459Message
mensaje = ":[email protected] PRIVMSG #underc0de :Hola a todos"  # Un mensaje cualquiera recibido desde el IRC, de un socket o de lo que sea
print(RFC1459Message.from_message(mensaje).serialize())
Da como resultado:
Code: You are not allowed to view links. Register or Login
{'params': ['#underc0de', 'Hola a todos'], 'verb': 'PRIVMSG', 'source': '[email protected]', 'tags': {}}Lo cual es mucho mas fácil de interpretar.

Además, esta librería funciona con los nuevos You are not allowed to view links. Register or Login:
Code: (python) You are not allowed to view links. Register or Login
from ircreactor.envelope import RFC1459Message
mensaje = "@esto=aquello;otro=foo :[email protected] PRIVMSG #underc0de :Hola a todos"  # Un mensaje cualquiera recibido desde el IRC, de un socket o de lo que sea
print(RFC1459Message.from_message(mensaje).serialize())
Da como resultado:
Code: You are not allowed to view links. Register or Login
{'params': ['#underc0de', 'Hola a todos'], 'verb': 'PRIVMSG', 'source': '[email protected]', 'tags': {'esto': 'aquello', 'otro': 'foo'}}
La librería se puede conseguir en You are not allowed to view links. Register or Login

5
Video Juegos / La batalla por Wesnoth
« on: May 30, 2015, 02:08:44 am »

La batalla por Wesnoth es un videojuego de estrategia por turnos con ambientación fantástica. Es software libre, con licencia GNU GPL, gratuito, disponible para Linux, Solaris, Mac OS X y Windows entre otros muchos sistemas operativos y programado en lenguaje C++

Es un mundo virtual fantástico, donde un jugador o jugadores controlan una serie de personajes, cada uno con unas características propias especialmente para la lucha hasta que se cumple el objetivo del escenario o se consigue derrotar al enemigo.

Cada unidad tiene unas características propias que las diferencia, así pues, podemos tener a un arquero elfo con las características de fuerza y rapidez, que golpeará con más contundencia a los enemigos y se moverá más rápido que otro que sea resistente e inteligente, que aunque no golpee tan fuerte, tendrá más puntos de vida y necesitará menos puntos de experiencia para avanzar de nivel.

Por otra parte, dependiendo de la clase de la unidad, los personajes tendrán habilidades diferentes. Los magos blancos, por ejemplo tienen la capacidad de curar o sanar a sus compañeros, los caballeros de la muerte conseguirán que sus compañeros luchen mejor por su liderazgo.

Las unidades tienen también una mayor o menor defensa contra los ataques que reciban en función del terreno en el que se hallen situados, los enanos por ejemplo son casi invulnerables en las montañas, y lo mismo sucede con los elfos en los bosques, algunos de estos incluso son capaces de volverse invisibles ante sus enemigos gracias a la habilidad de emboscar.

Además, las unidades ganan experiencia a medida que luchan y matan a sus enemigos y, al alcanzar una cuota de experiencia predeterminada, se transforman en nuevas unidades con nuevos ataques y habilidades. Al llegar a un nivel determinado, que varía según la unidad, el paso al siguiente nivel no conlleva ninguna transformación, dando sólo una ligera mejoría de los puntos de vida.
Fuente: You are not allowed to view links. Register or Login

El juego lo pueden descargar en You are not allowed to view links. Register or Login. Cuesta un tiempo adaptarse al juego y desarrollar estrategias, pero es muy divertido!

Si hay algún otro acá que juegue al Wesnoth, podría montar un servidor y hacer un torneo para Underc0de!  ;D

6
Buenas, esta vez vengo a dejarles otro de los trozos de código que suelo utilizar yo en algunas páginas.
Este código muestra un mapa con la ubicación de una IP utilizando la API de mapas estáticos de Google e ip-api.com para obtener la información de la geolocalización. Solo hay que pasarle el parámetro ip vía GET al script.

Code: (php) You are not allowed to view links. Register or Login
<?php
$ipinfo 
json_decode(file_get_contents("http://ip-api.com/json/" $_GET['ip']));
$latlong $ipinfo->lat "," $ipinfo->lon;

echo 
"<img src=\"https://maps.googleapis.com/maps/api/staticmap?center={$latlong}&zoom=13&size=600x300&markers=color:red%7Clabel:IP%7C{$latlong}\"/>";
?>

También, para incluirlo de forma mas sencilla en páginas (este, por ejemplo, se podría utilizar en una firma del foro  ::) )

Code: (php) You are not allowed to view links. Register or Login
<?php
$ipinfo 
json_decode(file_get_contents("http://ip-api.com/json/" $_GET['ip']));
$latlong $ipinfo->lat "," $ipinfo->lon;
header('Content-Type: image/png'); 
echo 
file_get_contents("https://maps.googleapis.com/maps/api/staticmap?center={$latlong}&zoom=13&size=600x300&markers=color:red%7Clabel:IP%7C{$latlong}");
?>

Por supuesto, pueden cambiar el tamaño del mapa alterando el parámetro size que se envía a la API de Google.

Saludos,
Polsaker

7
Off Topic / Por qué no usar hola.org
« on: May 28, 2015, 10:35:25 pm »
Hola. Supongo que habrán visto You are not allowed to view links. Register or Login mostrando como se puede utilizar hola.org como proxy. En este post, voy a resumir mas o menos como funciona, sus pros y sus contras.

Como funciona
Es muy simple: Instalás la extensión de hola.org y podés utilizarlo como proxy para entrar a una página desde (casi) cualquier país del mundo.
¡Pero eso no es todo! ¡Esa misma extensión "transforma" tu computadora en otro de los proxies de su red! También descarga de los servidores de hola.org listas de URLs a visitar, las cuales se usan para generarle ganancias a los dueños de hola.org y (supongo yo, ya que hasta ahí he investigado) hacer que el proxy funcione (lo cual mas o menos explica por qué solo se puede utilidar el puerto 80 y 443 desde hola.org al usar CONNECT?).

Pros
  • Estás mas o menos anónimo en la re
  • Podés visitar sitios bloqueados en tu país
  • (en cierta manera) acelera tu conexión al escoger la ruta mas eficiente hacia el destino

Contras
  • Se podría decir que backdoorea tu computadora
  • Descarga contenido no solicitado (publicidad + tu computadora actuando como proxy)

En fin, esta es mi humilde recomendación de no usar este servicio que fue You are not allowed to view links. Register or Login

Saludos,
Polsaker

8
Python / Lector de RSS que notifica de nuevos posts en Underc0de.
« on: May 28, 2015, 01:42:53 am »
Este script básicamente lee el feed de Underc0de cada minuto, y si encuentra un post nuevo, envía una notificación a la bandeja del sistema con un botón para leer el post.

Cabe notar que solo funciona en Linux (aunque se puede adaptar para que ande en Windows usando wxWidgets, por ejemplo), y requiere de la librería python3-notify2 y python3-feedparser.

Code: (python) You are not allowed to view links. Register or Login
#!/usr/bin/env python

from gi.repository import Gtk
from gi.repository import GLib
import notify2
import sys
import feedparser
import webbrowser

lasturl = ''
def ir_cb(n, action):
    assert action == "ir"
    webbrowser.open(lasturl)
    n.close()
   
def rssTimer(*args):
    global lasturl
    print("f1")
    feed = feedparser.parse("https://underc0de.org/foro/index.php?type=rss;action=.xml")
    print("f2")
    if feed['items'][0]['id'] != lasturl:
        lasturl = feed['items'][0]['id']
        notify2.init("RSS", mainloop='glib')
        n = notify2.Notification("Nuevo post en la sección de " + feed['items'][0]['tags'][0]['term'],
            "Tema: " + feed['items'][0]['title'])
        n.add_action("ir", "Ir", ir_cb)
        n.show()
    return True

if __name__ == '__main__':
    if not notify2.init("RSS", mainloop='glib'):
        sys.exit(1)
    feed = feedparser.parse("https://underc0de.org/foro/index.php?type=rss;action=.xml")
    lasturl = feed['items'][0]['id']
    GLib.timeout_add_seconds(60, rssTimer)
    Gtk.main()

9
Python / Encriptar y desencriptar utilizando el código Bacon
« on: May 27, 2015, 09:57:01 pm »
Este es un simple par de funciones en Python que se encargan de codificar y decodificar texto utilizando el You are not allowed to view links. Register or Login. Ustedes pueden crear su propia variante cambiando un poco el diccionario. Yo he utilizado un diccionario distinto al normal (he incluido el espacio, separado la I de la J y la U de la V ).

Code: (python) You are not allowed to view links. Register or Login
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import unicodedata
import re

# Diccionario (este es una modificación del original, separando la
# I y la J, la U y la V y añadiendo los espacios para que se vea mas bonito):

bacondict = {
    'a': 'aaaaa',
    'b': 'aaaab',
    'c': 'aaaba',
    'd': 'aaabb',
    'e': 'aabaa',
    'f': 'aabab',
    'g': 'aabba',
    'h': 'aabbb',
    'i': 'abaaa',
    'j': 'abaab',
    'k': 'ababa',
    'l': 'ababb',
    'm': 'abbaa',
    'n': 'abbab',
    'o': 'abbbb',
    'p': 'baaaa',
    'q': 'baaab',
    'r': 'baaba',
    's': 'baabb',
    't': 'babaa',
    'u': 'babab',
    'v': 'babba',
    'w': 'babbb',
    'x': 'bbaaa',
    'y': 'bbaab',
    'z': 'bbaba',
    ' ': 'bbbaa'
}

# Codificar con el código bacon.
# Los parámetros son: el diccionario, el texto a encriptar y el texto
# que lo "cubrirá"
def encode(bacon_dict, words, cover):
    # Convertimos todos los caracteres "especiales" a sus equivalentes ASCII
    # (á: a, ñ: n, etc)
    words = unicodedata.normalize('NFD', words).encode('ascii', 'ignore')
   
    words = words.decode().lower()
   
    cover = cover.lower()
   
    encoded = ''
    for i in words:
        encoded += bacon_dict[i]
    hidden = ''
    b = 0
    b2 = 0
   
    while b < len(cover):
        if b2 < len(encoded):
            if encoded[b2] == 'b':
                # Con esto evitamos poner en mayúsculas los espacios :P
                if cover[b].upper() != cover[b]:
                    hidden += cover[b].upper()
                    b2 += 1
                else:
                    hidden += cover[b]
            else:
                if cover[b].upper() != cover[b]:
                    hidden += cover[b]
                    b2 += 1
                else:
                    hidden += cover[b]
        else: # ya se codificó el texto, llenamos lo que queda con basura
            # tres 'b', un 'a' y otro 'b' al final (un caracter inexistente
            # en el diccionario)
            try:
                hidden += cover[b].upper()
                hidden += cover[b + 1].upper()
                hidden += cover[b + 2].upper()
                hidden += cover[b + 3]
                hidden += cover[b + 4].upper()
            except:
                pass
            b += 4
        b += 1
       
    return hidden

def decodificar(bacon_dict, codified_string):
    encoded = ''
    for i in codified_string:
        if i.istitle():
            encoded += 'b'
        else:
            if i.upper() != i:
                encoded += 'a'
    # Dividimos el texto semi-decodificado en partes de cinco caracteres..
    sec = map(''.join, zip(*[iter(encoded)]*5))
    # Invertimos el diccionario para que sea mas fácil buscar...
    bacon_dict = {v: k for k, v in bacon_dict.items()}
   
    decoded = ''
   
    for i in sec: # ... y vamos decodificando todo...
        try:
            decoded += bacon_dict[i]
        except:
            decoded += '?'
   
    return decoded
# Ejemplo de uso:
print("Encriptando 'nos reunimos esta noche a las doce' y cubriendolo con 'El Código Bacon o clave Baconiana es un método esteganográfico desarrollado por Francis Bacon. El mensaje estaría oculto en la presentación del texto, más que en su contenido. Para codificar un mensaje, cada letra de texto plano es reemplazada por un grupo de cinco letras 'A' o 'B'. El reemplazo se hace de acuerdo con el alfabeto del código Bacon.'")
codificado = encode(bacondict, "nos reunimos esta noche a las doce", "El Código Bacon o clave Baconiana es un método esteganográfico desarrollado por Francis Bacon. El mensaje estaría oculto en la presentación del texto, más que en su contenido. Para codificar un mensaje, cada letra de texto plano es reemplazada por un grupo de cinco letras 'A' o 'B'. El reemplazo se hace de acuerdo con el alfabeto del código Bacon.")
print("Texto codificado: " + codificado)

decodificado = decodificar(bacondict, codificado)
print("Texto decodificado: " + decodificado)

El ejemplo que viene con el código:
La entrada es "nos reunimos esta noche a las doce",
Cubierto con "El Código Bacon o clave Baconiana es un método esteganográfico desarrollado por Francis Bacon. El mensaje estaría oculto en la presentación del texto, más que en su contenido. Para codificar un mensaje, cada letra de texto plano es reemplazada por un grupo de cinco letras 'A' o 'B'. El reemplazo se hace de acuerdo con el alfabeto del código Bacon."

Se codifica a "eL CóDiGO BACon O CLAVe bAcoNianA es Un MéToDO eStEganoGRáfiCO DESarROLLAdo poR frAncIS BaCon. el menSAJe esTArÍa OCULto eN la pRESenTacIÓN del textO, MÁs quE eN Su contEniDO. PARa codiFIcAR UN menSaje, CadA LeTRA dE TExTO PlANO eS REeMPLAzADA pOR Un GRUpO DE CINCo LETrAS 'a' O 'B'. eL REeMPLAzO SE HACE DE AcUERDo CON EL AlFABEtO DEl CÓDiGO BaCON."

Y se decodifica a "nos reunimos esta noche a las doce?w????w???v?ww???????w" (La diferencia entre el texto a codificar y la cubierta se rellena con basura)

10
Hace un par de meses estaba aburrido y decidí reversear la extensión de hola.org (que por cierto no recomendaría usar, ya que transforma tu computadora en uno de sus proxies, pero eso es material para otro post...) y no se me ocurrió mejor idea que crear un prototipo de navegador "anónimo", en el cual puedas cambiar de IP, limpiar las cookies, cambiar de User-Agent, etc, con un solo click de un botón.
Por supuesto, carece de algunas funciones importantes de los navegadores mas comunes, ya que esto es bien básico, pero planeo ir mejorandolo con el tiempo si hay ganas.

Code: (python) You are not allowed to view links. Register or Login
# -*- coding: utf-8 -*-
 
# Navegador básico hecho con PySide.
# Utiliza hola.org para buscar proxies y navegar de la forma mas anónima posible
# Por Polsaker (https://github.com/Polsaker)

from PySide import QtCore, QtGui
from PySide import QtWebKit
from PySide import QtNetwork
import pycurl
import random
from StringIO import StringIO
import json
import time


class MyBrowser(QtWebKit.QWebView):
    def __init__(self):
        QtWebKit.QWebView.__init__(self)
        self.currip = ''
        cp = CPage()
        cp.par = self
        self.setPage(cp)

class Navegador(QtGui.QWidget):
 
    def __init__(self, app):
        self.app = app
        super(Navegador, self).__init__(parent=None)
        self.qnp = QtNetwork.QNetworkProxy()
        self.qnp.setType(QtNetwork.QNetworkProxy.HttpProxy)
       
        self.setWindowTitle("Hola navigator")
        self.gridLayout = QtGui.QGridLayout(self)
        self.label = QtGui.QLabel(u"", self)
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.labelStatus = QtGui.QLabel("Ok", self)
        self.gridLayout.addWidget(self.labelStatus, 2, -1, 1, 1)
        self.btnRep = QtGui.QPushButton(self, text='Change IP')
        self.gridLayout.addWidget(self.btnRep, 0, 1, 1, 1)
        self.btnIr = QtGui.QPushButton(self, text='Go')
        self.gridLayout.addWidget(self.btnIr, 0, 3, 1, 1)
        self.addr = QtGui.QLineEdit(self)
        self.gridLayout.addWidget(self.addr, 0, 2, 1, 1)

        self.wvNavegador = MyBrowser()
        self.gridLayout.addWidget(self.wvNavegador, 1, 0, 1, 4)
       
        self.connect(
            self.btnRep,
            QtCore.SIGNAL("clicked()"),
            self.refreshPage)
        self.connect(
            self.btnIr,
            QtCore.SIGNAL("clicked()"),
            self.cargarUrl)
        self.connect(
            self.addr,
            QtCore.SIGNAL("returnPressed()"),
            self.cargarUrl)
       
        QtWebKit.QWebSettings.globalSettings().setAttribute(
            QtWebKit.QWebSettings.PluginsEnabled, True)
        QtWebKit.QWebSettings.globalSettings().setAttribute(
            QtWebKit.QWebSettings.JavascriptCanOpenWindows, True)
        QtWebKit.QWebSettings.globalSettings().setAttribute(
            QtWebKit.QWebSettings.DeveloperExtrasEnabled, True)
 
        self.wvNavegador.loadProgress.connect(self._progress)
       
        self.addr.setText("http://google.com") # <-- Página por defecto
   
    # Esta función es llamada al cambiar la IP. Borra nuestros rastros, cookies
    # busca un proxy nuevo y cambiar el user-agent.
    def refreshPage(self):
        # Con esto reseteamos las cookies
        self.wvNavegador.page().networkAccessManager().setCookieJar(QtNetwork.QNetworkCookieJar());
        holaproxy = HolaProxyv2(self) # Buscando un proxy nuevo..
       
        self.qnp.setHostName(holaproxy.node)
        self.qnp.setPort(holaproxy.port)
       
        # Credenciales de hola.org, aparentemente varían según cada navegador.
        # Si el script deja de andar, probablemente sea por que las credenciales
        # han cambiado.
        self.qnp.setUser("user-uuid-71317a7827fa928352b29cc7ffe25f4f")
        self.qnp.setPassword("e883692e09c6")
       
        self.qnp.currip = holaproxy.node + ":" + str(holaproxy.port)
        self.cargarUrl()
   
    # Esto evita que la interfaz se congele al procesar eventos.
    def _iloop(self):
        while True:
            k = 0
            while k != 120:
                time.sleep(0.5)
                QtCore.QCoreApplication.processEvents();
                k += 1
            self.refreshPage()
   
    # Actualizar el progreso de carga de cada página
    def _progress(self, progress):
        self.label.setText(str(progress) + "%")
       
    def cargarUrl(self):
        url = self.addr.text()
        url = url if url.startswith(
            "http://") or url.startswith(
                "https://") else "http://{url}".format(
                    url=url)
        # Usamos el proxy...
        QtNetwork.QNetworkProxy.setApplicationProxy(self.qnp)
        request = QtNetwork.QNetworkRequest()
        request.setUrl(url)
       
        # Alteramos el header "Accept-Language", ya que podría revelar
        # nuestra ubicación real.
        request.setRawHeader("Accept-Language","*")
        self.wvNavegador.load(request)

class CPage(QtWebKit.QWebPage):
    ''' Settings for the browser.'''
   
    def userAgentForUrl(self, url):
        # Con esto alteramos el User-Agent, que es definido de forma
        # distinta dependiendo de la IP que estemos usando.
        return random.Random(self.par.currip).choice(["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A",
            "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10",
            "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3",
            "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
            "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
            "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
            "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
            "Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9",
            "Mozilla/5.0 (X11; Linux 3.5.4-1-ARCH i686; es) KHTML/4.9.1 (like Gecko) Konqueror/4.9",
            "Mozilla/5.0 (X11) KHTML/4.9.1 (like Gecko) Konqueror/4.9",
            "Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)",
            "Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.1 (like Gecko) Fedora/4.4.1-1.fc12",
            "Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
            "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0",
            "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
            "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
            "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
            "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1",
            "Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1",
            "Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1",
            "Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.0",
            "Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0 Iceweasel/15.0",
            "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
            "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
            "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
            "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
            "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
            "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
            "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+",
            "Mozilla/5.0 (BlackBerry; U; BlackBerry 9860; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.254 Mobile Safari/534.11+",
            "Mozilla/5.0 (BlackBerry; U; BlackBerry 9850; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.254 Mobile Safari/534.11+",
            "Mozilla/5.0 (BlackBerry; U; BlackBerry 9850; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.115 Mobile Safari/534.11+",
            "Mozilla/5.0 (BlackBerry; U; BlackBerry 9850; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.254 Mobile Safari/534.11+",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)",
            "HTC_Touch_3G Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; Nokia;N70)",
            "Mozilla/5.0 (X11; U; Linux i686; fr-fr) AppleWebKit/525.1+ (KHTML, like Gecko, Safari/525.1+) midori/1.19",
            "Mozilla/5.0 (X11; Linux; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Midori/0.4",
            "Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.348; U; en) Presto/2.5.25 Version/10.54",
            "Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.334; U; id) Presto/2.5.25 Version/10.54",
            "Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (J2ME/23.377; U; en) Presto/2.5.25 Version/10.54",
            "Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (J2ME/22.478; U; en) Presto/2.5.25 Version/10.54",
            "Opera/9.80 (J2ME/MIDP; Opera Mini/9 (Compatible; MSIE:9.0; iPhone; BlackBerry9700; AppleWebKit/24.746; U; en) Presto/2.5.25 Version/10.54",
            "Opera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02",
            "Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50",
            "Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1107071606; U; en) Presto/2.8.149 Version/11.10",
            "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
            "Opera/9.80 (Android 2.2.1; Linux; Opera Mobi/ADR-1107051709; U; pl) Presto/2.8.149 Version/11.10"])

# Clase encargada de descubrir nuevos proxies.
class HolaProxyv2(object):
    def __init__(self, widg):
        widg.labelStatus.setText("Starting proxy discovery..")
        country = random.choice(["ar", "au", "at",
                                "be", "bo",
                                "br",
                                "cl",
                                "fi", "fr", "de", "gi", "gb", "gr",
                                "hk", "is", "in",
                                "it", "jp",
                                "kr", "kw",
                                "mx",
                                "nl",
                                "nz",
                                "py", "pe", "pt", "ro", "ru", "sh", "es", "se", "ch",
                                "tw", "uk", "uy", "us", "ve"])
        country = country + ".peer"
        c = pycurl.Curl()
        buffer = StringIO()
        c.setopt(c.WRITEFUNCTION, buffer.write)
        c.setopt(c.URL, "http://client.hola.org/client_cgi/zgettunnels?country=" + country)
        c.perform()
        jbuf = json.loads(buffer.getvalue())
        petition = jbuf['ztun'][country][0].split()[1].split(":")
        self.node = petition[0]
        self.port = int(petition[1])
        widg.labelStatus.setText("Using {0}:{1} ({2})".format(petition[0], petition[1], country))
       

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    nav = Navegador(app)
    nav.show()
    nav.refreshPage()
    nav._iloop()
    sys.exit(app.exec_())

11
Noticias Informáticas / El ICANN ha sido hackeado
« on: December 18, 2014, 06:33:52 pm »
La corporación para la asignación de nombres y números (una parte vital del Internet, encargada de mantener los servidores DNS raíz y de asignar direcciones IP a los RIR) ha sido hackeada.

Según explica el propio organismo, sus sistemas internos han sido comprometidos tras un ataque de phishing el pasado noviembre.

ICANN, el organismo internacional sin ánimo de lucro responsable de asignar las direcciones IP y nombres de dominio, acaba de anunciar haber sido víctima de un ataque informático. Según explica el propio organismo, sus sistemas internos han sido comprometidos tras un ataque de phishing el pasado noviembre.

La organización, gestionada desde EE.UU., está investigando cómo se ha producido el ataque. Los primeros indicios apuntan a que varios empleados recibieron a finales de noviembre emails con direcciones que simulaban ser del propio organismo y pidiendo sus credenciales y contraseñas. Resultó ser un email falso, un ataque de phishing en toda regla.

A principios de este mes, responsables de ICANN descubrieron que esos datos comprometidos se utilizaron para acceder diversos servicios de la organización, entre ellos su wiki interna, portales donde se almacena qué personas solicitan dominios, o el servicio Centralized Zone Data System - CZDS. Esta última página guardaba los emails, contraseñas, teléfonos o direcciones postales de miles de usuarios, aunque ICANN asegura que las contraseñas estaban cifradas, por lo que los atacantes no pudieron acceder a ellas. De todas formas, la organización pide a los usuarios que estén dados de alta en esta página, czds.icann.org, que cambien sus contraseñas.

Fuente: es.gizmodo.com

12
Back-end / Distintas funciones de encriptación
« on: October 22, 2014, 10:20:10 pm »
Además de los algoritmos "comunes" (sha1, md5, base64, etc) PHP soporta una grán variedad de otros algoritmos de encriptación (hash). Algunas no serán tan seguras como las antes mencionadas pero pueden ser útiles para algún "desafío"  :P

You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("md2",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("md4",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("sha224",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("sha256",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("sha384",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("sha512",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("ripemd128",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("ripemd160",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("ripemd256",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("ripemd320",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("whirlpool",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("snefru",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("snefru256",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("gost",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("adler32",$texto);
CRC32
Code: (php) You are not allowed to view links. Register or Login
hash("crc32",$texto);
CRC32b
Code: (php) You are not allowed to view links. Register or Login
hash("crc32b",$texto);
Salsa10
Code: (php) You are not allowed to view links. Register or Login
hash("salsa10",$texto);
You are not allowed to view links. Register or Login:
Code: (php) You are not allowed to view links. Register or Login
hash("salsa20",$texto);

13
Otra función que puede llegar a resultar útil. Retorna false si la dirección IP no es válida, IPV6 si es IPv6 o IPv4 si es IPv4:

Code: (php) You are not allowed to view links. Register or Login
function verificarip($ip){
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false){
return "IPV4";
}
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
return false;
}
return "IPV6";
}

14
Cursos, manuales y libros / Mini manual del IRC
« on: October 22, 2014, 12:52:51 pm »
A pedido del público... un manual/lista de comandos útiles para el IRC!

Antes que nada, y sobre todo si es la primera vez que ingresas debes registrarte con NickServ.. Esto evita que alguien se robe tu nick, entre otras cosas.
Para registrarte debes escribir esto:
Code: You are not allowed to view links. Register or Login
/msg NickServ register CONTRASEÑA E-MAILy te llegará un correo de confirmación a tu cuenta de correo con otro comando que debes poner para verificar tu cuenta.

Para ingresar a tu cuenta de NickServ una vez que te has registrado debes poner
Code: You are not allowed to view links. Register or Login
/msg NickServ id CONTRASEÑA(Solo sirve mientras tengas puesto tu nick)

Pero... ¿Que si alguien está usando mi nick?
Code: You are not allowed to view links. Register or Login
/msg NickServ id TUNICK CONTRASEÑA¡Pero yo quiero que ese extraño deje de usar mi nick  >:( !
Code: You are not allowed to view links. Register or Login
/msg NickServ ghost NICK
AYUDA! No me puedo poner mi nick, este aparece como no disponible o alguien lo está usando!
En ese caso, identifícate con
Code: You are not allowed to view links. Register or Login
/msg NickServ id TUNICK CONTRASEÑAY pon
Code: You are not allowed to view links. Register or Login
/msg NickServ regain NICK

Como ocultar tu IP (válido únicamente en Hira):
Poner el siguiente comando SIN MODIFICARLO:
Quote
/msg HostServ TAKE user/$account


Comandos útiles:

Entrar a un canal:
Code: You are not allowed to view links. Register or Login
/join #canalSalir de un canal:
Code: You are not allowed to view links. Register or Login
/part #canal
Cambiar tu nick:
Code: You are not allowed to view links. Register or Login
/nick NUEVO_NICK


Para operadores:

Obtener OP (solo si estás en la lista :P )
Code: You are not allowed to view links. Register or Login
/msg ChanServ op #underc0deQuitarte el OP:
Code: You are not allowed to view links. Register or Login
/mode #underc0de -o TUNICKo mas simple...
Code: You are not allowed to view links. Register or Login
/msg ChanServ deop #underc0de
Echar a alguien del canal:
Code: You are not allowed to view links. Register or Login
/kick #underc0de TIPO_MOLESTO
Invitar a alguien al canal:
Code: You are not allowed to view links. Register or Login
/invite #underc0de NICK
Banear a alguien del canal:
Code: You are not allowed to view links. Register or Login
/mode #underc0de +b MASCARA
    La mascara está compuesta de tres partes: El nick, el "user" y el host o IP del usuario:
    [email protected]/HOST
    Un asterisco significa "cualquier cosa aquí"
    Ejemplos:
    Esta máscara aplica a todos los usuarios cuya IP sea 127.0.0.1: *!*@127.0.0.1
    Esta otra aplica a todos los que tengan de nick "Pantuflas": Pantuflas!*@* (no es recomendable banear con eso ya que el usuario se cambia de nick y entra de vuelta)

    No se olviden de usar el kick después de banear!


Para hira, diferencias entre los privilegios de usuarios:
  • Dueño: Aparece arriba de todo en la lista de usuarios, con un ~ antes de su nick (en kiwiirc) o con un círculo color naranja (en HexChat). Se otorga con el flag +q de ChanServ
  • Protegido o administrador: Aparece después del dueño en la lista de usuarios, con un & antes de su nick o con un círculo amarillo
  • Operador: Ya deberían saber que es ¬¬, aparece en la lista con un @ o con un círculo verde
  • Semi-operador: Aparece debajo de los operadores, con un % o un círculo magenta

La única diferencia entre todos esos privilegios es que el que está mas abajo no puede expulsar al que tiene arriba (Un semi-operador no puede kickear a un operador, etc).


Como otorgar privilegios a los usuarios (Útil únicamente para los dueños de un canal...)
ChanServ tiene un montón de flags, si quieres averiguar mas sobre ellos, escribe /msg ChanServ help flags en el IRC.
Pero, para hacer que la vida sea mas sencilla, ChanServ dispone de unas plantillas para no estar lidiando con la multitud de flags:

  • FOUNDER: Obviamente, el fundador del canal, es prácticamente omnipotente. Solo deberías darsela a gente de mucha confianza
  • SOP (o Super-OP): Un super operador. Otorga el flag de protegido o administrador y permite al usuario otorgar todos los privilegios (Excepto el de fundador)
  • AOP: Un operador regular del canal.
  • HOP: Un semi-operador (o halfop) del canal.
  • VOP: Esta plantilla no otorga ningun privilegio especial, excepto el de tener voz y el de poder entrar cuando está baneado (con /msg ChanServ unban)

Ahora si... Como puedo otorgar estos privilegios?
[/list]
Code: You are not allowed to view links. Register or Login
/msg ChanServ flags <#CANAL> <USUARIO> <privilegios>Por ejemplo:
Code: You are not allowed to view links. Register or Login
/msg ChanServ flags #micanalfavorito Polsaker hop
TIP: Algunos clientes (como el HexChat) permiten usar formas abreviadas de los comandos:
/ns en vez de /msg NickServ
/cs en vez de /msg ChanServ
/mode en vez de /mode #canal
Otro tip
Si van a entrar muy a seguido al IRC les recomiendo descargarse You are not allowed to view links. Register or Login

Iré ampliando la lista a medida que tenga tiempo

15
Back-end / [Source] Verificar si una dirección IP está en una DNSBL
« on: October 22, 2014, 12:21:21 pm »
Esta pequeña función a continuación revisa todas las DNSBL (Listas negras de direcciones IP), y si la IP está en una de esas listas retorna en que entrada de DNSBL está esa IP (Y... si no está en ninguna retorna false).

Esto es muy útil para verificar si los visitantes de tu sitio son una fuente potencial de SPAM o para verificar si se conectan usando TOR.

Code: (php) You are not allowed to view links. Register or Login
function verificar_dnsbl($ip){
    # Array de servidores en los que se probará
    $dnsbl_check=array("dnsbl.dronebl.org", "torexit.dan.me.uk", "http.dnsbl.sorbs.net", "socks.dnsbl.sorbs.net", "misc.dnsbl.sorbs.net", "dnsbl.tornevall.org");
    if($ip){
        $rip=implode('.',array_reverse(explode(".",$ip)));
        foreach($dnsbl_check as $val){
            if(checkdnsrr($rip.'.'.$val.'.','A'))
                return $rip.'.'.$val;
        }
    }
    return false;
}

Pages: [1]