Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Cómo utilizar la API de búsqueda de DNS de Geekflare en JavaScript (NodeJS)

geekflare-API-en-javascript
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

En este tutorial, demostraré cómo usar la API de Geekflare en NodeJS para verificar los registros DNS de cualquier dominio.

Vamos a construir un script simple que, cuando se ejecuta, imprime el Dirección IP del servidor de búsqueda de Google.

Este script usará el API de búsqueda de DNS de Geekflare.

Para construirlo, vamos a usar tres enfoques, el primero usa el https módulo en NodeJS. El segundo utilizará el node-fetch módulo. Entonces el último usará el axios biblioteca cliente.

¿Qué es la API de Geekflare?

API de Geekflare ofrece conjuntos de API REST para pruebas de rendimiento de sitios web, DNS y métricas de seguridad. Puede hacer cosas como tomar una captura de pantalla, generar archivos PDF, raspar web, escanear puertos y mucho más.

Requisitos previos

Para seguir este tutorial, necesitará comprender JavaScript, incluidas las promesas y la sintaxis de ES6. En cuanto al software, deberías tener NodeJS y un editor de texto como Código de Visual Studio instalado.

Necesitará una cuenta de Geekflare para obtener una clave API para la autenticación al realizar solicitudes. Para conseguir uno, dirígete a la Página de destino de la API y crea una cuenta gratis.

Después de crear la cuenta, debe ser redirigido al panel de control, donde encontrará su clave API.

Geekflare-Panel-2

Construyendo el proyecto

Para comenzar, cree una carpeta de proyecto y ábrala con una terminal de su elección, luego ejecute el siguiente comando.

npm init -y

El comando anterior inicializará el directorio del proyecto como un proyecto de NodeJS.

A continuación, ejecute el siguiente comando, que instalará todas las dependencias de nuestro proyecto

npm install dotenv axios node-fetch

Una vez que las dependencias se hayan instalado correctamente, cree tres scripts en la carpeta raíz del proyecto, a saber vanilla.js, with-axios.js, with-fetch.js y .env para almacenar nuestras variables ambientales.

Al final, la raíz del proyecto debería verse así:

Screenshot-from-2022-10-06-10-27-03

Luego, abre el .env y agregue su clave API de Geekflare con la siguiente línea de código:

API_KEY=<api key>

Reemplaza <API key> con su clave API real.

Vanilla.js

NodeJS tiene un incorporado http y https módulo que podemos usar para hacer solicitudes de clientes. Vamos a utilizar este enfoque primero.

Abra la vainilla.js archivo y agregue las siguientes líneas de código en la parte superior para importar las dependencias del proyecto.

import { request } from "https";
import { config } from "dotenv";

A continuación, vamos a llamar a la config() Función para cargar variables ambientales. Luego vamos a almacenar la clave API y el nombre de host en variables.

config();

const apiKey = process.env.API_KEY;
const host = 'google.com';

Cuando llamamos a la función de solicitud para iniciar una solicitud HTTP en NodeJS, debemos proporcionar opciones para el host y el punto final al que queremos conectarnos, el método HTTP que vamos a utilizar y los encabezados de la solicitud. A continuación, vamos a crear una variable que almacenará estas opciones.

const options = {
  hostname: "api.geekflare.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

Hasta ahora, el código en el vanilla.js archivo tiene este aspecto:

import { request } from "https";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host = 'google.com'

const options = {
  hostname: "api.geekflare.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

Ahora podemos proceder a llamar a la función de solicitud pasando el método de opciones:

const req = request(options, response => {

  // we are going to add response handlers here

});

Como puede ver, la función de solicitud acepta dos argumentos. El primero es el objeto de opciones que definimos anteriormente. La segunda es una función de devolución de llamada que manejará la respuesta del servidor. Dentro de la función de devolución de llamada, podemos agregar detectores de eventos para cuando el servidor envía datos, termina de enviar datos o envía un error.

Para agregar los diferentes controladores de respuesta, agregue las siguientes líneas de código dentro de la función de devolución de llamada:

let data = "";

response.on("data", chunk => {
  data += chunk;
});

response.on("end", () => {
  console.log(JSON.parse(data).data.A);
});

response.on("error", error => {
  console.log(error);
});

La variable de datos es simplemente una cadena donde vamos a almacenar la respuesta JSON del servidor a medida que nos la transmiten.

Para almacenar realmente los datos, vamos a escuchar el objeto de respuesta on data evento. Cada vez que se active este evento, agregaremos la porción de datos enviados por el servidor a la variable de datos.

Luego, para finalmente usar los datos, vamos a escuchar el on end evento en el objeto de respuesta. Este se llamará cuando todos los datos hayan sido enviados desde el servidor y haya finalizado su respuesta.

Por último, escucharemos los errores y los registraremos en la consola si surgen.

Por lo tanto, la llamada a la función de solicitud debería verse así

const req = request(options, response => {

  let data = "";

  response.on("data", chunk => {
    data += chunk;
  });

  response.on("end", () => {
    console.log(JSON.parse(data).data.A);
  });

  response.on("error", error => {
    console.log(error);
  });

});

Por último, necesitamos escribir algunos datos en el cuerpo de la solicitud y finalizar la solicitud.

req.write(JSON.stringify({ url: host, types: ["A"] }));
req.end();

Al final, el archivo debería verse así:

import { request } from "https";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host = 'google.com'

const options = {
  hostname: "api.geekflare.com",
  path: "/dnsrecord",
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
  },
};

const req = request(options, response => {

  let data = "";

  response.on("data", chunk => {
    data += chunk;
  });

  response.on("end", () => {
    console.log(JSON.parse(data).data.A);
  });

  response.on("error", error => {
    console.log(error);
  });

});

req.write(JSON.stringify({ url: host, types: ["A"] }));
req.end();

Ahora, si regresa a la terminal y ejecuta el script usando el node vanilla.js comando, debería obtener el siguiente resultado.

[
  { address: '172.253.122.101', ttl: 247 },
  { address: '172.253.122.113', ttl: 247 },
  { address: '172.253.122.100', ttl: 247 },
  { address: '172.253.122.102', ttl: 247 },
  { address: '172.253.122.138', ttl: 247 },
  { address: '172.253.122.139', ttl: 247 }
]

Eso es todo por la primera parte. La desventaja obvia de usar los módulos HTTP/S incorporados es que es detallado. Bibliotecas cliente como node-fetch te ayudará a crear el mismo programa pero con un código más claro y conciso.

node-fetch

Para crear el mismo script pero con node-fetch, Abierta la with-fetch.js archivo y agregue las siguientes importaciones en la parte superior.

import fetch from "node-fetch";
import { config } from "dotenv";

Luego llame a la función de configuración para configurar variables ambientales y establecer constantes para API_KEY y el host cuyos registros A vamos a solicitar.

config();

const apiKey = process.env.API_KEY;
const host = 'google.com'

A continuación, vamos a definir una función para realizar la llamada a la API. Esta función será asíncrona.

async function request() {
  // The function body will go here
}

Dentro del cuerpo de la función, necesitamos llamar al fetch función que importamos antes de la node-fetch paquete.

const response = await fetch("https://api.geekflare.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
});

