Home >Web Front-end >JS Tutorial >IP of Requesting API

IP of Requesting API

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 17:07:10125browse

IP of Requesting API

Retrieving the Client's IP Address in Express.js

Express.js, a popular Node.js framework, simplifies the process of building web applications. To obtain the client's IP address within an Express application, you can access the req.ip property provided by the framework. However, in scenarios where your application is behind a proxy or load balancer, the client's IP might be stored in the X-Forwarded-For header. To accurately retrieve the client's IP in such cases, consider the following approach:

const express = require('express');
const app = express();

app.use((req, res, next) => {
  const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  console.log(`Client IP: ${clientIp}`);
  next();
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

In this setup, the middleware function captures the client's IP address from the X-Forwarded-For header if present; otherwise, it falls back to req.connection.remoteAddress. This ensures that you obtain the correct IP address regardless of your application's deployment environment.

Enhancing IP Data with IPQuery

Once you've obtained the client's IP address, enriching this data with geolocation and risk assessment information can provide valuable insights. IPQuery is a robust API designed for developers, offering features such as VPN detection, geolocation, and threat intelligence. With support for both IPv4 and IPv6, IPQuery delivers fast lookups with low latency, making it an excellent choice for real-time applications.

Setting Up IPQuery in Your Express Application

To integrate IPQuery into your Express application, follow these steps:

  1. Install the Axios HTTP Client

Axios is a promise-based HTTP client for Node.js, facilitating HTTP requests. Install it using npm:

   npm install axios
  1. Create a Function to Query IPQuery

Develop a function that sends a request to the IPQuery API and processes the response:

   const axios = require('axios');

   async function getIpInfo(ip) {
     try {
       const response = await axios.get(`https://api.ipquery.io/${ip}?format=json`);
       return response.data;
     } catch (error) {
       console.error(`Error fetching IP information: ${error}`);
       return null;
     }
   }
  1. Integrate IPQuery into Your Middleware

Modify your Express middleware to utilize the getIpInfo function:

   app.use(async (req, res, next) => {
     const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
     const ipInfo = await getIpInfo(clientIp);
     if (ipInfo) {
       console.log(`Client IP: ${clientIp}`);
       console.log(`Location: ${ipInfo.location.city}, ${ipInfo.location.country}`);
       console.log(`ISP: ${ipInfo.isp.org}`);
       console.log(`Risk Score: ${ipInfo.risk.risk_score}`);
     }
     next();
   });

This middleware retrieves the client's IP address, fetches detailed information from IPQuery, and logs pertinent details such as location, ISP, and risk score.

Understanding IPQuery's Response Structure

IPQuery provides a comprehensive JSON response containing various data points:

{
  "ip": "1.1.1.1",
  "isp": {
    "asn": "AS13335",
    "org": "Cloudflare, Inc.",
    "isp": "Cloudflare, Inc."
  },
  "location": {
    "country": "Australia",
    "country_code": "AU",
    "city": "Sydney",
    "state": "New South Wales",
    "zipcode": "1001",
    "latitude": -33.854548400186665,
    "longitude": 151.20016200912815,
    "timezone": "Australia/Sydney",
    "localtime": "2024-09-03T22:22:52"
  },
  "risk": {
    "is_mobile": false,
    "is_vpn": false,
    "is_tor": false,
    "is_proxy": false,
    "is_datacenter": true,
    "risk_score": 0
  }
}

Key components include:

  • IP: The queried IP address.
  • ISP: Information about the Internet Service Provider, including ASN, organization, and ISP name.
  • Location: Geographical data such as country, city, state, and coordinates.
  • Risk: Indicators of potential risks, including whether the IP is associated with mobile networks, VPNs, Tor nodes, proxies, data centers, and an overall risk score.

For more detailed information, refer to the IPQuery documentation.

The above is the detailed content of IP of Requesting API. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn