首页 > 解决方案 > Node.js 出站 IP - 更改地址

问题描述

操作系统是 Linux Debian 9。我的网络接口上连接的 IPv4 很少,也可以有一些 IPv6。

网络接口设置文件在末尾添加 /64 组 IPv6 地址之一。

如何运行 node.js 以使用一个选择的 IPv4 作为 IPv4 地址列表中的出站连接?现在它总是使用接口的最后添加的IP。

我不想在这些 IP 上设置代理,因为它们用于网络服务器和其他服务。

我准备了一些代码来说明问题所在:

var ip = require('ip');
console.log(ip.address());

const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://api.myip.com/');
  let bodyHTML = await page.evaluate(() => document.body.innerHTML);
  console.log(bodyHTML);
  await browser.close();
})();

如您所见,我在这里列出了我的本地 IP 地址,并且我提前打开了网站https://api.myip.com/和 puppeteer(感谢@crazyluki)以 json 格式显示其出站 IP。

所以结果是:

seo@serv:~/goo$ node ip.js 
188.6.6.1
{"ip":"1001:a1d0:2:9aa1::","country":"France","cc":"FR"}
user@serv:~/goo$ 

添加了新的 IPv6:

user@serv:~/goo$ sudo /sbin/ifconfig eno1 inet6 add 1001:a1d0:2:9aa1::1/64

接着:

user@serv:~/goo$ node ip.js 
188.6.6.1
{"ip":"1001:a1d0:2:9aa1::1","country":"France","cc":"FR"}
user@serv:~/goo$ 

我们可以看到 IP 地址从 1001:a1d0:2:9aa1:: 变为 1001:a1d0:2:9aa1::1

如何控制 puppeteer 中的出站 IP,而不使用代理作为我的本地 IPv4 地址?

如果我使用 Lynx 访问https://api.myip.com/,它还会显示像 puppeteer 这样的 IP。

标签: node.jslinuxbashdebianpuppeteer

解决方案


好的,我已经配置了 squid。似乎没有其他方法可以达到预期的效果。


推荐阅读