const net = require('net');
const client = net.connect({port: 80, host:"google.com"}, () => {
console.log('MyIP='+client.localAddress);
console.log('MyPORT='+client.localPort);
});
const http = require('http');
var options = {
host: 'ipv4bot.whatismyipaddress.com',
port: 80,
path: '/'
};
http.get(options, function(res) {
console.log("status: " + res.statusCode);
res.on("data", function(chunk) {
console.log("BODY: " + chunk);
});
}).on('error', function(e) {
console.log("error: " + e.message);
});
var http = require('http');
http.get({'host': 'api.ipify.org', 'port': 80, 'path': '/'}, function(resp) {
resp.on('data', function(ip) {
console.log("My public IP address is: " + ip);
});
});
--
更新2022年
ChatGPT使用ipify和json编写了更长的示例:*是的,我已经测试过。
https://gist.github.com/unitycoder/745a58d562180994a3025afcb84c1753
更多信息请参见https://www.ipify.org/
192.168.xxx
地址,而不是公共地址。 - laggingreflexresp
是一个流,因此您不能依赖于单个 data
事件,认为您将接收服务器发送的整个 data
数据包。对于这样小的数据,如果连接真的非常拥堵,您可能只会得到一半的 IP。您必须依靠 data
进行连接,并依靠 end
来获得通知,表示已经接收到了整个 IP。 - Jorge Fuentes Gonzálezexternalip(function (err, ip) {
console.log(ip); // => 8.8.8.8
});
编辑: 此文章写于2013年...该网站已不存在。如果没有人抱怨,我会暂时保留示例请求代码,但请参考被接受的答案。
http://fugal.net/ip.cgi和这个网站类似。
或者你可以
require('http').request({
hostname: 'fugal.net',
path: '/ip.cgi',
agent: false
}, function(res) {
if(res.statusCode != 200) {
throw new Error('non-OK status: ' + res.statusCode);
}
res.setEncoding('utf-8');
var ipAddress = '';
res.on('data', function(chunk) { ipAddress += chunk; });
res.on('end', function() {
// ipAddress contains the external IP address
});
}).on('error', function(err) {
throw err;
}).end();
参考文献:http://www.nodejs.org/api/http.html#http_http_request_options_callback
这个链接是有关 Node.js 的 HTTP 请求的,可参考官方文档。end
。任何试用这个脚本的人,不要忘记将最后一行更改为:}).end();
。 - Domi这应该可以在没有任何外部依赖的情况下良好运行(除了ipify.org):
var https = require('https');
var callback = function(err, ip){
if(err){
return console.log(err);
}
console.log('Our public IP is', ip);
// do something here with the IP address
};
https.get({
host: 'api.ipify.org',
}, function(response) {
var ip = '';
response.on('data', function(d) {
ip += d;
});
response.on('end', function() {
if(ip){
callback(null, ip);
} else {
callback('could not get public ip address :(');
}
});
});
另一个小的节点模块是ext-ip
。不同之处在于,您可以使用不同的响应选项来匹配您的编码风格。它已经准备好直接使用...
let extIP = require('ext-ip')();
extIP.get().then(ip => {
console.log(ip);
})
.catch(err => {
console.error(err);
});
let extIP = require('ext-ip')();
extIP.on("ip", ip => {
console.log(ip);
});
extIP.on("err", err => {
console.error(err);
});
extIP();
let extIP = require('ext-ip')();
extIP((err, ip) => {
if( err ){
throw err;
}
console.log(ip);
});
只需使用 superagent
var superagent = require('superagent');
var getip = function () {
superagent
.get('http://ip.cn/')
.set('User-Agent', 'curl/7.37.1')
.end(function (err, res) {
if (err) {
console.log(err);
}
var ip = res.text.match(/\d+\.\d+\.\d+\.\d+/)[0];
console.log(ip)
// Here is the result
});
};
const axios = require('axios');
// replace these URLs with whatever is good for you
const remoteIPv4Url = 'http://ipv4bot.whatismyipaddress.com/';
const remoteIPv6Url = 'http://ipv6bot.whatismyipaddress.com/';
// Try getting an external IPv4 address.
async function getExternalIPv4(debug = false) {
try {
const response = await axios.get(remoteIPv4Url);
if (response && response.data) {
return response.data;
}
} catch (error) {
if (debug) {
console.log(error);
}
}
return undefined;
}
// Try getting an external IPv6 address.
async function getExternalIPv6(debug = false) {
try {
const response = await axios.get(remoteIPv6Url);
if (response && response.data) {
return response.data;
}
} catch (error) {
if (debug) {
console.log(error);
}
}
return undefined;
}
async function getExternalIP(debug = false) {
let address;
// Try IPv6 and then IPv4
address = await getExternalIPv6(debug);
if (!address) {
address = await getExternalIPv4(debug);
}
return address;
}
module.exports { getExternalIP, getExternalIPv4, getExternalIPv6 }
欢迎提出改进意见。
const requestIp = require('request-ip');
// inside middleware handler
const ipMiddleware = function(req, res, next) {
const clientIp = requestIp.getClientIp(req);
next();
};
async function myIP() {
const response = await fetch("https://api.ipify.org/");
return await response.text();
}
const ip = await myIP();