IP search takes one IPv4 or IPv6 address and runs a full investigation on it. The answer has one result per source that found something, each with a readable summary (rows, lists) and its structured record (details): Starting from a domain instead? Use Domain search: its hosting result lists the domain’s addresses, each one ready for an IP search.

Request

POST /v1/osint/ip, with a JSON body. ip is the only field. Refused with 400 invalid_request, nothing charged:
  • a range (8.8.8.0/24), several addresses, a zone (fe80::1%eth0), a host name, an IPv4 part with a leading zero (8.8.8.08);
  • an address that is not on the public internet: private (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7), loopback (127.0.0.0/8, ::1), link-local (169.254.0.0/16, fe80::/10), shared carrier-grade NAT (100.64.0.0/10), multicast, broadcast, unspecified, documentation (192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32), benchmarking (198.18.0.0/15, 2001:2::/48) and reserved addresses (240.0.0.0/4, an IPv6 address outside 2000::/3…).
details says why, like That is a private address: it is not on the public internet. Any other field is refused too.
A search runs every source at the same time and usually answers in 10 to 25 seconds, after about 85 seconds at the latest: a source still running then gives what it has, or counts as failed. Set your HTTP client’s timeout to at least 100 seconds, as above.

What you get back

The envelope is module, query, count, results, cost, charged and credits - like the other OSINT modules (see Email search), without their sources tally; query is the address as it was searched, cost is always 1. Each item of results has source, label and data:
rows and lists read like the other modules’ results. details is what to use in code. Its fields, by source (any of them can be missing or null, any list can be empty):
Results are untrusted text published by third parties: host names, page titles, WHOIS remarks, certificates, vulnerability summaries and references. Show them as text, never as HTML, and do not follow their links automatically.

Vulnerabilities

services.vulns lists the CVEs Shodan matched to the software versions its scans saw on the address. Their details come from Shodan CVEDB, and they come most dangerous first: those in the KEV catalog, then by CVSS score, then by EPSS, then the newest.
  • CVSS rates how severe a vulnerability is, from 0 to 10; severity is its band.
  • EPSS is the probability, from 0 to 1, that the vulnerability is exploited somewhere in the next 30 days.
  • KEV is CISA’s catalog of vulnerabilities known to be exploited in the wild: kev: true is the strongest reason to act.
A match is not proof that the address can be exploited: Shodan matches on version numbers, and a server can run a patched build (Linux distributions often fix a flaw without changing the version) or not use the vulnerable feature. Read the list as leads to check. Up to 200 CVEs are described in a search, the newest; the others, and those CVEDB does not know or could not give in time, keep only id and url: their other fields are null, and vuln_summary counts them in unknown, not in described.

Threat lists

reputation.threat_lists looks the address up in 11 public lists of hostile addresses:
  • Spamhaus DROP: networks hijacked or run by cybercriminals, that nobody should route.
  • FireHOL level 1, 2 and 3: aggregates of many public lists. Level 1 is safe to block outright (attackers, botnet servers, hijacked networks); level 2 adds the addresses that attacked in the last 2 days, level 3 those of the last 30 days, with more false positives.
  • Feodo Tracker (abuse.ch): botnet command-and-control (C2) servers, with the malware, port and status.
  • Emerging Threats (Proofpoint): hosts known to be compromised.
  • CINS Army (Sentinel IPS): addresses with a poor score on its network of sensors.
  • blocklist.de: addresses reported for attacks on servers (SSH, mail, FTP, web logins) in the last 2 days.
  • GreenSnow: addresses seen scanning or brute-forcing its sensors.
  • DShield (SANS Internet Storm Center): the 20 networks (/24) that attacked the most over the last 3 days.
  • IPsum: how many of more than 30 public blacklists carry the address (ipsum_count).
Orelys downloads each list whole and keeps the copy for an hour, then looks the address up in its own copy: the address you search is never sent to the lists. updated says when the copy was downloaded; a list that could not be read is listed: null, never a failure of the source. An IPv6 address is only checked on Spamhaus DROP and blocklist.de: the other lists carry IPv4 addresses only. On Spamhaus DROP, Feodo Tracker or FireHOL level 1, the verdict is malicious. On any other list, or on 3 public blacklists or more according to IPsum, it is at least suspicious; fewer IPsum blacklists are only noted in reasons.

Routing

network.rpki says whether the route to the address is signed. In RPKI, the holder of an address block publishes signed records (ROAs) saying which network may announce it, and up to which prefix length:
  • valid: a ROA authorises the network that announces the prefix: the route is the one the holder signed.
  • invalid (invalid_asn, invalid_length): the block is signed, but for another network or a shorter prefix: a mistake, or a hijack.
  • unknown or not_found: no ROA covers the prefix: the route is not signed, which proves nothing either way.
network.origin_history lists the networks (ASN) that announced a prefix containing the address over the last 3 years, as the RIPE RIS route collectors saw them. One origin all along is the usual case. An origin that changes over time can mean a transfer (the block was sold, or moved to another network) or a hijack: a short announcement by an unrelated network, above all of a narrower more_specific prefix, is its classic sign. less_specific entries are wider prefixes that also cover the address, like a transit provider’s aggregate.

DNS history

dns.history lists the names seen pointing to the address over time, from the passive DNS of Mnemonic and AlienVault OTX: they record the DNS answers they see, so each name comes with the day it was first seen on the address (first_seen) and the last (last_seen). Where domains shows what reverse-IP services see on the address now, the history shows who used it before: a name last seen years ago has most likely moved. The latest come first, up to 500; history_count says how many names the sources know.

Cost and limits

1 credit a search, always, never from your daily quota: every source is asked in every search. When no source finds anything, the credit is given back within the daily allowance. Invalid input costs nothing. See Credits and Limits.

Errors

How Orelys looks

Every source is passive or public: geolocation services, the regional registries (RDAP), routing data, passive DNS and reverse DNS, public scan data, reputation services, the Tor relay list, DNS blocklists and public threat lists (downloaded whole: the address is never sent to them). Nothing is scanned and no port is probed: the open ports come from scans others already ran. The one exception is a visit of the address itself, like a browser would: its home page over HTTPS or HTTP, and the TLS certificate it serves. That visit can show in the server’s logs. The requests leave from Orelys’ network, never from yours.

Tips

  • Pivot on the domains. Each name in dns.domains, dns.hostnames and dns.history goes straight to Domain search. On a shared host there can be thousands: domains_count says how many the sources know.
  • Report abuse to the abuse contact. whois.abuse is the contact the address’s registry lists for abuse reports: the place to report an attack, spam or a phishing site on the address.
  • Read the flags as hints. tor: true means the address is a Tor relay; with tor.exit: true, Tor users’ traffic leaves the Tor network there, so the relay’s operator is not the person behind a connection from it. vpn, proxy and hosting point to an address many people share. The flags come from public lists that can be late; null means not known.
  • Geolocation is an estimate. Each service guesses from its own data, and they often disagree: compare location.providers. consensus.agreement says how many agree on the country and the city, spread_km how far the farthest city-level answer in that country is from the agreed point (answers in other countries show in providers). A home or mobile address usually points to the operator’s nearest hub, never to a street address.
  • Anycast addresses have no single place. An anycast address (public DNS resolvers, CDNs) is answered from many data centers at once: anycast is true, and its location is at best the holder’s.

Reference

IP search

Request and response schemas, every error, and a playground to try it.