Página 1 de 1

API de Shodan y JSON

NotaPublicado: 2014-10-25 10:30 @479
por BigBear
Hola. Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2. #https://developer.shodan.io/api
  3. #http://www.eekboek.nl/dl/ppms/Crypt-SSLeay.ppd
  4. #http://www.bribes.org/perl/ppm/JSON.ppd
  5.  
  6. use LWP::UserAgent;
  7.  
  8. my $nave = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1 });
  9. $nave->agent(
  10. "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
  11. );
  12. $nave->timeout(5);
  13.  
  14. my $api_key = "test";
  15.  
  16. my $code = toma("https://api.shodan.io/shodan/host/5.135.178.142?key=".$api_key);
  17. print $code;
  18.  
  19.  
  20. sub toma {
  21.     return $nave->get( $_[0] )->content;
  22. }
  23.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

El gran tema es cómo leer esto con json porque no encuentro información sobre cómo leer los datos que me devuelve que son algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. {
  2.  "region_name": null,
  3.  "ip": "41.21.249.170",
  4.  "area_code": null,
  5.  "country_name": "South Africa", "hostnames": [],
  6.  "postal_code": null,
  7.  "dma_code": null,
  8.  "country_code": "ZA",
  9.  "data": [
  10.   {
  11.    "product": "Siemens HiPath 3000 telnetd",
  12.    "os": null,
  13.    "timestamp": "2014-01-12T18:25:41.370550",
  14.    "isp": "Vodacom",
  15.    "asn": "AS36994",
  16.    "banner": "\r************************\n\r*  HiPath 3000 Telnet  *\n\r*  ------------------  *\n\r*                      *\n\r*  Adjust the Telnet   *\n\r*  window to the       *\n\r*  visible frame       *\n\r*                      *\n\r************************\n\r",
  17.    "hostnames": [],
  18.    "devicetype": "firewall",
  19.    "location": {
  20.     "city": null,
  21.     "region_name": null,
  22.     "area_code": null,
  23.     "longitude": 24.0,
  24.     "country_code3": "ZAF",
  25.     "country_name": "South Africa",
  26.     "postal_code": null,
  27.     "dma_code": null,
  28.     "country_code": "ZA",
  29.     "latitude": -29.0
  30.    },
  31.    "ip": "41.21.249.170",
  32.    "domains": [],
  33.    "org": "Vodacom",
  34.    "port": 23,
  35.    "opts": {}
  36.   },
  37.   {
  38.    "os": null,
  39.    "timestamp": "2014-01-01T01:28:55.903352",
  40.    "isp": "Vodacom",
  41.    "asn": "AS36994",
  42.    "banner": "SNMP agent for HiPath 3000/5000 V5.x",
  43.    "hostnames": [],
  44.    "location": {
  45.     "city": null,
  46.     "region_name": null,
  47.     "area_code": null,
  48.     "longitude": 24.0,
  49.     "country_code3": "ZAF",
  50.     "country_name": "South Africa",
  51.     "postal_code": null,
  52.     "dma_code": null,
  53.     "country_code": "ZA",
  54.     "latitude": -29.0
  55.    },
  56.    "ip": "41.21.249.170",
  57.    "domains": [],
  58.    "org": "Vodacom",
  59.    "port": 161,
  60.    "opts": {}
  61.   }
  62.  ],
  63.  "city": null,
  64.  "longitude": 24.0,
  65.  "country_code3": "ZAF",
  66.  "latitude": -29.0,
  67.  "os": null,
  68.  "ports": [23, 161]
  69. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

¿ Alguien me puede ayudar ?

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 12:21 @556
por explorer
Pues... de varias formas... por ejemplo, con el módulo JSON. Ejemplo.

Deberías usar más el sistema de búsqueda de estos foros...

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 12:58 @582
por BigBear
Acá lo resolví:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $resultado->{'ip'}."\n";
  2. print $resultado->{'country_name'}."\n";
  3. print $resultado->{'country_code'}."\n";
  4.  
  5. my @encontrados = @{$resultado->{'data'}};
  6. foreach my $encontrado (@encontrados) {
  7. print $encontrado->{"timestamp"}."\n";
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cualquier cosa si se me complica en un futuro cercano, te pregunto :D

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 16:07 @713
por BigBear
Dure poco xD Mira este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @hostnames = $resultado->{'hostnames'};
  2. foreach my $host(@hostnames) {
  3. print $host."\t";
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Me devuelve :

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ARRAY(0x28a21d4)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿ Qué está mal en el código ?

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 21:06 @921
por explorer
El código está bien: estás imprimiendo referencias a arrays. Si quieres acceder al array subyacente, debes desreferenciarlo.

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 21:36 @941
por BigBear
¿Y comó hago eso ? Estuve viendo en este foro sobre el tema y siempre lo hacen con módulos aparte. ¿No hay una forma sin módulos?

Re: API de Shodan y JSON

NotaPublicado: 2014-10-25 22:56 @997
por explorer
Para desreferenciar no necesitas ningún módulo. Te vale con usar sintaxis Perl.

Si $aref contiene una referencia a un array, @{$aref} es el contenido de ese array.

Más información en tu propio ordenador en perldoc perlreftut, y en la Web.

Re: API de Shodan y JSON

NotaPublicado: 2014-10-26 08:34 @398
por BigBear
Gracias por la ayuda, explorer. Ahí me salió:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @hostnames = @{$resultado->{'hostnames'}};
  2. foreach my $host(@hostnames) {
  3. print $host."\t";
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Está bien aplicado, ¿ verdad ?

Re: API de Shodan y JSON

NotaPublicado: 2014-10-26 09:10 @423
por explorer
Si sale el resultado, sí. Pero en el mensaje anterior lo que salía era que $host era la referencia, así que debería ser esa la variable a desreferenciar.