Entre las novedades de Adobe AIR 2.0 está la posibilidad de obtener el registros de recursos DNS (Domain Name System) gracias a su nueva API DNSResolver, que cuando obtiene los datos solicitados nos dispara un evento DNSResolverEvent. Incluso ahora puedes obtener información de un host IPv4 (32-bits) y IPv6 (64-bits). Aunque existen varios tipos de registros DNS, Adobe AIR implementa sólo 5:
- ARecord: Clase que devuelve información de 32-bits de la dirección IPv4.
- AAAARecord: Clase que devuelve información de 64-bits de la dirección IPv6.
- MXRecord: Clase que proporciona información acerca de un nombre de dominio apuntando a una lista de intercambio de correo (MX).
- PTRRecord: Se le conoce como "registro inverso", funciona a la inversa del registro A, traduce IP a dominio.
- SRVRecord: Permite indicar los servicios que ofrece el dominio.

Como ya explicamos en el tip anterior, debemos usar Flash Builder(FB) o eclipse (con el SDK de flex), sumado a esto tenemos que tener el SDK de AIR 2.0.
Entonces, crearemos una instancia de la clase DNSResolver y un listener que nos permita detectar cuando la información llegue a nuestra aplicación, asimismo usaremos un evento ErrorEvent que nos avise en caso ocurra algún problema.
Código :
private var $__dns:DNSResolver;
private function init():void{
$__dns = new DNSResolver();
$__dns.addEventListener(DNSResolverEvent.LOOKUP, look, false, 0, true);
$__dns.addEventListener(ErrorEvent.ERROR, error, false, 0, true);
}
Para poder hacer funcionar el DNSResolver usamos:
Código :
$__dns.lookup( "www.google.com" , ARecord );
Eso nos dará como respuesta la ip, por lo menos a la que yo accedo: 74.125.159.106. Dicha información es capturada desde nuestro método look
Código :
private function look (e:DNSResolverEvent):void{
var records:Array = new Array();
records = e.resourceRecords;
//
txtResp.text = records[0].address;
}
Con esto ya puedes acceder a la IP del dominio que desees, como el resto de respuestas DNS son casi iguales, las implementé en el código y creo que no es necesario explicar, ya que es muy parecido.
Código :
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()"
width="300" height="290">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import flash.net.dns.AAAARecord;
import flash.net.dns.ARecord;
import flash.net.dns.DNSResolver;
import flash.net.dns.MXRecord;
import flash.net.dns.PTRRecord;
import flash.net.dns.SRVRecord;
private var $__dns:DNSResolver;
private function init():void{
$__dns = new DNSResolver();
$__dns.addEventListener(DNSResolverEvent.LOOKUP, look, false, 0, true);
$__dns.addEventListener(ErrorEvent.ERROR, error, false, 0, true);
}
private function look (e:DNSResolverEvent):void{
var records:Array = new Array();
records = e.resourceRecords;
//
if (records[0] is ARecord)
txtResp.text = "Addr: " + records[0].address;
else if (records[0] is PTRRecord)
txtResp.text = "PTR: " + records[0].ptrdName;
else if (records[0] is MXRecord){
txtResp.text = "Exchange: " + records[0].exchange;
txtResp.text += "\nPreference: " +records[0].preference;
}
else if (records[0] is SRVRecord)
{
var priority:String = "Priority: " + records[0].priority;
var weight:String = "Weight: " + records[0].weight;
var port:String = "Port: " + records[0].port;
var target:String = "Target: " + records[0].target;
txtResp.text += priority + "\n" + weight + "\n" + port + "\n" + target;
}
}
private function error(e:ErrorEvent):void{
txtResp.text = "ERROR: "+e;
}
private function go():void{
var type:String = cbType.selectedItem.label;
switch(type)
{
case "ARecord":
$__dns.lookup(campo.text, ARecord);
break;
case "AAAARecord":
$__dns.lookup(campo.text, AAAARecord);
break;
case "MXRecord":
$__dns.lookup(campo.text, MXRecord);
break;
case "PTRRecord":
$__dns.lookup(campo.text, PTRRecord);
break;
case "SRVRecord":
$__dns.lookup(campo.text, SRVRecord);
break;
}
}
]]>
</fx:Script>
<mx:HBox horizontalCenter="0" paddingTop="10" width="300" horizontalAlign="center">
<s:Label text="Consultar:" paddingTop="5"/>
<s:TextInput id="campo" width="200"/>
</mx:HBox>
<mx:HBox paddingLeft="10" width="300" horizontalAlign="center">
<mx:ComboBox editable="false" id="cbType">
<fx:Array>
<fx:Object label="ARecord" />
<fx:Object label="AAAARecord" />
<fx:Object label="MXRecord" />
<fx:Object label="PTRRecord" />
<fx:Object label="SRVRecord" />
</fx:Array>
</mx:ComboBox>
<s:Button id="btn" click="go()" label="Ver información"/>
</mx:HBox>
<mx:Box paddingLeft="10" width="300" horizontalAlign="center">
<s:TextArea id="txtResp" width="90%" height="200" />
</mx:Box>
</s:WindowedApplication>
Puedes descargar la aplicación aquí.

Por José el 24 de Febrero de 2010
Por onTilt el 24 de Febrero de 2010
una pregunta, si quiero hacer pruebas con AIR 2.0 ¿podré después continuar con AIR 1.5? ¿Como sería?
Gracias
Por Tufik el 25 de Febrero de 2010
Por onTilt el 25 de Febrero de 2010
Gracias.
@onTilt Por otro lado, puedes seguir el tutorial http://www.cristalab.com/tips/como-trabajar-con-flex-4-gumbo-en-flex-builder-3-c67233l/ y así trabajar con distintos SDK.
Por Ezequiel el 28 de Febrero de 2010
http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions
Por eldervaz el 01 de Marzo de 2010
Como le dije a @Zguillez, es más rápido para los autocompletadores, es más fácil de diferencias y por sobre todo: es más cool
el problema Z, es que
1ro. las chicas programadoras son escasa
2do. las que son guapas ya tienen novio
3ro. tu ya estás casado!!!! y yo tengo novia(q está lejitos pero tengo)