Skip to content

1024wyl/go-shodan

 
 

Repository files navigation

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}

Manage Organization

  • /org
  • /org/member/{user}

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

About

Shodan API client

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%