{"id":4616,"date":"2017-02-22T07:00:54","date_gmt":"2017-02-22T06:00:54","guid":{"rendered":"https:\/\/www.fwhibbit.es\/?p=4616"},"modified":"2020-07-19T16:58:41","modified_gmt":"2020-07-19T14:58:41","slug":"python-shodan_cmd","status":"publish","type":"post","link":"https:\/\/fwhibbit.es\/python-shodan_cmd","title":{"rendered":"Python: Shodan_cmd"},"content":{"rendered":"<p>Colaborador: Vasco<\/p>\n<p>Buenos d\u00edas a tod@s, continuando la serie de entradas sobre scripts en Python, en la primera vimos <a href=\"https:\/\/github.com\/Va5c0\/CryptDecrypt.git\">Crypt-Decrypt<\/a> con el que podemos cifrar palabras e identificar o descifrar hashes en varios algoritmos, en esta ocasi\u00f3n le toca el turno a Shodan. Para el que no lo conozca, algo raro&#8230;, se trata de un buscador igual que Google o Bing con la diferencia que no busca webs o documentos sino equipos conectados a internet como pueden ser servidores, impresoras, webcams, routers, etc.<\/p>\n<p>Mediante el script de hoy, <a href=\"https:\/\/github.com\/Va5c0\/Shodan_cmd.git\">Shodan_cmd<\/a>, vamos a poder hacer b\u00fasquedas en <a href=\"https:\/\/www.shodan.io\/\">Shodan<\/a>, obtener informaci\u00f3n sobre un host o rango de hosts, buscar exploits, guardar los resultados en un archivo, guardar solo los campos elegidos de cada resultado, etc. A continuaci\u00f3n la pantalla de ayuda y ejemplos de uso.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/help.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4618 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/help.png\" width=\"639\" height=\"467\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/help.png 639w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/help-300x219.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/help-230x168.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/help-350x256.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/help-480x351.png 480w\" sizes=\"auto, (max-width: 639px) 100vw, 639px\" \/><\/a>Comando Ayuda.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4619 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples.png\" width=\"836\" height=\"609\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples.png 836w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-300x219.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-768x559.png 768w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-830x605.png 830w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-550x400.png 550w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-230x168.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-350x255.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/samples-480x350.png 480w\" sizes=\"auto, (max-width: 836px) 100vw, 836px\" \/><\/a>Ejemplos de uso.<\/p>\n<p style=\"text-align: left;\">En esta ocasi\u00f3n he creado una clase principal que contiene todas las funciones necesarias (llamadas m\u00e9todos) para las distintas opciones. Inicializamos la clase con el m\u00e9todo __init__ pas\u00e1ndole como atributo nuestra API de Shodan.<\/p>\n<p><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/class.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4621 size-medium\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/class-249x300.png\" width=\"249\" height=\"300\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/class-249x300.png 249w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/class-230x277.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/class-350x421.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/class.png 464w\" sizes=\"auto, (max-width: 249px) 100vw, 249px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Empecemos con las distintas opciones disponibles, en primer lugar <strong>-I Information<\/strong>, mediante la cual vamos a obtener info sobre:<\/p>\n<p><strong><em>Protocolos:<\/em><\/strong> muestra una lista de protocolos compatibles con la API de b\u00fasqueda de Shodan.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4623 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols.png\" width=\"861\" height=\"450\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols.png 861w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-300x157.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-768x401.png 768w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-830x434.png 830w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-230x120.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-350x183.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/protocols-480x251.png 480w\" sizes=\"auto, (max-width: 861px) 100vw, 861px\" \/><\/a>Lista de protocolos.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">protocols<\/span>(<span style=\"color: #008000;\">self<\/span>, sfile):\r\n\tresult <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>protocols()\r\n\t<span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">for<\/span> x, y <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> result<span style=\"color: #666666;\">.<\/span>items():\r\n\t\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [-] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> x <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\": \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> y)\r\n\t<span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">'w'<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n\t\t\t<span style=\"color: #008000; font-weight: bold;\">for<\/span> x, y <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> result<span style=\"color: #666666;\">.<\/span>items():\r\n\t\t\t\tf<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [-] <\/span><span style=\"color: #bb6688; font-weight: bold;\">%s<\/span><span style=\"color: #ba2121;\">: <\/span><span style=\"color: #bb6688; font-weight: bold;\">%s<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">%<\/span> (x, y))\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>Todos los m\u00e9todos de una clase reciben como primer par\u00e1metro self con el que se le pasa el objeto. El segundo par\u00e1metro es sfile que se trata de la ruta del archivo donde queremos guardar el resultado (en caso de que sea as\u00ed).<\/p>\n<ul>\n<li><strong>Linea 1:<\/strong> declaramos la variable result y le asignamos como valor el resultado de la consulta hecha con la API, que en este caso nos devuelve un diccionario.<\/li>\n<li><strong>Linea 2:<\/strong> en caso de que sfile sea None (no se ha indicado un archivo para guardar).<\/li>\n<li><strong>Linea 3 &#8211; 4:<\/strong> recorremos los items del diccionario y se muestran por pantalla.<\/li>\n<li><strong>Linea 5:<\/strong> en el caso contrario que sfile no sea None.<\/li>\n<li><strong>Linea 6:<\/strong> abrimos el archivo en modo escritura con &#8216;w&#8217;.<\/li>\n<li><strong>Linea 7 &#8211; 8:<\/strong> recorremos el diccionario igual que antes pero guard\u00e1ndolos en el archivo.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><em><strong>Servicios: <\/strong><\/em>nos devuelve un diccionario con la lista de servicios, y su correspondiente puerto, rastreados por Shodan.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/services.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4625 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/services.png\" width=\"408\" height=\"480\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/services.png 408w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/services-255x300.png 255w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/services-230x271.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/services-350x412.png 350w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/a>Lista de servicios.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">services<\/span>(<span style=\"color: #008000;\">self<\/span>, sfile):\r\n\tresult <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>services()\r\n\t<span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">for<\/span> x, y <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> result<span style=\"color: #666666;\">.<\/span>items():\r\n\t\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [-] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> x <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\": \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> y)\r\n\t<span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">'w'<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n\t\t\t<span style=\"color: #008000; font-weight: bold;\">for<\/span> x, y <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> result<span style=\"color: #666666;\">.<\/span>items():\r\n\t\t\t\tf<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [-] <\/span><span style=\"color: #bb6688; font-weight: bold;\">%s<\/span><span style=\"color: #ba2121;\">: <\/span><span style=\"color: #bb6688; font-weight: bold;\">%s<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">%<\/span> (x, y))\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Al igual que con los protocolos, realizamos la consulta con la API y comprobamos si se ha indicado un archivo para guardar el resultado o en caso contrario mostrarlo por pantalla.<\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>API:<\/strong><\/em> obtendremos informaci\u00f3n sobre la API que estemos utilizando como los cr\u00e9ditos disponibles, si tenemos activado Telnet y HTTPS, etc.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/api.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4626 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/api.png\" width=\"378\" height=\"150\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/api.png 378w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/api-300x119.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/api-230x91.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/api-350x139.png 350w\" sizes=\"auto, (max-width: 378px) 100vw, 378px\" \/><\/a>Informaci\u00f3n API.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">api_info<\/span>(<span style=\"color: #008000;\">self<\/span>):\r\n\tresult <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>info()\r\n\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"API Information:\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n\t<span style=\"color: #008000; font-weight: bold;\">for<\/span> x, y <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> result<span style=\"color: #666666;\">.<\/span>items():\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [-] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(x)<span style=\"color: #666666;\">.<\/span>capitalize() <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\": \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(y))\r\n<\/pre>\n<\/div>\n<p>En esta funci\u00f3n simplemente realizamos la consulta y recorremos el diccionario devuelto para mostrar por pantalla los pares de clave y valor. En la clave usamos capitaliza() para poner la primera letra en may\u00fasculas.<\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Queries:<\/strong><\/em> obtenemos una lista con las consultas compartidas por otros usuarios. Podemos indicar n\u00fameros de p\u00e1gina, ordenar por votos recibidos o fecha y con orden ascendente o descendente.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4627 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries.png\" width=\"659\" height=\"340\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries.png 659w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries-300x155.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries-230x119.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries-350x181.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries-480x248.png 480w\" sizes=\"auto, (max-width: 659px) 100vw, 659px\" \/><\/a>Lista de queries publicadas.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">queries<\/span>(<span style=\"color: #008000;\">self<\/span>, pag, sort, order, sfile):\r\n        res <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>queries(page<span style=\"color: #666666;\">=<\/span>pag, sort<span style=\"color: #666666;\">=<\/span>sort, order<span style=\"color: #666666;\">=<\/span>order)\r\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n            i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n            <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [+]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Title: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'title'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Query: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'query'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Votes: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'votes'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Tags: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'tags'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n                i <span style=\"color: #666666;\">+=<\/span> <span style=\"color: #666666;\">1<\/span>\r\n                <span style=\"color: #008000; font-weight: bold;\">if<\/span> i <span style=\"color: #666666;\">==<\/span> <span style=\"color: #666666;\">3<\/span>:\r\n                    <span style=\"color: #008000;\">raw_input<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">press enter to continue...\"<\/span>)\r\n                    i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">\"a+\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n\\n<\/span><span style=\"color: #ba2121;\"> [+] Title: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'title'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Query: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'query'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Votes: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'votes'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Tags: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'tags'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>En este caso la funci\u00f3n es un poco diferente, le pasamos 3 par\u00e1metros nuevos, adem\u00e1s de los antes vistos, que son pag (n\u00famero de paginas), sort (campo por el que ordenar los resultados: vote o timestamp) y order (orden ascendente o descendente). Analizemos el c\u00f3digo.<\/p>\n<ul>\n<li><strong>Linea 1:<\/strong> hacemos la consulta pas\u00e1ndole los par\u00e1metros. Nos devuelve un diccionario que a su vez contiene varios diccionarios, uno por cada resultado encontrado.<\/li>\n<li><strong>Linea 2:<\/strong> en caso de que no se haya indicado un archivo&#8230;<\/li>\n<li><strong>Linea 3:<\/strong> se declara la variable i con valor 0.<\/li>\n<li><strong>Linea 4:<\/strong> un bucle que recorre cada diccionario contenido en el diccionario matches.<\/li>\n<li><strong>Linea 5 &#8211; 10:<\/strong> obtenemos cada elemento del diccionario con su clave mediante .get, de esta forma si no existiera la clave nos devuelve el valor por omisi\u00f3n establecido Unknown, o en su defecto None.<\/li>\n<li><strong>Linea 11 &#8211; 14:<\/strong> sumamos 1 a la variable i por cada resultado mostrado, si i vale 3, esperamos una pulsaci\u00f3n de la tecla enter, de esta forma muestra los resultados de 3 en 3, por \u00faltimo establecemos nuevamente la variable i con valor 0.<\/li>\n<li><strong>Linea 15 y siguientes:<\/strong> en caso de que se haya indicado un archivo, hacemos exactamente lo mismo de antes pero esta vez escribiendo los resultados en el archivo indicado. Abrimos el archivo con \u00aba+\u00bb por dos motivos, el primero para que no sobrescriba el contenido del archivo sino que escriba a continuaci\u00f3n y segundo para que cree el archivo en caso de no existir.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>El problema es que mediante queries, aunque podemos indicar algunos filtros como el orden, no nos permite indicar una palabra clave a buscar, para ello tenemos la siguiente opci\u00f3n.<\/p>\n<p><em><strong>Queries_search (-Q):<\/strong> <\/em>como he comentado antes, nos permite indicar una palabra clave para buscar las queries relacionadas con la misma.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4630 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search.png\" width=\"460\" height=\"364\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search.png 460w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search-300x237.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search-230x182.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/queries_search-350x277.png 350w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><\/a>Opci\u00f3n Queries_search.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">queries_search<\/span>(<span style=\"color: #008000;\">self<\/span>, query, pag, sfile):\r\n        res <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>queries_search(query, pag)\r\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n            i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n            <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [+]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Title: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'title'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Query: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'query'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Votes: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'votes'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Tags: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'tags'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n                i <span style=\"color: #666666;\">+=<\/span> <span style=\"color: #666666;\">1<\/span>\r\n                <span style=\"color: #008000; font-weight: bold;\">if<\/span> i <span style=\"color: #666666;\">==<\/span> <span style=\"color: #666666;\">3<\/span>:\r\n                    <span style=\"color: #008000;\">raw_input<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">press enter to continue...\"<\/span>)\r\n                    i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">\"a+\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n\\n<\/span><span style=\"color: #ba2121;\"> [+] Title: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'title'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Query: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'query'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Votes: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'votes'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Tags: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'tags'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>La \u00fanica diferencia con la antes vista est\u00e1 en los par\u00e1metros que le pasamos, query (palabra clave), y ya no es necesario pasarle sort y order, por lo dem\u00e1s es el mismo mecanismo, hacemos la consulta con la API y comprobamos si se ha indicado un archivo para guardar el resultado o por el contrario mostrarlo por pantalla.<\/p>\n<p>&nbsp;<\/p>\n<p>Es el turno de <em><strong>Search (-S)<\/strong> <\/em>que nos va permitir realizar una b\u00fasqueda t\u00edpica en Shodan, al igual que lo har\u00edamos desde la web. Consta de dos funciones, search que realiza la consulta con la API y devuelve el resultado, luego esta la funci\u00f3n info que se encarga de procesar el resultado devuelto por search\u00a0 para mostrarlo por pantalla o guardarlo en un archivo seg\u00fan se indique.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/search.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4632 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/search.png\" width=\"586\" height=\"300\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/search.png 586w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/search-300x154.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/search-230x118.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/search-350x179.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/search-480x246.png 480w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/a>Comando Search.<\/p>\n<p>&nbsp;<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">search<\/span>(<span style=\"color: #008000;\">self<\/span>, query, pag):\r\n        <span style=\"color: #008000; font-weight: bold;\">try<\/span>:\r\n            result <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>search(<span style=\"color: #008000;\">str<\/span>(query), pag)\r\n        <span style=\"color: #008000; font-weight: bold;\">except<\/span> <span style=\"color: #d2413a; font-weight: bold;\">Exception<\/span> <span style=\"color: #008000; font-weight: bold;\">as<\/span> e:\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(colors<span style=\"color: #666666;\">.<\/span>FAIL <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [!] ERROR: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(e))\r\n            result <span style=\"color: #666666;\">=<\/span> []\r\n        <span style=\"color: #008000; font-weight: bold;\">return<\/span> result\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Le pasamos dos par\u00e1metros, query qeu equivale al texto que escribimos en la web para buscar y pag que es el n\u00famero de p\u00e1ginas a mostrar (si la API que estamos usando es de una cuenta gratuita, no nos permitir\u00e1 mostrar mas de una p\u00e1gina).<\/p>\n<ul>\n<li><strong>Linea 1:<\/strong> con try controlamos los errores que puedan darse.<\/li>\n<li><strong>Linea 2:<\/strong> hacemos la consulta y asignamos la salida a la variable result.<\/li>\n<li><strong>Linea 3 &#8211; 5:<\/strong> en caso de error, mostramos un mensaje con el mismo y dejamos vac\u00eda la variable result.<\/li>\n<li><strong>Linea 6:<\/strong> devolvemos result.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">info<\/span>(<span style=\"color: #008000;\">self<\/span>, res, sfile):\r\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n            i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n            <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [+]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" IP: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'ip_str'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Product: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'product'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Transport: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'transport'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'port'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" OS: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'os'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Country: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'country_name'<\/span>]))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" City: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'city'<\/span>]))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Latitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'latitude'<\/span>]))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Longitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'longitude'<\/span>]))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Hostnames: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'hostnames'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Data: <\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'data'<\/span>]))\r\n                i <span style=\"color: #666666;\">+=<\/span> <span style=\"color: #666666;\">1<\/span>\r\n                <span style=\"color: #008000; font-weight: bold;\">if<\/span> i <span style=\"color: #666666;\">==<\/span> <span style=\"color: #666666;\">2<\/span>:\r\n                    <span style=\"color: #008000;\">raw_input<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">press enter to continue...\"<\/span>)\r\n                    i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">\"a+\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n\\n<\/span><span style=\"color: #ba2121;\"> [+] IP: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'ip_str'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Product: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'product'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Transport: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'transport'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'port'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] OS: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'os'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Country: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'country_name'<\/span>]))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] City: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'city'<\/span>]))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Latitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'latitude'<\/span>]))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Longitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][<span style=\"color: #ba2121;\">'longitude'<\/span>]))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Hostnames: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'hostnames'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Timestamp: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'timestamp'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Data: <\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'data'<\/span>]))\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Esta funci\u00f3n es la encargada de mostrar o guardar el resultado obtenido con search. Es el mismo sistema qeu se ha visto con las queries, usamos un bucle for para recorrer los diccionarios contenidos en matches y los mostramos o guardamos dependiendo de si se ha indicado un archivo o no.<\/p>\n<p>&nbsp;<\/p>\n<p>En Shodan tambi\u00e9n podemos buscar una ip en concreto para obtener informaci\u00f3n como puertos abiertos y sus banners, geolocalizacion, ciudad, pa\u00eds, etc. Esto mismo es posible realizarlo con el script mediante la opci\u00f3n <strong>-H <\/strong>de host.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/host.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4638 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/host.png\" width=\"448\" height=\"480\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/host.png 448w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/host-280x300.png 280w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/host-230x246.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/host-350x375.png 350w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/a>Informaci\u00f3n de un host.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">host<\/span>(<span style=\"color: #008000;\">self<\/span>, ip, sfile):\r\n        <span style=\"color: #008000; font-weight: bold;\">try<\/span>:\r\n            host <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>host(ip)\r\n            <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [+]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"IP: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'ip_str'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Country: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'country_name'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"City: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'city'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Latitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'latitude'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Longitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'longitude'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Hostnames: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'hostnames'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> x <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> host[<span style=\"color: #ba2121;\">'data'<\/span>]:\r\n                    <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(x[<span style=\"color: #ba2121;\">'port'<\/span>]))\r\n                    <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"Protocol: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> x[<span style=\"color: #ba2121;\">'transport'<\/span>])\r\n                    <span style=\"color: #008000; font-weight: bold;\">print<\/span>(x[<span style=\"color: #ba2121;\">'data'<\/span>])\r\n            <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">'a+'<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n\\n<\/span><span style=\"color: #ba2121;\"> [+] IP: \"<\/span> <span style=\"color: #666666;\">+<\/span> host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'ip_str'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Country: \"<\/span> <span style=\"color: #666666;\">+<\/span> host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'country_name'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] City: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'city'<\/span>, <span style=\"color: #ba2121;\">'Unknown'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Latitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'latitude'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Longitude: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'longitude'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Hostnames: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(host<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'hostnames'<\/span>)))\r\n                    <span style=\"color: #008000; font-weight: bold;\">for<\/span> x <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> host[<span style=\"color: #ba2121;\">'data'<\/span>]:\r\n                        f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(x[<span style=\"color: #ba2121;\">'port'<\/span>]))\r\n                        f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Protocol: \"<\/span> <span style=\"color: #666666;\">+<\/span> x[<span style=\"color: #ba2121;\">'transport'<\/span>] <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span>)\r\n                        f<span style=\"color: #666666;\">.<\/span>write(x[<span style=\"color: #ba2121;\">'data'<\/span>])\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n        <span style=\"color: #008000; font-weight: bold;\">except<\/span> <span style=\"color: #d2413a; font-weight: bold;\">Exception<\/span> <span style=\"color: #008000; font-weight: bold;\">as<\/span> e:\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(colors<span style=\"color: #666666;\">.<\/span>FAIL <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>BOLD <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [!] ERROR: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(e) <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span>)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Es igual que las antes vistas, consulta con la API, comprobar si se ha indicado un archivo y actuar en consecuencia mostrando o guardando la salida.<\/p>\n<p>Es posible buscar un rango de ips mediante el filtro net:192.168.1.0\/24, lo que pasa que escanea toda la red. Pero \u00bfy que pasa si no queremos escanear toda la red y solo un rango mas concreto?, si introducimos net:192.168.1.100\/150 no muestra resultados, por ello he a\u00f1adido otra opci\u00f3n al script para buscar un rango de ips mas espec\u00edfico, lo que hace b\u00e1sicamente es realizar una consulta por cada ip en el rango.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/range.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4639 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/range.png\" width=\"531\" height=\"697\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/range.png 531w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/range-229x300.png 229w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/range-230x302.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/range-350x459.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/range-480x630.png 480w\" sizes=\"auto, (max-width: 531px) 100vw, 531px\" \/><\/a>Rango de ips.<\/p>\n<p style=\"text-align: left;\">El c\u00f3digo para esta opci\u00f3n es muy simple puesto que se utiliza la funci\u00f3n host antes vista en un bucle que la ejecuta una vez por cada ip en el rango indicado.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\">rng <span style=\"color: #666666;\">=<\/span> args<span style=\"color: #666666;\">.<\/span>range\r\nip <span style=\"color: #666666;\">=<\/span> rng<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">'\/'<\/span>)[<span style=\"color: #666666;\">0<\/span>]\r\nbase <span style=\"color: #666666;\">=<\/span> ip<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">'.'<\/span>)[:<span style=\"color: #666666;\">3<\/span>]\r\nrange1 <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">int<\/span>(ip<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">'.'<\/span>)[<span style=\"color: #666666;\">3<\/span>])\r\nrange2 <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">int<\/span>(rng<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">'\/'<\/span>)[<span style=\"color: #666666;\">1<\/span>])\r\n<span style=\"color: #008000; font-weight: bold;\">for<\/span> i <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> <span style=\"color: #008000;\">range<\/span>(range1, range2):\r\n\thost <span style=\"color: #666666;\">=<\/span> <span style=\"color: #ba2121;\">'.'<\/span><span style=\"color: #666666;\">.<\/span>join(base) <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">'.'<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(i)\r\n\tshd<span style=\"color: #666666;\">.<\/span>host(host, args<span style=\"color: #666666;\">.<\/span>output)\r\n\ttime<span style=\"color: #666666;\">.<\/span>sleep(<span style=\"color: #666666;\">1<\/span>)\r\n<\/pre>\n<\/div>\n<ul>\n<li><strong>Linea 1:<\/strong> asignamos a la variable rng el valor del argumento range (ip\/rango).<\/li>\n<li><strong>Linea 2:<\/strong> dividimos con .split el valor de rng para obtener solo la ip.<\/li>\n<li><strong>Linea 3:<\/strong> separamos la ip por los puntos con .split y guardamos en la variable solo los 3 primeros octetos.<\/li>\n<li><strong>Linea 4:<\/strong> guardamos en range1 el \u00faltimo octeto de la ip que va ser el primer n\u00famero del rango a buscar.<\/li>\n<li><strong>Linea 5:<\/strong> obtenemos el \u00faltimo n\u00famero del rango.<\/li>\n<li><strong>Linea 6:<\/strong> bucle for que recorre los n\u00fameros comprendidos entre los dos obtenidos anteriormente.<\/li>\n<li><strong>Linea 7:<\/strong> formamos la ip juntando los 3 primeros octetos y el n\u00famero del rango.<\/li>\n<li><strong>Linea 8:<\/strong> se realiza la consulta mediante la funci\u00f3n host.<\/li>\n<li><strong>Linea 9:<\/strong> con time.sleep hacemos que espere 1 segundo entre consulta y consulta (he tenido algunos fallos en caso de no ponerlo).<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Adem\u00e1s de servidores, impresoras o cualquier otro dispositivo conectado a internet, en Shodan es posible buscar <a href=\"https:\/\/exploits.shodan.io\/\">exploits<\/a>, algo que tambi\u00e9n podemos hacer con la API. Para ello he creado dos funciones, una para hacer la b\u00fasqueda (explts_search) y otra para manipular el resultado (explts_info).<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">explts_search<\/span>(<span style=\"color: #008000;\">self<\/span>, query, pag):\r\n\t<span style=\"color: #008000; font-weight: bold;\">try<\/span>:\r\n\t\tresult <span style=\"color: #666666;\">=<\/span> <span style=\"color: #008000;\">self<\/span><span style=\"color: #666666;\">.<\/span>api<span style=\"color: #666666;\">.<\/span>exploits<span style=\"color: #666666;\">.<\/span>search(query, pag)\r\n\t<span style=\"color: #008000; font-weight: bold;\">except<\/span> <span style=\"color: #d2413a; font-weight: bold;\">Exception<\/span> <span style=\"color: #008000; font-weight: bold;\">as<\/span> e:\r\n\t\t<span style=\"color: #008000; font-weight: bold;\">print<\/span>(colors<span style=\"color: #666666;\">.<\/span>FAIL <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [!] ERROR: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(e))\r\n\t\tresult <span style=\"color: #666666;\">=<\/span> []\r\n\t<span style=\"color: #008000; font-weight: bold;\">return<\/span> result\r\n<\/pre>\n<\/div>\n<p>Le pasamos los par\u00e1metros query y pag, hacemos la consulta con la API y devolvemos la variable result con la respuesta. En caso de error mostramos un mensaje y vaciamos la variable result.<\/p>\n<p>&nbsp;<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">explts_info<\/span>(<span style=\"color: #008000;\">self<\/span>, res, sfile):\r\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n            i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n            <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [+]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" ID: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'_id'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Author: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'author'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Source: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'source'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Platform: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'platform'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Type: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'type'<\/span>))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'port'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" CVE: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'cve'<\/span>)))\r\n                <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"  [-]\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>INFO <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\" Date: \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'date'<\/span>))\r\n                i <span style=\"color: #666666;\">+=<\/span> <span style=\"color: #666666;\">1<\/span>\r\n                <span style=\"color: #008000; font-weight: bold;\">if<\/span> i <span style=\"color: #666666;\">==<\/span> <span style=\"color: #666666;\">3<\/span>:\r\n                    <span style=\"color: #008000;\">raw_input<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">press enter to continue...\"<\/span>)\r\n                    i <span style=\"color: #666666;\">=<\/span> <span style=\"color: #666666;\">0<\/span>\r\n        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">\"w\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n\\n<\/span><span style=\"color: #ba2121;\"> [+] ID: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'_id'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Author: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'author'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Description: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'description'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Source: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'source'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Platform: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'platform'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Type: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'type'<\/span>))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Port: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'port'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] CVE: \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'cve'<\/span>)))\r\n                    f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">  [-] Date: \"<\/span> <span style=\"color: #666666;\">+<\/span> r<span style=\"color: #666666;\">.<\/span>get(<span style=\"color: #ba2121;\">'date'<\/span>))\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\" [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>No hay mucho que decir que no hayamos visto antes, le pasamos el resultado devuelto por la funci\u00f3n anterior, recorremos el diccionario matches y mostramos o guardamos la informaci\u00f3n dependiendo de si se ha indicado un archivo o no.<\/p>\n<p>&nbsp;<\/p>\n<p>Con la \u00faltima opci\u00f3n que vamos a ver podemos mostrar o guardar solo los campos elegidos en el resultado de un search, me explico, si usamos search para hacer una b\u00fasqueda con el script, el resultado nos muestra varios campos como pueden ser ip, port, country, city, etc. Pues mediante esta opci\u00f3n indicamos la informaci\u00f3n que nos interesa para mostrar o guardar. En un principio lo hice con idea de poder crear por ejemplo una lista de ips con ciertos puertos o servicios.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/report.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4642 size-full\" src=\"https:\/\/www.fwhibbit.es\/wp-content\/uploads\/2017\/02\/report.png\" width=\"783\" height=\"369\" srcset=\"https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report.png 783w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report-300x141.png 300w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report-768x362.png 768w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report-230x108.png 230w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report-350x165.png 350w, https:\/\/fwhibbit.es\/wp-content\/uploads\/2017\/02\/report-480x226.png 480w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/a>Opci\u00f3n Report.<\/p>\n<div style=\"background: #f8f8f8; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .6em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #0000ff;\">report<\/span>(<span style=\"color: #008000;\">self<\/span>, res, field, sfile):\r\n        loc <span style=\"color: #666666;\">=<\/span> [<span style=\"color: #ba2121;\">'longitude'<\/span>, <span style=\"color: #ba2121;\">'latitude'<\/span>, <span style=\"color: #ba2121;\">'country_name'<\/span>, <span style=\"color: #ba2121;\">'city'<\/span>]\r\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> sfile <span style=\"color: #aa22ff; font-weight: bold;\">is<\/span> <span style=\"color: #008000;\">None<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #ba2121;\">\",\"<\/span> <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> field:\r\n                    lfield <span style=\"color: #666666;\">=<\/span> field<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">\",\"<\/span>)\r\n                    <span style=\"color: #008000; font-weight: bold;\">for<\/span> f <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> lfield:\r\n                        <span style=\"color: #008000; font-weight: bold;\">if<\/span> f <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> loc:\r\n                            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][f])),\r\n                        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(f))),\r\n                    <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span>)\r\n                <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                    <span style=\"color: #008000; font-weight: bold;\">if<\/span> field <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> loc:\r\n                        <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][field]))\r\n                    <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                        <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(field)))\r\n        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n            <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(sfile, <span style=\"color: #ba2121;\">'w'<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> f:\r\n                <span style=\"color: #008000; font-weight: bold;\">for<\/span> r <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> res[<span style=\"color: #ba2121;\">'matches'<\/span>]:\r\n                    <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #ba2121;\">\",\"<\/span> <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> field:\r\n                        lfield <span style=\"color: #666666;\">=<\/span> field<span style=\"color: #666666;\">.<\/span>split(<span style=\"color: #ba2121;\">\",\"<\/span>)\r\n                        <span style=\"color: #008000; font-weight: bold;\">for<\/span> fl <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> lfield:\r\n                            <span style=\"color: #008000; font-weight: bold;\">if<\/span> fl <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> loc:\r\n                                f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][fl]))\r\n                                f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\",\"<\/span>)\r\n                            <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                                f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(fl)))\r\n                                f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\",\"<\/span>)\r\n                        f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span>)\r\n                    <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                        <span style=\"color: #008000; font-weight: bold;\">if<\/span> field <span style=\"color: #aa22ff; font-weight: bold;\">in<\/span> loc:\r\n                            f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r[<span style=\"color: #ba2121;\">'location'<\/span>][field]))\r\n                        <span style=\"color: #008000; font-weight: bold;\">else<\/span>:\r\n                            f<span style=\"color: #666666;\">.<\/span>write(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> \"<\/span> <span style=\"color: #666666;\">+<\/span> <span style=\"color: #008000;\">str<\/span>(r<span style=\"color: #666666;\">.<\/span>get(field)))\r\n            <span style=\"color: #008000; font-weight: bold;\">print<\/span>(<span style=\"color: #ba2121;\">\"<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\"> [i] \"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>GREEN <span style=\"color: #666666;\">+<\/span> <span style=\"color: #ba2121;\">\"File saved!!<\/span><span style=\"color: #bb6622; font-weight: bold;\">\\n<\/span><span style=\"color: #ba2121;\">\"<\/span> <span style=\"color: #666666;\">+<\/span> colors<span style=\"color: #666666;\">.<\/span>ENDC)\r\n<\/pre>\n<\/div>\n<p>Le pasamos los par\u00e1metros res que es la salida de la consulta hecha con search, field es el campo o campos que nos interesan y sfile en caso de que vayamos a guardar dicha informaci\u00f3n en un archivo.<\/p>\n<ul>\n<li><strong>Linea 1:<\/strong> es una lista con campos que a su vez est\u00e1n contenidos en un diccionario llamado location.<\/li>\n<li><strong>Linea 2:<\/strong> en caso de que no se haya indicado un archivo&#8230;<\/li>\n<li><strong>Linea 3:<\/strong> bucle que recorre cada diccionario contenido en matches.<\/li>\n<li><strong>Linea 4:<\/strong> comprobamos si hay una coma en la variable field, lo que quiere decir que se han indicado mas de un campo.<\/li>\n<li><strong>Linea 5:<\/strong> separamos los campos con .split y los guardamos en la lista lfield.<\/li>\n<li><strong>Linea 6:<\/strong> por cada campo en la lista&#8230;<\/li>\n<li><strong>Linea 7 &#8211; 10:<\/strong> comprueba si se encuentra en la lista loc para mostrarlo de una forma u otra.<\/li>\n<li><strong>Linea 12 &#8211; 16:<\/strong> en caso de haber indicado solo un campo no es necesario usar split, simplemente comprobamos si se encuentra en la lista loc para actuar en consecuencia.<\/li>\n<li><strong>Linea 17&#8230; :<\/strong> esta parte del c\u00f3digo es igual que la anterior con la diferencia que ahora escribimos los datos en el archivo indicado.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Hasta aqu\u00ed la entrada de hoy, recordar que no soy un experto programador y el script tendr\u00e1 algunos fallos o mejor forma de hacer las cosas, se agradece todo tipo de opiniones y mejoras.<\/p>\n<p>Un saludo.<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=fwhibbit_blog\" class=\"twitter-share-button\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Colaborador: Vasco Buenos d\u00edas a tod@s, continuando la serie de entradas sobre scripts en Python, en la primera vimos Crypt-Decrypt con el [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":4718,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[738],"tags":[1118,1119,748,749,1120,1117],"class_list":["post-4616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","tag-api","tag-exploits","tag-programacion","tag-python","tag-querie","tag-shodan"],"_links":{"self":[{"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/posts\/4616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/comments?post=4616"}],"version-history":[{"count":13,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/posts\/4616\/revisions"}],"predecessor-version":[{"id":6765,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/posts\/4616\/revisions\/6765"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/media\/4718"}],"wp:attachment":[{"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/media?parent=4616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/categories?post=4616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwhibbit.es\/wp-json\/wp\/v2\/tags?post=4616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}