Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

15 de septiembre de 2010

Proyectos para desarrolladores Android en GoogleCode

Ultimamente estoy bastante liado programando cosillas para Android, y el otro día me dio por buscar utilidades para desarrollo y APIs que pudieran venirme bien para hacer el proyecto en el que estoy metido.

Buscando cosas en "Google Code" proyectos libres de donde sacar algo de código he visto muchos proyectos interesante.

Este post no está orientado a programas para el telefono sinó para desarrolladores de software y/o hardware.

Emuladores de Android:


He visto varios emuladores para Android que nos permiten montar nuestras propias maquinar virtuales para que corran Android.

http://code.google.com/p/live-android/

http://code.google.com/p/android-x86/

http://code.google.com/p/android-pc/

Hardware develop:


Estos dos proyectos están enfocados a quien esté pensando hacer su propio cacharro con este SO.

http://code.google.com/p/magik/

http://code.google.com/p/0xdroid/

Ing. Inversa:


Estas utilidades ayudan a realizar un desempaquetado de un .apk para poder se analizado o editado.

http://code.google.com/p/dex-decomplier/

http://code.google.com/p/android-apktool/

Game Develop:


Existen multitud de librerías para crear tus propios juegos.

http://code.google.com/p/simple/

http://code.google.com/p/android-2d-engine/

http://code.google.com/p/candroidengine/

http://code.google.com/p/eadventure-android/ Este es un proyecto de la Universidad Complutense de Madrid llamado <e-Adventure> que parece bastante interesante

http://code.google.com/p/squeak-android-vm/ La primera vez que escuche sobre Squeak fue en la OSWC de extremadura. Este sistema estaba siendo usado en los PCs de 100$.

Librerias:


http://code.google.com/p/zxing/ Librería de procesamiento de códigos de barras.

http://code.google.com/p/libs-for-android/ Librearía con varias utilidades para no "picar" de más.

http://code.google.com/p/psqldroid/ Librería para PostgreSQL.

http://code.google.com/p/android-send-me-logs/ Esta librería te permite que te manden un mail con los logs del sistema si la aplicación falla.

http://code.google.com/p/acra/ Permite enviar los reportes de error a una cuenta de GoogleDocs.

http://code.google.com/p/sociallib/ Librerías para acceder a redes múltiples sociales.

Librearías para eBooks:


Incluso hay cosas para los libros electrónicos.

http://code.google.com/p/edgelibrarylib/

http://code.google.com/p/nookdevs/

Miscelanea:


http://code.google.com/p/androidemulatorcontroller/ Permite mover el (teléfono) emulador (Muy chulo).

http://code.google.com/p/linux-on-android/ Permite tener doble arranque es equipos pensados para correr Android.

Ejemplos para NDK:


http://code.google.com/p/android-ndk-stacktrace-analyzer/

http://code.google.com/p/androidndkgame/

15 de junio de 2010

Listando contactos en Android con "Android.Contact"

Como prometí en el primer post sobre Android hoy voy a esplicar un poco de código de Android.

En este ejemplo podremos ver como se obtiene datos de contactos con una API menor de 5, es decir para los moviles con Android 1.x y actualmente se encuentra deprecated (obsoleta), en general esto quere decir que en un futuro será eliminada. Pero no obtante este no es el caso, ya que esta API continuará activa, pero sólo devolverá datos de la primera cuenta de Google creada.

Para el API 5 se creó la clase "ContactsContract", más reciente, que permite acceder a múltiples cuentas y agregar contactos que tengan un apoyo similar.

