Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

Đoạn mã này dựa trên hỗ trợ WebRTC mới được phát hành trong Chrome và Firefox cho phép thực hiện yêu cầu đối với máy chủ STUN, dẫn đến khả năng truy cập địa chỉ IP cục bộ và công cộng cho khách truy cập của bạn. Với một mã Javascript nhỏ, bạn có thể dễ dàng thực hiện các yêu cầu này và cung cấp dữ liệu IP trong các phần khác của trang để phân tích và sử dụng để tùy chỉnh hoặc chặn

Show

Tin vui là những lệnh gọi này không thể bị chặn bởi các plugin và tiện ích chặn quảng cáo vì chúng được thực hiện bên ngoài phiên bản XMLHttpRequest. Cho rằng 20 đến 30% người dùng internet đang duyệt bằng Trình chặn quảng cáo, điều này là hoàn hảo nếu bạn muốn đảm bảo trải nghiệm nhất quán cho tất cả người dùng của mình. Sao chép và dán đoạn mã sau vào trang web của bạn

  
  //get the IP addresses associated with an account
	function getIPs(callback){
    var ip_dups = {};

    //compatibility for firefox and chrome
    var RTCPeerConnection = window.RTCPeerConnection
        || window.mozRTCPeerConnection
        || window.webkitRTCPeerConnection;
    var useWebKit = !!window.webkitRTCPeerConnection;

    //bypass naive webrtc blocking using an iframe
    if(!RTCPeerConnection){

        var win = iframe.contentWindow;
        RTCPeerConnection = win.RTCPeerConnection
            || win.mozRTCPeerConnection
            || win.webkitRTCPeerConnection;
        useWebKit = !!win.webkitRTCPeerConnection;
    }

    //minimal requirements for data connection
    var mediaConstraints = {
        optional: [{RtpDataChannels: true}]
    };

    var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

    //construct a new RTCPeerConnection
    var pc = new RTCPeerConnection(servers, mediaConstraints);

    function handleCandidate(candidate){
        //match just the IP address
        var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
        var ip_addr = ip_regex.exec(candidate)[1];

        //remove duplicates
        if(ip_dups[ip_addr] === undefined)
            callback(ip_addr);

        ip_dups[ip_addr] = true;
    }

    //listen for candidate events
    pc.onicecandidate = function(ice){

        //skip non-candidate events
        if(ice.candidate)
            handleCandidate(ice.candidate.candidate);
    };

    //create a bogus data channel
    pc.createDataChannel("");

    //create an offer sdp
    pc.createOffer(function(result){

        //trigger the stun server request
        pc.setLocalDescription(result, function(){}, function(){});

    }, function(){});

    //wait for a while to let everything done
    setTimeout(function(){
        //read candidate info from local description
        var lines = pc.localDescription.sdp.split('\n');

        lines.forEach(function(line){
            if(line.indexOf('a=candidate:') === 0)
                handleCandidate(line);
        });
    }, 1000);
  }

//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});

  

Giờ đây, bạn có thể sử dụng chức năng sau để lấy IP ngay khi tìm thấy

  
	//Test: Print the IP addresses into the console
	getIPs(function(ip){console.log(ip);});
  

Có một số nhược điểm khi sử dụng phương pháp này. Nó không chỉ không được một số trình duyệt hỗ trợ mà còn thiếu một số thông tin nhất định mà bạn có thể biết từ một địa chỉ IP, chẳng hạn như địa chỉ IP đó đang sử dụng proxy hay VPN

Phương pháp 2. Sử dụng API phát hiện IP của Tóm tắt

Abstract cung cấp API phát hiện IP miễn phí có phương pháp truy xuất IP của khách truy cập.

API đơn giản nhưng mạnh mẽ dễ sử dụng này cung cấp các tính năng sau.

  • Truy xuất IP của khách truy cập
  • Truy xuất vị trí của khách truy cập
  • Truy xuất vị trí của một IP

API miễn phí sử dụng và cho phép hàng nghìn cuộc gọi mỗi tháng. Sử dụng nó khá đơn giản và chỉ yêu cầu khóa API, bạn có thể nhận miễn phí bằng cách đăng ký tại đây. Tài liệu có thể được tìm thấy trên trang tài liệu. Ngoài ra, bạn có thể xem đánh giá của chúng tôi về API định vị địa lý IP tốt nhất cũng như thử "Địa chỉ IP và vị trí của tôi là gì?"