Luego, después de la llamada a la fetch función, nos gustaría analizar nuestra respuesta y manejar cualquier error que pueda surgir.

if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }

En este punto, agregue una llamada a la función después de su solicitud.

request();

Su archivo ahora debería verse así:

import fetch from "node-fetch";
import { config } from "dotenv";

config();

const apiKey = process.env.API_KEY;
const host = "google.com";

async function request() {
  const response = await fetch("https://api.geekflare.com/dnsrecord", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": apiKey,
    },
    body: JSON.stringify({ url: host, types: ["A"] }),
  });

  if (response.ok) {
    const { data } = await response.json();

    console.log(data.A);
  } else {
    console.log(response);
  }
}

request();

Y ejecutar ese script con node with-fetch.js debería producir el siguiente resultado:

[
  { address: '172.253.122.113', ttl: 134 },
  { address: '172.253.122.138', ttl: 134 },
  { address: '172.253.122.100', ttl: 134 },
  { address: '172.253.122.139', ttl: 134 },
  { address: '172.253.122.102', ttl: 134 },
  { address: '172.253.122.101', ttl: 134 }
]

Axios

Por último, vamos a utilizar Axios para acceder a la API de Geekflare. Para comenzar, importemos el dotenv y axios paquetes

import axios from "axios";
import { config } from "dotenv";

A continuación, llamemos al config función para configurar variables ambientales. Además, almacenemos el nombre del host y la clave API en constantes separadas.

const host = "google.com";
const key = process.env.API_KEY;

Ahora, almacenemos la URL del extremo de la API en otra constante

const url = "https://api.geekflare.com/dnsrecord";

A continuación, almacenemos los datos que se enviarán como parte del cuerpo de la solicitud en otra constante

const data = { url: host, types: ["A"] };

Luego, lo último que debe hacer antes de enviar la solicitud será almacenar también las opciones meta, como los encabezados, en otra constante.

const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

Por último, hagamos la llamada al post función que importamos anteriormente, pasando en el url, data y options variables que definimos anteriormente como argumentos. Debido a que esto devolverá una promesa, puede usar then para manejar la respuesta cuando finalmente se devuelve.

axios.post(url, data, options).then(({ data }) => {
  console.log(data.data.A);
});

Al final de todo esto, el código en el with-axios el archivo debería verse así:

import axios from "axios";
import { config } from "dotenv";

config();
const host = "google.com";
const key = process.env.API_KEY;

const url = "https://api.geekflare.com/dnsrecord";
const data = { url: host, types: ["A"] };
const options = {
  headers: {
    "Content-Type": "application/json",
    "x-api-key": key,
  },
};

axios.post(url, data, options).then(({ data }) => {
  console.log(data.data.A);
});

Y cuando ejecutas el script usando node with-axios.js, debería mostrar el siguiente resultado:

[
  { address: '142.251.163.138', ttl: 60 },
  { address: '142.251.163.113', ttl: 60 },
  { address: '142.251.163.100', ttl: 60 },
  { address: '142.251.163.101', ttl: 60 },
  { address: '142.251.163.102', ttl: 60 },
  { address: '142.251.163.139', ttl: 60 }
]

Palabras finales

En esta publicación, creamos el guión con tres enfoques diferentes. El objetivo de esto era resaltar lo fácil que es usar la API de Geekflare y cómo podríamos usarla en Javascript, específicamente NodeJS.

Explorar Documentación de la API de Geekflare para más.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder