Shodan API client
Clone or download
Permalink
Failed to load latest commit information.
.github
shodan feat(*): add ssl-related data to hostdata struct. May 7, 2018
.editorconfig add editorconfig, readme, v1 May 31, 2017
.gitignore chore(*): use codecov + multiple misc build tools. Sep 25, 2017
.travis.yml
CHANGELOG.md
Gopkg.lock
Gopkg.toml chore(*): migrate from glide to dep. Apr 12, 2018
LICENSE chore(*): update license. Jan 10, 2018
README.md
appveyor.yml chore(*): migrate from glide to dep. Apr 12, 2018

README.md

go-shodan

Build Status Build status codecov GoDoc MIT License Go Report Card

To start working with Shodan you have to get your token first. You can do this at https://www.shodan.io.

Installation

Download the package:

go get "gopkg.in/ns3777k/go-shodan.v3"

That's it. You're ready to roll :-) v3 is the latest release and thus has some breaking changing (take a look at changelog).

Older releases can be found under v1 and v2 tags.

master-branch is considered to be unstable.

Usage

Simple example of resolving hostnames:

package main

import (
	"log"
	"context"

	"gopkg.in/ns3777k/go-shodan.v3/shodan"
)

func main() {
	client := shodan.NewEnvClient(nil)
	dns, err := client.GetDNSResolve(context.Background(), []string{"google.com", "ya.ru"})

	if err != nil {
		log.Panic(err)
	} else {
		log.Println(dns["google.com"])
	}
}

Output for above:

2015/09/05 18:50:52 173.194.115.35

Streaming example:

package main

import (
	"log"
	"context"

	"gopkg.in/ns3777k/go-shodan.v3/shodan"
)

func main() {
	client := shodan.NewEnvClient(nil)
	ch := make(chan *shodan.HostData)
	err := client.GetBannersByASN(context.Background(), []string{"3303", "32475"}, ch)
	if err != nil {
		panic(err)
	}

	for {
		banner, ok := <-ch

		if !ok {
			log.Println("channel was closed")
			break
		}

		log.Println(banner.Product)
	}
}

Tips and tricks

Every method accepts context in the first argument so you can easily cancel any request.

You can also use SetDebug(true) to see the curl version of your requests.

Implemented REST API

Search Methods

  • /shodan/host/{ip}
  • /shodan/host/count
  • /shodan/host/search
  • /shodan/host/search/tokens
  • /shodan/ports

On-Demand Scanning

  • /shodan/protocols
  • /shodan/scan
  • /shodan/scan/internet
  • /shodan/scan/{id}

Network Alerts

  • /shodan/alert
  • /shodan/alert/{id}/info
  • /shodan/alert/{id}
  • /shodan/alert/info

Directory Methods

  • /shodan/query
  • /shodan/query/search
  • /shodan/query/tags

Account Methods

  • /account/profile

DNS Methods

  • /dns/resolve
  • /dns/reverse

Bulk Data

  • /shodan/data
  • /shodan/data/{dataset}

Utility Methods

  • /tools/httpheaders
  • /tools/myip

API Status Methods

  • /api-info

Experimental Methods

  • /labs/honeyscore/{ip}

Implemented Streaming API

Data Streams

  • /shodan/banners
  • /shodan/asn/{asn}
  • /shodan/countries/{countries}
  • /shodan/ports/{ports}

Network Alerts

  • /shodan/alert
  • /shodan/alert/{id}

If a method is absent or something doesn't work properly don't hesitate to create an issue.

Links