Mô-đun http tiêu chuẩn của nút cung cấp thuộc tính remoteAddress trong thuộc tính ổ cắm của đối tượng yêu cầu. Chúng tôi lấy địa chỉ IP của yêu cầu từ giá trị này

Đây là mã cho giải pháp này


const http = require("http");

//create the server 
const server = http.createServer(function(req,res){
    res.end(`The client's IP Address is: ${req.socket.remoteAddress}`);
}
);


// listen on port
const port = process.env.port || 3000;
server.listen(port, function(){
    console.log(`The server is listening in port ${port}`);
});

Mã ghi lại địa chỉ trong bảng điều khiển

Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

Chúng tôi hiển thị địa chỉ IP người dùng sử dụng IPv6 ở trên. Nó là một dạng ngắn của localhost

0000. 0000. 0000. 0000. 0000. 0000. 0000. 0001

IPv6 viết tắt là gì. 1

2. Truy xuất nhiều địa chỉ IP bằng tiêu đề X-Forwarded-For (XFF)

Giải pháp đơn giản trên chỉ hoạt động nếu người dùng kết nối trực tiếp với máy chủ. Tuy nhiên, nếu yêu cầu định tuyến qua nhiều proxy, yêu cầu. ổ cắm. thuộc tính remoteAddress chỉ ghi lại địa chỉ proxy cuối cùng

Tuy nhiên, chúng tôi cần địa chỉ IP gốc của máy khách cho trường hợp sử dụng kinh doanh của bạn. Vì vậy, chúng tôi sử dụng X-Forwarded-For (XFF), một tiêu đề HTTP thực tế cho việc này

XFF có cú pháp sau


X-Forwarded-For: , ,  ....

Chúng tôi phân tích cú pháp để trích xuất giá trị ngoài cùng bên trái. Đây là địa chỉ IP của yêu cầu của chúng tôi. Đây là mã cho nó trong Node JS


//find Client IP address with the X-Forwarded-For (XFF) Header with //multiple proxy servers

const http = require("http");

//create the server 
const server = http.createServer(function(req,res){
    const clientIP = req.headers['x-forwarded-for']?.split(',').shift() || req.socket?.remoteAddress;
    res.end(`The client's IP Address is: ${clientIP}`);
}
);


// listen on port
const port = process.env.port || 3000;
server.listen(port, function(){
    console.log(`The server is listening in port ${port}`);
});

Hãy nhanh chóng phá vỡ logic mã

Chúng tôi truy cập tiêu đề XFF trong yêu cầu. đối tượng tiêu đề với khóa ['x-forwarded=for'] để trả về nhiều địa chỉ IP của proxy và máy khách gốc

Đôi khi, tiêu đề XFF có thể không xuất hiện. Vì vậy, chúng tôi sử dụng chuỗi tùy chọn JavaScript hiện đại (?. ) trong lệnh để loại bỏ lỗi trong tình huống như vậy. Sau đó, chúng tôi chia tiêu đề XFF bằng dấu phẩy để trả về nhiều địa chỉ IP dưới dạng một mảng. Cuối cùng, chúng tôi truy xuất địa chỉ IP của máy khách bằng phương thức mảng dịch chuyển JavaScript để trích xuất giá trị ngoài cùng bên trái

Nếu họ không đặt XFF, toán tử chuỗi tùy chọn sẽ trả về không xác định. Để cung cấp cho người dùng phản hồi có ý nghĩa, chúng tôi mặc định yêu cầu. ổ cắm?. giá trị địa chỉ từ xa

Đây là đầu ra cho mã này. Chúng tôi thấy địa chỉ IP trong nhật ký trong bảng điều khiển của chúng tôi

Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

3. Yêu cầu địa chỉ IP cục bộ với Node JS

Hai phương thức trên trả về localhost. Localhost có nghĩa là một vòng lặp trở lại cùng một thiết bị mà chúng tôi yêu cầu IP từ. Tuy nhiên, thiết bị của chúng tôi cũng có kết nối cục bộ với bộ định tuyến của chúng tôi. Vì vậy, nó cũng có một địa chỉ IP cục bộ riêng

