This tutorial shows you how to detect VPN, proxy, TOR, and bot IP addresses in Node.js using the built-in fetch API (Node.js 18+) and the Focsec API.

You'll also learn how to implement VPN detection as Express.js middleware to protect sensitive routes.

1

Check an IP for VPN or proxy

Make an API request to detect VPN and proxy IPs.

No API key? Get one for free in seconds.

javascript
const API_KEY = 'your-api-key-here';

async function checkIP(ipAddress) {
  const response = await fetch(
    `https://api.focsec.com/v1/ip/${ipAddress}`,
    {
      headers: {
        'Authorization': API_KEY
      }
    }
  );

  return response.json();
}

// Usage
const result = await checkIP('82.40.11.200');
console.log(result);

API Response

The response includes boolean flags for each threat type and geolocation data:

Response
{
  "ip": "82.40.11.200",
  "is_vpn": false,
  "is_proxy": false,
  "is_bot": false,
  "is_tor": false,
  "is_datacenter": false,
  "city": "London",
  "country": "United Kingdom",
  "iso_code": "gb",
  "is_in_european_union": false,
  "flag": "šŸ‡¬šŸ‡§",
  "autonomous_system_number": 5089,
  "autonomous_system_organization": "Virgin Media Limited"
}
2

Detect suspicious IPs

Create a helper function to flag VPN, proxy, TOR, or bot connections:

javascript
function isSuspicious(data) {
  return data.is_vpn || data.is_proxy || data.is_tor || data.is_bot || data.is_datacenter;
}

async function checkAndFlag(ipAddress) {
  const result = await checkIP(ipAddress);

  if (isSuspicious(result)) {
    console.log(`VPN/Proxy detected: ${result.ip}`);
    console.log(`VPN: ${result.is_vpn}, Proxy: ${result.is_proxy}`);
    console.log(`TOR: ${result.is_tor}, Bot: ${result.is_bot}`);
  } else {
    console.log(`Clean IP: ${result.ip}`);
  }

  return result;
}
3

Express.js middleware

Protect checkout and other sensitive routes by blocking VPN and proxy users:

javascript
import express from 'express';

const app = express();
const API_KEY = process.env.FOCSEC_API_KEY;

async function checkIP(ip) {
  const response = await fetch(
    `https://api.focsec.com/v1/ip/${ip}`,
    { headers: { 'Authorization': API_KEY } }
  );
  return response.json();
}

function isSuspicious(data) {
  return data.is_vpn || data.is_proxy || data.is_tor || data.is_bot || data.is_datacenter;
}

// Middleware to detect VPN/proxy users
async function vpnDetectionMiddleware(req, res, next) {
  const clientIP = req.ip || req.connection.remoteAddress;

  try {
    const result = await checkIP(clientIP);
    req.focsec = result;

    // Block VPNs and proxies on sensitive routes
    if (req.path.startsWith('/checkout')) {
      if (isSuspicious(result)) {
        return res.status(403).json({
          error: 'VPN/Proxy detected. Please disable to continue.'
        });
      }
    }

    next();
  } catch (error) {
    // Don't block on API errors
    console.error('VPN check failed:', error.message);
    next();
  }
}

app.use(vpnDetectionMiddleware);

app.get('/checkout', (req, res) => {
  res.json({ message: 'Checkout page', ip_info: req.focsec });
});

app.listen(3000);

Next steps

You've successfully added VPN detection to your Node.js app. See the API Reference for additional response fields and options.

Ready to get started?

Sign up for a free account and start detecting VPNs, proxies, and bots in your application.

Get your API key »