Para este ejemplo vamos a usar un "Cursor" para acceder a los datos, la clase "Contacts.Phones" para obtener las constantes para acceder a los datos de la agenda. Por supuesto, para poder leer esto es necesario tener permiso para leer la agenda. (Puedes descargar el codigo desde http://pastebin.com/AMGkjhzz)
@SuppressWarnings("finally")
public static boolean isContact(String num, ContentResolver contentResolver) {
 /**
  * Dado un numero de telefono num, retorna si está o no en la agenda
  * Para poder acceder a estos datos es necesario tener permiso de leectura de contactos.
  * ("android.permission.READ_CONTACTS" en AndroidManifest.xml)
  * @param num Numero de telefono
  * @param context Contexto con permisos de leectura de Contactos
  */
 boolean ret = false;
 try{
  Cursor cur = contentResolver.query(Contacts.Phones.CONTENT_URI, null, null, null, null);
  int index = cur.getColumnIndex(Contacts.Phones.NUMBER);
  while (!ret && cur.moveToNext())
   if (num.equals(cur.getString(index)))
    ret = true;
  cur.close();
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  return ret;
 }
}

Más Información:
http://developer.android.com/guide/appendix/api-levels.html

ContentResolver

9 de mayo de 2010

DNSpython - Sacando información de los DNS con Python

Como ya escribí en el post "Obtención de información de las DNS usando nslookup" desde un servidor DNS se puede obtener mucha información interesante.

El el post pasado para obtener la información usamos la herramienta nslookup. En este caso vamos a implemantar una herramienta que obtenga los datos más interesantes usando la librería DNSPython.

Los datos vamos a mostrar son: CNAME (Nombre canónico) , IPs y sus resoluciones inversas, MX (Registros de correo), NS (Registros de servidores DNS), SOA (marca el inicio de una zona de autoridad), TXT, LOC (localización), MINFO y HINFO (Información del correo y host respectivamente).

Cabe destacar que algunos de estos datos no se encuentran en todos los servidores de nombre.

Además para realizar las consultas vamos a usar en DNS de google situado en 8.8.8.8.

Bueno a continuación el código:

'''
@copyright: GPL v.3
@author: ehooo
@contact: <ehooo|at|rollanwar|dot|net>
'''
import dns.resolver
import dns.reversename
import getopt, sys

if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], "h:", ["host="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -h | --host= ]"
exit(2)
host = None
for o, a in opts:
if o in ("-h", "--host"):
host = a
if host is None:
print sys.argv[0] + " [ -h
| --host= ]"
exit(1)

myresolver = dns.resolver.Resolver()
myresolver.domain = dns.name.Name("google-public-dns-a.google.com")
myresolver.nameserver = ['8.8.8.8']

print "DATOS DEL HOST:", host
try:
answers = myresolver.query(host, 'CNAME')
for rdata in answers:
print "CNAME:", str(rdata.target)
except dns.resolver.NoAnswer:
print "CNAME: No se puede obtener"

try:
answers = myresolver.query(host, 'A')
ip = []
for rdata in answers:
n = dns.reversename.from_address(rdata.address)
try:
answers_inv = myresolver.query(n, 'PTR')
for rdata_inv in answers_inv:
ip += [(rdata.address, str(rdata_inv.target))]
except dns.resolver.NoAnswer:
ip += [(rdata.address, "PTR: Sin respuesta "+str(n))]
except dns.resolver.NXDOMAIN:
ip += [(rdata.address, "PTR: Dominio NX "+str(n))]
print "IPs:", ip
except dns.resolver.NoAnswer:
print "IPs: No se puede obtener"

try:
answers = myresolver.query(host, 'MX')
mx = []
for rdata in answers:
mx += [str(rdata.exchange)]
print "MXs:", mx
except dns.resolver.NoAnswer:
print "MXs: No se puede obtener"

try:
answers = myresolver.query(host, 'NS')
ns = []
for rdata in answers:
ns += [str(rdata.target)]
print "NSs:", ns
except dns.resolver.NoAnswer:
print "NSs: No se puede obtener"

try:
answers = myresolver.query(host, 'SOA')
for rdata in answers:
print "SOA:", str(rdata.mname), str(rdata.rname)
except dns.resolver.NoAnswer:
print "SOA: No se puede obtener"

try:
answers = myresolver.query(host, 'TXT')
for rdata in answers:
print "TXT:", rdata.strings
except dns.resolver.NoAnswer:
print "TXT: No se pueden obtener"

try:
answers = myresolver.query(host, 'LOC')
for rdata in answers:
print "LOC:", "Latitud",rdata.float_latitude,"Logitud", rdata.float_longitude
except dns.resolver.NoAnswer:
print "LOC: No se pueden obtener"

try:
answers = myresolver.query(host, 'MINFO')
for rdata in answers:
print "MINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "MINFO: No se pueden obtener"