Chúng tôi sử dụng mô-đun Node JS có tên là ip để yêu cầu địa chỉ IP cục bộ này

Trước tiên chúng tôi cài đặt mô-đun ip bằng lệnh sau


npm install ip

Bây giờ chúng tôi yêu cầu địa chỉ IP trong mạng cục bộ của chúng tôi với ip. phương thức address() của mô-đun này

Đây là một ứng dụng Node JS ví dụ để làm như vậy


// we use the 'ip' module in npm to request IP address of the originating //client

var ip = require('ip');
var express = require('express');

var app = express();

app.get("/",function(req,res){
    res.end("Your IP address is " + ip.address());
})

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
    console.log("Server running on port number" + PORT);
});

Bây giờ chúng tôi chạy ứng dụng của chúng tôi. Đầu ra trên localhost. 3000 trông như thế này

Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

4. Truy xuất địa chỉ IP của máy khách trong Node JS bằng Express

Express lưu trữ địa chỉ IP ban đầu trong yêu cầu. thuộc tính ip của đối tượng yêu cầu của nó

Đây là mã ví dụ cho giải pháp này


// we use req.ip property in Express to retrieve originating IP address

var express = require('express');

var app = express();

app.get("/",function(req,res){
    res.end("Your IP address is " + req.ip);
})

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
    console.log("Server running on port number" + PORT);
})

Mã sẽ dễ viết hơn nếu chúng ta sử dụng Express trên Node JS

5. Yêu cầu địa chỉ IP của máy khách khi sử dụng dịch vụ điện toán biên

Với khối lượng dữ liệu mở rộng mỗi ngày, mô hình client-server truyền thống cho ứng dụng web là không đủ. Nhiều lần, bạn có thể có máy chủ của mình hỗ trợ proxy để mang lại hiệu suất và bảo mật vượt trội bằng cách sử dụng mạng phân phối nội dung và điện toán biên (CDN)

Trong trường hợp đó, bạn cần các tiêu đề cụ thể mà các công ty điện toán biên khác nhau hỗ trợ để truy xuất địa chỉ IP ban đầu của khách hàng

Chúng ta hãy xem xét một số tiêu đề cụ thể này

Yêu cầu địa chỉ IP trong Cloudflare

Nếu bạn sử dụng mạng proxy Cloudflare để cải thiện tốc độ và bảo mật, bạn có thể nhận địa chỉ IP của yêu cầu bằng các tiêu đề tùy chỉnh của Cloudflare

Tiêu đề CF-Kết nối-IP

Cloudflare cung cấp tiêu đề yêu cầu CF-Connecting-IP độc quyền của họ để gửi địa chỉ IP của máy khách đến máy chủ web gốc của bạn

True-Client-IP

Khách hàng doanh nghiệp của Cloudflare cũng có thể sử dụng tiêu đề True-Client-IP để lấy địa chỉ IP của yêu cầu. Tiêu đề True-Client-IP là tốt nhất để các thiết bị cũ đọc IP gốc mà không cần cập nhật tường lửa/bộ cân bằng tải

Yêu cầu địa chỉ IP của khách hàng trong CDN nhanh

Nếu bạn sử dụng Fastly CDN để cung cấp cho khách truy cập ứng dụng hoặc trang web của mình trải nghiệm người dùng nhanh, hãy sử dụng tiêu đề Fastly-Client-IP độc quyền của họ để lấy địa chỉ IP của yêu cầu. Khi các yêu cầu chuyển từ proxy Fastly này sang proxy khác, Fastly sẽ tự động thêm tiêu đề IP Fastly-Client này vào các yêu cầu tiếp theo

Yêu cầu địa chỉ IP của khách hàng trong FireBase Hosting

Nếu bạn lưu trữ ứng dụng của mình trên Firebase, bạn có thể truy xuất địa chỉ IP ban đầu từ tiêu đề lưu trữ Firebase. Bạn có thể chỉ định tiêu đề lưu trữ Firebase trong thuộc tính 'tiêu đề' trong tệp cấu hình

Địa chỉ IP máy khách trong Nginx

Nếu bạn sử dụng máy chủ proxy Nginx để cải thiện hiệu suất trang web của mình, bạn có thể truy xuất IP máy khách từ tiêu đề X-Real-IP

