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í.