Hướng dẫn nodejs get ip location - nodejs lấy vị trí ip

Lưu ý rằng đôi khi bạn có thể nhận được nhiều hơn một địa chỉ IP trong req.headers['x-forwarded-for']. Ngoài ra, một tiêu đề



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

0 sẽ không luôn luôn được đặt có thể gây ra lỗi.

Trong đó giá trị là một danh sách phân tách không gian dấu phẩy+của các địa chỉ IP, phần nhất bên trái là máy khách gốc và mỗi proxy liên tiếp vượt qua yêu cầu thêm địa chỉ IP nơi nhận được yêu cầu. Trong ví dụ này, yêu cầu được chuyển qua



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

1,


const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

2, và sau đó là


const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

3.


const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

3 xuất hiện dưới dạng địa chỉ từ xa của yêu cầu.

Đây là giải pháp được đề xuất bởi Arnav Gupta với một bản sửa lỗi Martin đã đề xuất dưới đây trong các bình luận cho các trường hợp khi



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

0 không được đặt:

Trong bức ảnh này, chúng tôi sẽ xem xét cách lấy địa chỉ IP trong



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

6. Chúng ta có thể đạt được điều này bằng cách sử dụng ứng dụng máy chủ


const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

6 điển hình và máy chủ Express.

Phương pháp này là một thuộc tính của thuộc tính ổ cắm của đối tượng yêu cầu.

Chúng tôi có thể đạt được điều này bằng cách sử dụng



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

8 hoặc


const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

9 nếu bạn chạy máy chủ


const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

0.

Từ mã trên, chúng tôi đã tạo một máy chủ giao thức chuyển HTTPHYPERTEXT gửi phản hồi có chứa địa chỉ IP của máy khách khi máy khách truy cập máy chủ trên



const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

1.

Hãy xem mã dưới đây.

Mã trên tương tự như mã trước. Sự khác biệt duy nhất là cái sau được tạo bằng khung



const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

0 của


const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

3.

Cách dễ dàng để có được địa chỉ IP của máy khách là bằng cách lấy thuộc tính



const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

4 của đối tượng yêu cầu,


const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

5.

Nhận địa chỉ IP của máy khách bằng cách sử dụng Express

Nếu bạn đang chạy Express trên máy chủ Node JS của mình, rất dễ dàng để có được địa chỉ IP của yêu cầu. Express là một khung nhẹ và mạnh mẽ cho Node JS, cung cấp một bộ công cụ cho các ứng dụng web nhanh chóng và dễ dàng.

Đối tượng yêu cầu rõ ràng

Express kết thúc yêu cầu HTTP từ máy khách trong một đối tượng yêu cầu rõ ràng, mở rộng yêu cầu HTTP cơ bản với các phương thức tiện dụng mà bạn có thể sử dụng để truy cập các thuộc tính của yêu cầu trong ứng dụng nút của bạn.

Đối tượng yêu cầu thường được viết là REQ và đây là đối số đầu tiên cho bất kỳ phương thức nào được tìm thấy trên giao diện ứng dụng Express. Có hai cách chính để kéo địa chỉ IP từ đối tượng yêu cầu: Sử dụng Request.Connection và sử dụng Request.header.

Đối tượng phản hồi

Ngoài đối tượng yêu cầu, Express còn cung cấp một đối tượng phản hồi làm đối số thứ hai cho giao diện ứng dụng. Đối tượng phản hồi được sử dụng để gửi thông tin lại cho máy khách. Trong các ví dụ của chúng tôi, chúng tôi sẽ sử dụng điều này để gửi lại địa chỉ IP của khách hàng cho trình duyệt để chúng tôi có thể hiển thị nó.

Nhận địa chỉ IP của máy khách bằng cách sử dụng yêu cầu.socket

Một thuộc tính trên đối tượng yêu cầu là đối tượng ổ cắm, cho phép bạn nhận thông tin về kết nối của yêu cầu. Địa chỉ IP của yêu cầu là một thuộc tính có thể dễ dàng truy cập trên đối tượng này. Đối tượng ổ cắm được sử dụng để được gọi là kết nối, nhưng kết nối đã bị phản đối.

Tạo một tệp có tên Server.js, Nhập Express và sử dụng nó để quay một ứng dụng cơ bản với một tuyến đường duy nhất tại '/'.

Bên trong tuyến đường này, truy cập đối tượng Request.Connection bằng cách rút nó ra khỏi đối tượng yêu cầu đến.



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
    const ipAddress = req.socket.remoteAddress;
    res.send(ipAddress);
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