IP máy khách trong Bộ cân bằng tải Rackspace

Rackspace lb tối ưu hóa hiệu suất trang web bằng cách phân phối tải cùng với bộ nhớ đệm và các tính năng khác. Bạn có thể tìm IP máy khách ban đầu trong tiêu đề X-Cluster-Client-IP trong Rackspace lb

Bạn có thể làm theo các hướng dẫn và tài liệu chính thức cho bất kỳ dịch vụ nào trong số này để cài đặt chúng đúng cách với các tiêu đề cụ thể để lấy địa chỉ IP của khách hàng. Bạn có thể tìm thấy các ví dụ hướng dẫn cho tất cả các nền tảng chính như Windows, Mac OS và Linux cho các dịch vụ này

6. Giải pháp mạnh mẽ để truy xuất địa chỉ IP của máy khách trong Node JS - Sử dụng tích hợp API định vị địa lý IP trừu tượng

Như chúng ta thấy, địa chỉ IP máy khách ban đầu có thể ẩn ở một số nơi - bên trong các đối tượng Node JS gốc (req. ổ cắm. remoteAddress), bất kỳ đối tượng khung Node JS nào (req. ip trong Express) hoặc bên trong một số tiêu đề cụ thể tùy chỉnh nếu bạn sử dụng điện toán biên và CDN để cải thiện hiệu suất trang web của mình

Thật khó để theo dõi các tiêu đề riêng lẻ và các lệnh cấu hình khác nhau đối với bất kỳ nhà phát triển ngăn xếp đầy đủ nào để lấy địa chỉ IP của máy khách khi bạn sử dụng các công ty proxy khác nhau

Vì vậy, chúng tôi có thể sử dụng dịch vụ định vị địa lý cấp chuyên nghiệp từ đầu đến cuối như API định vị địa lý IP trừu tượng để bao gồm các trường hợp khác nhau

Ghi chú. Đọc thêm về API định vị địa lý IP trừu tượng tại đây

Với một đoạn mã Javascript dễ dàng, bạn có thể sử dụng API định vị địa lý IP trừu tượng để truy xuất địa chỉ IP của máy khách trong Node JS bằng giải pháp sau

________số 8

Đây là đầu ra của ví dụ này

Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

Logic rất đơn giản. Chúng tôi gửi yêu cầu Axios đến điểm cuối API. Nó trả về một bộ dữ liệu định vị địa lý phong phú trong đối tượng phản hồi dưới dạng JSON. Trường đầu tiên trong dữ liệu phản hồi là ip_address và trường này chứa địa chỉ IP gốc của máy khách

Lệnh gọi API tra cứu trong một số tiêu đề và đối tượng JavaScript/Node JS để truy xuất IP. Nhà phát triển ngăn xếp đầy đủ không cần lãng phí công sức tra cứu từng tiêu đề yêu cầu riêng lẻ và có thể tập trung vào logic nghiệp vụ

API trừu tượng cung cấp một số tích hợp sẵn sàng sử dụng hữu ích cho nhiều tác vụ phổ biến mà nhà phát triển ngăn xếp đầy đủ cần. Ví dụ: API xác thực email của họ cung cấp cho nhà phát triển ngăn xếp đầy đủ giải pháp plug-n-play dễ dàng để xác thực địa chỉ email và cải thiện ROI tiếp thị. Tóm tắt cung cấp nhiều hướng dẫn để giúp bạn dễ dàng tích hợp API của họ vào mã của bạn

Ví dụ: bạn có thể tìm hiểu cách sử dụng API xác thực email trừu tượng để xóa danh sách gửi thư của các địa chỉ không có thật trong hướng dẫn này

7. Giải pháp thay thế để yêu cầu địa chỉ IP của máy khách trong nút. js - Sử dụng Mô-đun NPM IP Yêu cầu

Nếu bạn muốn sử dụng giải pháp mã nguồn mở để tìm địa chỉ IP trong Node. js, thì bạn có thể thử mô-đun Yêu cầu IP NPM

Đầu tiên, cài đặt Express bằng lệnh bên dưới


npm install express

Cài đặt Mô-đun IP Yêu cầu bằng lệnh sau

  
	//Test: Print the IP addresses into the console
	getIPs(function(ip){console.log(ip);});
  
