Skip to content

Latest commit

 

History

History
175 lines (133 loc) · 3.79 KB

README.md

File metadata and controls

175 lines (133 loc) · 3.79 KB

go-shodan

msisdn CI 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.

Usage

The import path depends on whether you use go modules:

import "github.com/ns3777k/go-shodan/v4/shodan"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
import "github.com/ns3777k/go-shodan/shodan" // with go modules disabled

Simple example of resolving hostnames:

package main

import (
	"log"
	"context"

	"github.com/ns3777k/go-shodan/v4/shodan" // go modules required
)

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"

	"github.com/ns3777k/go-shodan/v4/shodan" // go modules required
)

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 actual request data (method, url, body).

Implemented REST API

Search Methods

  • /shodan/host/{ip}
  • /shodan/host/count
  • /shodan/host/search
  • /shodan/host/search/facets
  • /shodan/host/search/filters
  • /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
  • /shodan/alert/triggers
  • /shodan/alert/{id}/notifier/{notifier_id}
  • /shodan/alert/{id}/trigger/{trigger}
  • /shodan/alert/{id}/trigger/{trigger}/ignore/{service}

Notifiers

  • /notifier
  • /notifier/provider
  • /notifier/{id}

Directory Methods

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

Account Methods

  • /account/profile

DNS Methods

  • /dns/resolve
  • /dns/reverse
  • /dns/domain/{domain}

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}

Exploits

  • /search
  • /count

Implemented Streaming API

Data Streams

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

Network Alerts

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

Implemented GeoNet API

  • /api/ping/{ip}
  • /api/geoping/{ip}
  • /api/dns/{hostname}
  • /api/geodns/{hostname}

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

Links