Accede a las DNS desde Adobe AIR 2
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í.
