shodan.js
This is a asyncronous, vanillaJS library for Shodan meant to be used in the browser.
let client = new ShodanClient("YOUR_API_KEY")
Host Information
Returns all services that have been found on the given host IP.
client.hostInfo("8.8.8.8").then(json => console.log(json))
// include historical banners
client.hostInfo("8.8.8.8", { history: true }).then(json => console.log(json))
// only return the list of ports and the general host information, no banners
client.hostInfo("8.8.8.8", { minify: true }).then(json => console.log(json))
Host Search
Search Shodan using the same query syntax as the website and use facets to get summary information for different properties.
client.hostSearch("mongodb").then(json => console.log(json))
client.hostSearch("nginx").then(json => console.log(json))
client.hostSearch("apache", { after: "1/12/16" }).then(json => console.log(json))
client.hostSearch("ssh", { port: 22, page: 1 }).then(json => console.log(json))
client.hostSearch("ssh", { port: 22, page: 2 }).then(json => console.log(json))
client.hostSearch("ftp", { port: 21, facets: { link: "Ethernet or modem" } }).then(json => console.log(json))
Search Shodan without Results
This method behaves identical to hostSearch
with the only difference that this method does not return any host results, it only returns the total number of results that matched the query and any facet information that was requested. As a result this method does not consume query credits.
client.hostCount("apache").then(json => console.log(json))
client.hostCount("apache", { country: "US" }).then(json => console.log(json))
client.hostCount("apache", { country: "US", state: "MI" }).then(json => console.log(json))
client.hostCount("apache", { country: "US", state: "MI", city: "Detroit" }).then(json => console.log(json))
client.hostCount("apache", { country: 5 }).then(json => console.log(json))
Scan Targets
Use this method to request Shodan to crawl an IP or netblock.
client.scan("8.8.8.8").then(json => console.log(json))
Scan Internet for Port
Use this method to request Shodan to crawl the Internet for a specific port.
This method is restricted to security researchers and companies with a Shodan Data license. To apply for access to this method as a researcher, please email jmath@shodan.io
with information about your project.
⚠️ Access is restricted to prevent abuse.
client.scanInternet({ port: 80, protocol: "http" })
List Community Queries
Use this method to obtain a list of search queries that users have saved in Shodan.
client.communityQueryList().then(json => console.log(json))
client.communityQueryList({ page: 2 }).then(json => console.log(json))
client.communityQueryList({ sort: "votes" }).then(json => console.log(json))
client.communityQueryList({ sort: "votes", page: 2 }).then(json => console.log(json))
client.communityQueryList({ order: "asc" }).then(json => console.log(json))
client.communityQueryList({ order: "desc" }).then(json => console.log(json))
Search Community Queries
Use this method to search the directory of search queries that users have saved in Shodan.
client.communityQuerySearch("the best").then(json => console.log(json))
client.communityQuerySearch("the best", 2).then(json => console.log(json)) // second page
Popular Community Query Tags
Use this method to obtain a list of popular tags for the saved search queries in Shodan.
client.communityPopularQueryTags().then(json => console.log(json)) // get 10 of them, the default
client.communityPopularQueryTags(20).then(json => console.log(json)) // get 20 of them
Protocols
This method returns an object containing all the protocols that can be used when launching an Internet scan.
client.protocols().then(json => console.log(json))
Ports
This method returns a list of port numbers that the Shodan crawlers are looking for.
client.ports().then(json => console.log(json))
Account Info
Returns information about the Shodan account linked to the client's API key.
client.accountInfo().then(json => console.log(json))
DNS Lookup
Look up the IP address for the provided list of hostnames.
client.resolve("google.com").then(json => console.log(json))
Reverse DNS Lookup
Look up the hostnames that have been defined for the given list (comma separated) of IP addresses.
client.reverseLookup("74.125.227.230").then(json => console.log(json))
HTTP Headers
Shows the HTTP headers that your client sends when connecting to a webserver.
client.httpHeaders().then(json => console.log(json))
My IP Address
Get your current IP address as seen from the Internet.
client.myIP().then(json => console.log(json))
Honeypot Score
Calculates a honeypot probability score ranging from 0 (not a honeypot) to 1.0 (is a honeypot).
client.honeyScore("8.8.8.8").then(json => console.log(json))
API Plan Information
Returns information about the API plan belonging to the given API key.
client.planInfo().then(json => console.log(json))
Streaming Banners
This stream provides 1-5% of the data that Shodan collects. Use this stream if you need access to everything and/ or want to store your own Shodan database locally. If you only care about specific ports, please use the Ports stream.
client.bannerStream(json => console.log(json))
Banners Filtered by Ports
Only returns banner data for the list of specified ports. This stream provides a filtered, bandwidth-saving view of the Banners stream in case you are only interested in a specific list of ports.
client.bannerStreamByPorts("22,80", json => console.log(json))
Streaming Banners, filtered by ASN(s)
This stream provides a filtered, bandwidth-saving view of the Banners stream in case you are only interested in devices located in certain ASNs.
client.bannerStreamByASNs("3303,32475", json => console.log(json))
Streaming Banners, filtered by one or more countires
This stream provides a filtered, bandwidth-saving view of the Banners stream in case you are only interested in devices located in certain countries.
client.bannerStreamByCountries("DE,US,JP", json => console.log(json))
Streaming Banners, filtered by network alerts
Subscribe to banners discovered on all IP ranges described in the network alerts.
client.alertStream(json => console.log(json))
Streaming Banners, filtered by alert ID
Subscribe to banners discovered on all IP ranges described in the network alerts.
client.alertStreamByID("HKVGAIRWD79Z7W2T", json => console.log(json))
Search Exploits
Search across a variety of data sources for exploits and use facets to get summary information.
client.searchExploits("python").then(json => console.log(json))
client.searchExploits({ port: 22 }).then(json => console.log(json))
client.searchExploits("ssh", { port: 22 }).then(json => console.log(json))
client.searchExploits("windows", { type: "shellcode" }).then(json => console.log(json))
client.searchExploits({ osvdb: "100007" }).then(json => console.log(json))
Count Exploits
This method behaves identical to the searchExploits
method with the difference that it doesn't return any results, just the total.
client.countExploits("python").then(json => console.log(json))
client.countExploits({ port: 22 }).then(json => console.log(json))
client.countExploits("ssh", { port: 22 }).then(json => console.log(json))
client.countExploits("windows", { type: "shellcode" }).then(json => console.log(json))
client.countExploits({ osvdb: "100007" }).then(json => console.log(json))