Comunidad de diseño web y desarrollo en internet online

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

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate