Nodejs 自动更新敏感 hosts 的项目

Nodejs 自动更新敏感 hosts 的项目

https://github.com/alsotang/alsohosts

之所以会创建这个项目,是因为在公司的时候为了使用内网的服务,一定要使用公司的 DNS 服务器。

如果使用公司的 DNS 服务器,那么即使在连接了国外 VPN 的情况下,某些网站依然无法访问,所以需要配置 hosts。

项目演示:http://alsohosts.herokuapp.com/


3 回复

Nodejs 自动更新敏感 hosts 的项目

项目介绍

这个项目旨在通过 Node.js 实现自动更新 hosts 文件,以便在不同网络环境下保持服务的正常访问。该项目最初是为了解决在公司内部使用特定 DNS 服务器时,由于某些内网服务的需求而无法访问某些国外网站的问题。

项目链接

项目背景

在公司内部,为了能够访问特定的内网服务,我们通常需要使用公司的 DNS 服务器。然而,在连接了国外的 VPN 后,这种设置可能会导致无法访问某些国外网站。因此,我们需要手动或自动更新 hosts 文件来解决这个问题。

示例代码

以下是该项目的核心代码片段,用于读取、修改和保存 hosts 文件:

const fs = require('fs');
const path = require('path');

// 读取 hosts 文件
function readHostsFile() {
    const filePath = path.join(process.platform === 'win32' ? process.env.SystemRoot : '/etc', 'hosts');
    return fs.readFileSync(filePath, 'utf8');
}

// 更新 hosts 文件
function updateHostsFile(newContent) {
    const filePath = path.join(process.platform === 'win32' ? process.env.SystemRoot : '/etc', 'hosts');
    fs.writeFileSync(filePath, newContent);
}

// 示例:添加一条新的 hosts 记录
function addNewHostEntry(ip, domain) {
    const newEntry = `${ip} ${domain}\n`;
    let currentContent = readHostsFile();
    if (!currentContent.includes(newEntry)) {
        currentContent += newEntry;
        updateHostsFile(currentContent);
        console.log(`Added new host entry: ${newEntry}`);
    } else {
        console.log(`Host entry already exists: ${newEntry}`);
    }
}

// 使用示例
addNewHostEntry('192.168.1.1', 'example.com');

解释

  1. 读取 hosts 文件:通过 readHostsFile 函数读取当前系统的 hosts 文件内容。
  2. 更新 hosts 文件:通过 updateHostsFile 函数将新内容写入 hosts 文件。
  3. 添加新的 hosts 记录:通过 addNewHostEntry 函数向 hosts 文件中添加新的条目。该函数首先检查是否已经存在该记录,如果不存在则将其添加到文件中。

在线演示

您可以访问 在线演示页面 查看项目的实际运行效果,并了解如何使用它来管理您的 hosts 文件。

通过这个项目,您可以自动化处理复杂的 hosts 文件管理任务,从而提高工作效率。


恩… 看见很多hosts,不过… 目前在用自动更新hosts的 fuckGFW

针对“Nodejs 自动更新敏感 hosts 的项目”这个帖子内容,我们可以参考 alsotang/alsohosts 项目来实现一个类似的解决方案。这个项目的主要功能是通过 Node.js 自动更新本地的 hosts 文件,以确保能够正确访问内部网络资源和外部网络资源。

示例代码

const fs = require('fs');
const path = require('path');

// 定义hosts文件路径
const HOSTS_PATH = '/etc/hosts'; // 在Windows上可能是 'C:\\Windows\\System32\\drivers\\etc\\hosts'

// 检查并更新hosts文件
function updateHosts() {
    const content = fs.readFileSync(HOSTS_PATH, 'utf-8');
    let updatedContent = content;

    // 假设我们需要添加或更新以下两个条目
    const entries = [
        { ip: '192.168.1.1', domain: 'internal.example.com' },
        { ip: '192.168.1.2', domain: 'secure.internal.example.com' }
    ];

    entries.forEach(entry => {
        const regex = new RegExp(`^${entry.ip}\\s+${entry.domain}`, 'gm');
        if (!regex.test(updatedContent)) {
            updatedContent += `\n${entry.ip} ${entry.domain}`;
        }
    });

    fs.writeFileSync(HOSTS_PATH, updatedContent);
}

// 运行函数
updateHosts();

解释

  • HOSTS_PATH: 定义了hosts文件的路径。在不同操作系统上路径可能不同。
  • updateHosts(): 该函数读取当前的hosts文件内容,并检查是否已存在需要添加的条目。如果没有,则将这些条目追加到文件中。
  • entries: 包含了需要添加或更新的IP地址和域名的数组。你可以根据实际需求调整这个数组。

注意事项

  • 修改hosts文件需要管理员权限。
  • 不同的操作系统对hosts文件的处理方式可能略有不同,请根据实际情况进行调整。

这个简单的示例展示了如何使用Node.js自动更新hosts文件,以确保能够正确访问指定的内部和外部网络资源。

回到顶部