Tools / Guides / Investigate a suspicious IP

How to investigate a suspicious IP address

A practical order of checks for any IP in an alert: who owns it, what it is used for, whether it attacks other people, and when the answer is block, monitor or close. Uses free sources only.

Updated 2026-11-03 · 9 min read

An alert gives you an IP and nothing else. Maybe it's the source of a failed RDP logon, a destination your EDR flagged, or the first public hop in a phishing email. To investigate a suspicious IP address properly you need to answer four questions, in this order: who owns it, what it normally does, whether it attacks other people, and whether it actually touched anything of yours. The free sources below cover all four.

The examples use 203.0.113.45, which is a documentation address. Swap in your own.

Step 1: Is it even a public IP?

It sounds obvious, but a surprising number of tickets get escalated for addresses that never left the building. Rule these out before any lookup:

RangeWhat it is
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16Private (RFC 1918). It's one of your hosts, or a client's. Look it up in your CMDB or DHCP logs, not on the internet.
100.64.0.0/10Carrier-grade NAT. Common on mobile and some home ISPs, and on Tailscale. Not unique, so threat intel on it means nothing.
169.254.0.0/16Link-local. A host that failed to get an address from DHCP.
127.0.0.0/8Loopback: the machine talking to itself.

For a private IP, the investigation moves inside: which device had that address at that time, and who was using it.

Step 2: Who owns the IP? (WHOIS, ASN and hosting)

Ownership tells you more than any reputation score. Check the ASN and organisation with ipinfo.io or an RDAP lookup at rdap.org. You're looking for one of these:

My rule of thumb: hosting provider plus authentication attempt is enough to block while you keep digging. Residential ISP plus authentication attempt needs more context before you act, because it might be the user.

Step 3: Does it attack other people? (reputation)

Now check whether others have seen it misbehave. Use more than one source; each sees a different slice of the internet.

SourceWhat it's good forWatch out for
AbuseIPDBCommunity abuse reports: brute force, scanning, spam. The confidence score and the report categories are both useful.A high score on a shared VPN or CGNAT address can be other users' fault.
GreyNoiseTells you if the IP is mass-scanning the whole internet, and whether it's a known benign scanner (Shodan, Censys, research projects)."Noise" means untargeted, not harmless. A scanner that found your open RDP is still a problem.
VirusTotalVendor detections, plus the Relations tab: domains that resolved to the IP and files that contacted it.Zero detections is common for fresh attacker infrastructure. Absence of evidence isn't a clean bill of health.
ShodanWhat the host exposes: open ports, banners, TLS certificates. A box with RDP, an outdated web panel and a self-signed cert looks very different from a CDN edge.Data can be days or weeks old.
ThreatFox and URLhausKnown malware C2 servers and malware download hosts. A hit here is high-confidence.Coverage is narrower, so no hit doesn't clear it.

Don't let one source decide. A clean VirusTotal result with 400 AbuseIPDB reports for SSH brute force in the past week is a bad IP. A scary AbuseIPDB score on a Cloudflare or Google address is almost always a false lead: the reports are about sites behind the shared address, not the address itself.

Step 4: Did it touch anything of yours?

Reputation tells you about the IP. Your own logs tell you whether it matters. Search for the IP across the last 7 to 30 days:

In Microsoft Sentinel, one query covers several of these:

let ip = "203.0.113.45";
union isfuzzy=true
  (SigninLogs | where IPAddress == ip | project TimeGenerated, Source="Entra sign-in", Detail=strcat(UserPrincipalName, " ", ResultType)),
  (SecurityEvent | where IpAddress == ip | project TimeGenerated, Source="Windows", Detail=strcat(EventID, " ", TargetAccount)),
  (CommonSecurityLog | where SourceIP == ip or DestinationIP == ip | project TimeGenerated, Source="Firewall", Detail=strcat(DeviceAction, " ", DestinationPort))
| order by TimeGenerated desc

Block, monitor or close?

What you foundDecision
Private, CGNAT or your own known infrastructureClose the external angle; investigate the internal host if the behaviour is odd.
Known benign scanner (GreyNoise "benign"), traffic droppedClose. Note it so the next analyst doesn't redo the work.
Hosting or VPN IP with failed logons, no successBlock at the edge, check why the service is exposed, close.
Any successful authentication from a suspicious IPEscalate. Reset credentials, revoke sessions, review what the session did.
Internal host talking to a known C2 addressEscalate immediately. Isolate the host and preserve evidence.
Shared CDN or cloud IP with mixed reputationDon't block the IP. Investigate the domain or URL instead.

Whatever you decide, write down the sources you checked and what each one said. "Blocked, AbuseIPDB 100%" won't help the next person. "Hetzner VPS, 312 AbuseIPDB reports for RDP brute force, GreyNoise malicious scanner, 48 failed logons on RDP gateway, no success" will. If you want to read the logon side more closely, see Event ID 4625: failed logons explained and, for cloud sign-ins, Microsoft 365 impossible travel.

FAQ

Can I find the person behind an IP address?

Not with public sources. WHOIS gives you the network owner, such as an ISP or hosting company, not the subscriber. Only the provider can map an IP to a customer, and they will only do that for law enforcement or through their abuse process.

How accurate is IP geolocation?

Country is usually right; city often isn't, especially for mobile networks and VPNs. Use location as one signal, never as proof, and be careful with impossible travel alerts built only on geolocation.

Should I block every IP with a bad reputation?

No. Blocking shared CDN, cloud or CGNAT addresses can cut off legitimate services and customers. Block hosting and VPS addresses that attacked you; for shared infrastructure, block the domain or URL instead.

What does it mean if an IP has no reports anywhere?

Either it's genuinely benign, or it's new attacker infrastructure that nobody has reported yet. Fall back on ownership and on your own logs: a fresh VPS that just logged in successfully as your finance user is an incident whatever the reputation sites say.