try:
answers = myresolver.query(host, 'HINFO')
for rdata in answers:
print "HINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "HINFO: No se pueden obtener"


El resultado sería el siguiente:

DATOS DEL HOST: www.rollanwar.net
CNAME: rollanwar.net.
IPs: [('66.98.184.55', 'hispla.com.')]
MXs: ['rollanwar.net.']
NSs: ['ns1.hispla.com.', 'ns2.hispla.com.']
SOA: ns1.hispla.com. sistema.hispla.com.
TXT: No se pueden obtener
LOC: No se pueden obtener
MINFO: No se pueden obtener
HINFO: No se pueden obtener

Más info:

http://www.iana.org/assignments/dns-parameters
http://www.dnspython.org/

23 de marzo de 2010

WebSearch usando "you get signal"

Recientemente he visto en Pentest.es un programa que dada un IP o lista de IPs busca los dominios que le pertenecen.

Para este objetivo hace uso de el API de Bing. Me ha parecido muy buena idea, y yo he creado una función que realiza lo mismo. Desde aquí invito a que añadan a WebSearch si les gusta.

Esta utilidad hace uso de YouGetSignal para obtener los datos de dominios.
'''
@license: LGPL [http://www.gnu.org/licenses/lgpl.html]
@author: ehooo [ehooo[de]rollanwar[punto]net]
'''
import json, httplib, urllib

def search_you_get_signal(ip):
params = urllib.urlencode({'remoteAddress': ip, 'key': ""})
connection = httplib.HTTPConnection("www.yougetsignal.com")
headers = {"Host":"www.yougetsignal.com",\
"User-Agent":"WebSearch (YouGetSignal version)",\
"Accept":"*/*",\
"X-Requested-With":"XMLHttpRequest",\
"X-Prototype-Version":"1.6.0",\
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}
url = "/tools/web-sites-on-web-server/php/get-web-sites-on-web-server-json-data.php"

connection.request("POST", url, params, headers)
response = connection.getresponse()
lista = []
if response.status is httplib.OK:
json_response = response.read()
json_parse = json.loads(json_response)
if 'domainArray' in json_parse:
for (domain, desc) in json_parse['domainArray']:
lista.append(domain)
else:
print "ERROR:"
print json_parse
else:
print "ERROR:"
print response.getheaders()
return lista

if __name__ == '__main__':
import getopt, sys
try:
opts, args = getopt.getopt(sys.argv[1:], "i:", ["ip="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -i | --ip= ]"
exit(2)

ip = None
for o, a in opts:
if o in ("-i", "--ip"):
ip = a

if ip is None:
print sys.argv[0] + " [ -i | --ip= ]"
exit(1)

list_domain = search_you_get_signal(ip)
for domain in list_domain:
print domain


UPDATE: cambiado el nombre "list" por "lista" by david G.

13 de febrero de 2010

Generación dinámica de imagenes en PHP

PHP es un lenguaje de programación que nos permite generar imágenes de forma dinámica.

La generación de imágenes dinámicas puede ser muy util para hacer Captchas, pero en el ejemplo del código a continuación vamos ha ver varias de las funciones que creo más interesantes para esto.
Header("Content-type: image/jpeg");
//Obtenemos la imagen de fondo
$img_fondo = imagecreatefromjpeg("fondo.jpg");

//Obtenemos la imagen para insertar
$img = imagecreatefromjpeg('img.jpg');
$claridad = 100;
imagecopymerge($img_fondo, $img, 40, 40, 0, 0, imagesx($img), imagesy($img), $claridad);

//Escribiendo en texto plano
$texto = "Esto es un texto sin Fuente";
$orange = imagecolorallocate($img_fondo, 220, 210, 60);
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagestring($img_fondo,5,$mitad,80,$texto,$orange);

//Escribiendo en texto con fuente
$font = './fuente.ttf';
$tam = 20;
$rotado = 0;
$texto = "Text TTF";
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagettftext($img_fondo, $tam, $rotado, $mitad, 120, $orange, $font, $texto);

imagejpeg($img_fondo);
imagedestroy($img_fondo);

Este código dá como resultado algo similar a lo siguiente:
Imagen generada con el codigo anterior

Podeis mirar más información en la web de PHP