go-shodan
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
DNS Methods
- /dns/resolve
- /dns/reverse
Bulk Data
- /shodan/data
- /shodan/data/{dataset}
Utility Methods
- /tools/httpheaders
- /tools/myip
API Status Methods
Experimental Methods
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