README ¶
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.v4"
That's it. You're ready to roll :-) v4 is the latest release and thus has some breaking changing (take a look at changelog).
Older releases can be found under tags.
master
-branch is considered to be unstable.
Usage
Simple example of resolving hostnames:
package main
import (
"log"
"context"
"gopkg.in/ns3777k/go-shodan.v4/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.v4/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
- /shodan/alert/triggers
- /shodan/alert/{id}/trigger/{trigger}
- /shodan/alert/{id}/trigger/{trigger}/ignore/{service}
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
Click to show internal directories.
Click to hide internal directories.