0

Viết đoạn mã JavaScript sau vào máy chủ. tập tin js

  
	//Test: Print the IP addresses into the console
	getIPs(function(ip){console.log(ip);});
  
1

Bây giờ chúng tôi khởi chạy ứng dụng Node JS trong ví dụ trên bằng lệnh sau


X-Forwarded-For: , ,  ....
0

Nếu bây giờ chúng ta trỏ đến localhost. 3000 trong trình duyệt của chúng tôi, chúng tôi thấy địa chỉ IP của mình

Làm cách nào để in địa chỉ IP của tôi bằng JavaScript?

Mô-đun Nút IP Yêu cầu bao gồm tất cả các trường hợp cạnh cho các tiêu đề và đối tượng khác nhau có thể có địa chỉ IP của máy khách. Ví dụ: nó sẽ xem qua phần sau để biết địa chỉ IP

Tiêu đề cụ thể

  • X-Máy khách-IP
  • X-Forwarded-For
  • CF-Connecting-IP
  • Nhanh-Client-IP
  • True-Client-IP
  • X-Real-IP
  • X-Cluster-Client-IP
  • X-Real-IP
  • X-Cluster-Client-IP

Các đối tượng Node JS và Express

yêu cầu. sự liên quan. remoteAddress (dành cho các phiên bản Node JS cũ hơn)

yêu cầu. ổ cắm. địa chỉ từ xa

Vì vậy, phương pháp này là một giải pháp mạnh mẽ một lần bao gồm hầu hết các trường hợp sử dụng

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

Làm cách nào để tìm địa chỉ IP trong Node JS?

Bạn nên tra cứu yêu cầu. ổ cắm. remoteAddress với vanilla Node JS hoặc req. ip nếu bạn sử dụng Express trên Node. Ngoài ra, bạn có thể tìm thấy IP trong các tiêu đề yêu cầu như X-Client-IP hoặc X-Forward-For (XFF). Nếu bạn sử dụng dịch vụ CDN như Cloudflare hoặc Fastly để cải thiện hiệu suất, thì bạn nên kiểm tra các tiêu đề độc quyền của họ

Proxy là gì và tại sao tôi nên sử dụng mạng proxy?

Mạng proxy giữa máy khách và máy chủ của bạn cải thiện hiệu suất và bảo mật trang web với sức mạnh cân bằng tải, bộ nhớ đệm và điện toán cạnh

Làm cách nào để tìm địa chỉ IP của yêu cầu ban đầu nếu tôi sử dụng proxy?

Bạn có thể tìm thấy IP của yêu cầu ban đầu trong tiêu đề X-Forwarded-For (XFF) hoặc tiêu đề tùy chỉnh, chẳng hạn như CF-Connecting-IP cho Cloudfare hoặc X-Real-IP cho proxy Nginx

Làm cách nào để lấy địa chỉ IP của tôi trong JavaScript?

Ví dụ. json(`https. //api. ipdata. co?api-key=${apiKey}&fields=ip`). sau đó (dữ liệu => { bảng điều khiển. log(dữ liệu. ip);

JavaScript có thể tiết lộ địa chỉ IP không?

Javascript không thể rò rỉ địa chỉ IP . Điều bạn có thể đang nghĩ đến hoặc bị nhầm lẫn là WebRTC có thể hiển thị thông tin này cho Javascript. nếu bạn sử dụng VPN - hãy cài đặt Chặn WebRTC từ cửa hàng tiện ích mở rộng của chrome - cũng có một cái có thể so sánh được cho firefox.

Làm cách nào để lấy địa chỉ IP trong HTML?

echo $_SERVER["REMOTE_ADDR"]; Điều này thực sự lấy ip máy chủ, đây sẽ là máy chủ của bạn. Điều này phân tích chính xác trường HTTP_X_FORWARDED_FOR cũng như xác thực IP để đảm bảo IP có định dạng phù hợp chứ không phải trong một khối riêng tư.

Làm cách nào để lấy vị trí từ địa chỉ IP bằng JavaScript?

get("https. //api. ipdata. co?api-key=APIKEY", function(response) { console. log(phản hồi. tên_nước); . A simple call like above without passing in any parameters other than the API key will give you the location of the user currently on the page with the above code embedded.