Mở trình duyệt của bạn tại https: // localhost: 3000 và bạn sẽ thấy một dòng văn bản với địa chỉ IP của khách hàng. Trong trường hợp này, máy khách là thiết bị của bạn, vì vậy địa chỉ bạn sẽ thấy sẽ là địa chỉ loopback.

Nếu thuộc tính ổ cắm Express gửi lại phiên bản IPv6 của địa chỉ Loopback, bạn sẽ thấy ':: 1'. Bạn có thể nghĩ về điều này giống như '127.0.0.1', đây là phiên bản IPv4 của địa chỉ loopback

Hướng dẫn nodejs get ip location - nodejs lấy vị trí ip

Nhận địa chỉ IP khách bằng cách sử dụng Request.header

Nếu yêu cầu được thực hiện phía sau một máy chủ proxy, địa chỉ IP mà bạn nhận được từ đối tượng ổ cắm có thể không phải là địa chỉ IP của máy khách gốc. Thay vào đó, nó sẽ là địa chỉ IP cuối cùng trong chuỗi được chuyển tiếp. Để có được địa chỉ IP máy khách gốc và các địa chỉ proxy khác, bạn sẽ cần xem các tiêu đề của đối tượng yêu cầu.

Bất kỳ yêu cầu nào được gửi trên web đều chứa HTTP HeaderProperty với thông tin meta về yêu cầu. Đối tượng tiêu đề yêu cầu chứa các trường xử lý xác thực, cho máy chủ biết loại cơ thể nào yêu cầu (ví dụ: JSON vs Multipart) và cũng cho biết thông tin máy chủ về máy khách rằng yêu cầu đã được gửi từ.

Tiêu đề xử lý thông tin địa chỉ IP là trường X-Foreded. Có một số cách mà trường này có thể được đặt tên theo yêu cầu. Nó có thể hiển thị dưới dạng X-Chuyển đổi, X-Quan hệ, chuyển tiếp, hoặc chỉ được chuyển tiếp.

Thông thường, cách tốt nhất để truy cập vào trường là sử dụng X được chuyển tiếp cho.

Trong tệp máy chủ của bạn, hãy xóa mọi thứ bên trong yêu cầu ứng dụng và thay thế nó bằng giải pháp sau:



const express = require('express');
const app = express();
  
app.get('/',function(req, res) {
  
    const ipAddresses = req.header('x-forwarded-for');
    res.send(ipAddresses);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

Xin lưu ý rằng X-Quan kết-for có thể trả về nhiều địa chỉ IP, theo định dạng của máy khách IP, proxy 1 IP, proxy 2 IP. Trong trường hợp này, chúng tôi chỉ quan tâm đến người đầu tiên.

Giải pháp này chỉ hoạt động nếu yêu cầu của khách hàng đến từ một máy chủ proxy và được chuyển tiếp. Bạn không nên dựa vào đây là giải pháp duy nhất bởi vì nếu yêu cầu không đến từ máy chủ proxy, thì X được chuyển tiếp cho trường sẽ không được xác định. Giữ giải pháp yêu cầu.socket như một dự phòng.



const express = require('express');
const app = express();
  
app.get('/',function(req, response) {
  
  const ipAddress = req.header('x-forwarded-for') ||  			
						req.socket.remoteAddress;
  res.send(ipAddress);
  
});
  
app.listen(3000, () => console.log(`Server is listening on port 3000`))

Nhận địa chỉ IP khách bằng cách sử dụng yêu cầu-IP

Bạn có thể cài đặt gói NPM có tên Request-IP để tra cứu địa chỉ IP của máy khách trong Node.js. Gói này là phần mềm trung gian nằm giữa một yêu cầu đến và phần còn lại của ứng dụng của bạn.

Middleware sửa đổi một đối tượng yêu cầu hoặc thực hiện một số chức năng tác dụng phụ bằng cách sử dụng đối tượng yêu cầu, sau đó gửi đối tượng theo liên kết tiếp theo trong chuỗi phần mềm trung gian hoặc đến chính ứng dụng.

Bắt đầu bằng cách cài đặt gói bằng dòng lệnh.



$ npm install --save ip-request

Sau đó nhập gói vào tệp máy chủ của bạn và thay thế giải pháp hiện tại của bạn bằng chức năng GetClientIP của gói.



const express = require('express')
const app = express()
const port = 3000
const requestIP = require('request-ip');

app.get('/', (req, res) => {
    const ipAddress = requestIP.getClientIp(req);
    res.send(ipAddress)
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Quay trở lại https: // localhost: 3000 Để xem địa chỉ IP của bạn trong trình duyệt (hãy nhớ, nếu bạn đang sử dụng IPv6, bạn sẽ thấy :: 1 và nếu bạn đang sử dụng IPv4, bạn sẽ thấy 127.0.0.1.)

Nhận địa chỉ IP bằng IP

Trong cả hai ví dụ này, chúng tôi đã hiển thị địa chỉ IP cục bộ vì đó là nơi yêu cầu bắt nguồn từ. Nhưng điều gì sẽ xảy ra nếu chúng tôi muốn lấy địa chỉ IP cục bộ của thiết bị trong khi nó đang được sản xuất và chúng tôi không đưa ra yêu cầu Loopback?

Trong trường hợp đó, chúng tôi có thể sử dụng gói NPM tiện dụng có tên IP. Gói này hoạt động tương tự như Request-IP. Nó cho phép bạn truy cập địa chỉ IP cục bộ của mình và cũng cung cấp nhiều phương thức hữu ích để xác thực địa chỉ IP, so sánh địa chỉ IP và thao tác địa chỉ IP.

Cài đặt nó theo cùng một cách

Nhập nó vào tệp của bạn và sử dụng nó trong chức năng app.get của bạn.



const express = require('express')
const app = express()
const port = 3000
const IP = require('ip');

app.get('/', (req, res) => {
    const ipAddress = IP.address();
    res.send(ipAddress)
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Truy cập trình duyệt để xem địa chỉ IP máy khách của bạn. Lưu ý làm thế nào nó không còn là một địa chỉ loopback. Đây là địa chỉ IP máy khách thực tế trên mạng hiện tại. Nó rất có thể sẽ là một địa chỉ 192.168.xxx.x.

Tìm một vị trí người dùng bằng cách sử dụng API định vị địa lý IP của Tóm tắt

Khi bạn có địa chỉ IP của máy khách, bạn có thể sử dụng địa chỉ IP đó để xác định vị trí địa lý của người dùng.

AbstractApi là API REST đơn giản chấp nhận yêu cầu với chuỗi IP và trả về phản hồi JSON với thông tin về địa chỉ IP đó.

Khi chúng tôi đã trích xuất địa chỉ IP yêu cầu của chúng tôi từ yêu cầu HTTP đến, chúng tôi có thể gửi nó đến điểm cuối trừu tượng để có được thông tin định vị địa lý.

Nhận khóa API

Đầu tiên, bạn sẽ cần có khóa API bằng cách truy cập trang chủ API định vị địa lý AbstractorApi, nhấp vào "Bắt đầu" và đăng ký tài khoản miễn phí. Khi bạn hạ cánh trên trang chủ API, bạn sẽ thấy khóa API của mình.

Cài đặt Axios

Cách dễ nhất để gửi yêu cầu HTTP trong Node là cài đặt Axios, ứng dụng khách yêu cầu HTTP của bên thứ ba.



$ npm install axios --save

Gửi IP yêu cầu đến API

Tạo một chức năng mới gọi là sendapirequest. Hàm sẽ lấy chuỗi địa chỉ IP làm đối số duy nhất của nó. Quay trở lại Tóm tắt và sao chép URL điểm cuối và khóa API của bạn.



const express = require('express')
const app = express()
const port = 3000
const IP = require('ip');
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
const URL = 'https://ipgeolocation.abstractapi.com/v1/?api_key=' + API_KEY;

const sendAPIRequest = async (ipAddress) => {
    const apiResponse = await axios.get(URL + "&ip_address=" + ipAddress);
    return apiResponse.data;
}

app.get('/', async (req, res) => {
    const ipAddress = IP.address();
    const ipAddressInformation = await sendAPIRequest(ipAddress);
    res.send(ipAddressInformation)
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Đừng quên trao đổi khóa API của bạn cho biến TEMP ở đây. Quay trở lại https: // localhost: 3000 để xem thông tin địa chỉ IP trong trình duyệt của bạn.

Lưu ý rằng vì địa chỉ bạn đang gửi đến API trong phát triển chỉ là một địa chỉ 192.168, bạn sẽ không nhận được nhiều thông tin hữu ích từ nó. Thông thường, một đối tượng phản hồi hoàn chỉnh sẽ trông giống như thế này:



{
  "ip_address": "XX.XXX.XXX.XXX",
  "city": "XXXXXX",
  "city_geoname_id": XXXXXXX,
  "region": "XXXXXXXXX",
  "region_iso_code": "XX",
  "region_geoname_id": XXXXXXX,
  "postal_code": "XXXXXXX",
  "country": "United States",
  "country_code": "US",
  "country_geoname_id": 6252001,
  "country_is_eu": false,
  "continent": "North America",
  "continent_code": "NA",
  "continent_geoname_id": 6255149,
  "longitude": XXX.XXXX,
  "latitude": XX.XXXX,
  "security": {
    "is_vpn": false
  },
  "timezone": {
    "name": "XXX/XXXX",
    "abbreviation": "XXX",
    "gmt_offset": X,
    "current_time": "00:00:00",
    "is_dst": true
  },
  "flag": {
    "emoji": "🇺🇸",
    "unicode": "U+1F1FA U+1F1F8",
    "png": "https://static.abstractapi.com/country-flags/US_flag.png",
    "svg": "https://static.abstractapi.com/country-flags/US_flag.svg"
  },
  "currency": {
    "currency_name": "USD",
    "currency_code": "USD"
  },
  "connection": {
    "autonomous_system_number": XXXX,
    "autonomous_system_organization": "XXXXX",
    "connection_type": "XXXXX",
    "isp_name": "XXXXXX",
    "organization_name": "XXXXXXX"
  }
}

(Lưu ý rằng tôi đã che khuất rất nhiều thông tin nhận dạng trong đoạn trích này.)

Sự kết luận

Trong bài viết này, chúng tôi đã xem xét cách trích xuất địa chỉ IP của máy khách trong Node.js và cách sử dụng điểm cuối định vị địa lý AbstractorApi để có được một số thông tin hữu ích về địa chỉ IP đó.

Khi bạn có thông tin này, thật dễ dàng để tùy chỉnh trải nghiệm trong ứng dụng của người dùng để cung cấp bản dịch, chuyển đổi tiền tệ, v.v.

Câu hỏi thường gặp

Làm cách nào để tìm địa chỉ IP của tôi trong Node.js?

Cách dễ nhất để tìm địa chỉ IP của bạn trong Node.js là kéo địa chỉ IP của máy khách từ đối tượng yêu cầu HTTP đến. Nếu bạn đang chạy Express trong ứng dụng nút của mình, điều này rất dễ thực hiện. Truy cập trường ổ cắm của đối tượng Yêu cầu Express, sau đó tìm kiếm thuộc tính Remoteaddress của trường đó.

Remoteaddress sẽ là địa chỉ của máy khách đã gửi yêu cầu. Nếu bạn đang chạy ứng dụng đang được phát triển, đây sẽ là địa chỉ loopback: 127.0.0.1 cho IPv4 và :: 1 cho IPv6.

JavaScript có thể đọc địa chỉ IP không?

Đúng. Rất dễ dàng để tìm kiếm một địa chỉ IP trong JavaScript. Nếu bạn đang chạy ứng dụng JavaScript của mình trong trình duyệt, bạn có thể sử dụng dịch vụ của bên thứ ba miễn phí như Abstractapi để đưa ra yêu cầu và nhận cả địa chỉ IP của bạn và một số thông tin về nó.

Nếu bạn đang chạy JavaScript trên máy chủ (tức là máy chủ nút JS), khung Express giúp bạn dễ dàng lấy thông tin về địa chỉ IP của máy khách từ đối tượng yêu cầu đến. Cách dễ nhất để làm điều này là sử dụng trường aquest.socket.remoteaddress.

Làm thế nào để bạn tìm kiếm một địa chỉ IP?

Có nhiều cách để tra cứu một địa chỉ IP. Nếu bạn chỉ muốn biết địa chỉ IP của riêng mình cho thiết bị bạn hiện đang sử dụng, hãy truy cập một trang web như https://whatismyipaddress.com/ hoặc loại đơn giản "Địa chỉ IP của tôi" vào trình duyệt Google hoặc thanh tìm kiếm.

Nếu bạn đang cố gắng tìm kiếm một địa chỉ IP bên trong trình duyệt hoặc trên máy chủ, cách dễ nhất là kiểm tra đối tượng yêu cầu đến. Tùy thuộc vào khung và ngôn ngữ bạn đang sử dụng để xây dựng máy chủ của mình, phương pháp chính xác để thực hiện việc này sẽ khác nhau. Nhìn vào tài liệu cho ngôn ngữ và khung của bạn.

Có nhiều dịch vụ của bên thứ ba miễn phí có thể cung cấp cho bạn không chỉ một địa chỉ IP mà còn một số thông tin về nó, như dữ liệu định vị địa lý, nhà cung cấp và dữ liệu nhà cung cấp, v.v.