Python上网神器,自动修改Hosts工具

在这里插入图片描述

更多Python学习内容:ipengtao.com

大家好,我是彭涛,今天为大家分享 Python上网神器,自动修改Hosts工具,全文6400字,阅读大约18分钟。

在互联网时代,Hosts 文件的修改是一项常见的任务,用于解决一些网络访问问题或加速访问速度。为了更方便地进行Hosts文件的修改,我们可以借助Python编写一个自动修改Hosts的工具。本文将详细介绍如何使用Python创建一个功能强大且灵活的Hosts修改工具,并提供丰富的示例代码。

Hosts文件简介

Hosts文件是一个没有扩展名的系统文件,用于将IP地址映射到相应的主机名。通过修改Hosts文件,可以在绕过DNS解析的情况下指定某个域名对应的IP地址,实现一些定制化的网络配置。

Python脚本基础

首先,需要了解如何使用Python读取和写入文本文件。以下是一个简单的Python脚本,用于读取Hosts文件的内容:

# read_hosts.py
with open('/etc/hosts', 'r') as file:
    hosts_content = file.read()

print(hosts_content)

修改Hosts文件

接下来,扩展脚本,使其能够实现修改Hosts文件的功能。可以通过正则表达式或其他方法来查找和替换Hosts文件中的特定行。

以下是一个简单的示例:

# modify_hosts.py
import re

def modify_hosts(hosts_content, domain, ip):
    pattern = re.compile(fr'(\b{ip}\b).*\b{domain}\b')
    replacement = f'{ip} {domain}'

    if pattern.search(hosts_content):
        modified_content = pattern.sub(replacement, hosts_content)
    else:
        modified_content = f'{hosts_content}\n{replacement}'

    return modified_content

with open('/etc/hosts', 'r') as file:
    hosts_content = file.read()

modified_content = modify_hosts(hosts_content, 'example.com', '127.0.0.1')

with open('/etc/hosts', 'w') as file:
    file.write(modified_content)

命令行工具

将上述脚本转换为一个命令行工具,可以更方便地从终端使用。使用argparse库可以轻松实现命令行参数的解析:

# hosts_tool.py
import argparse
import re

def modify_hosts(hosts_content, domain, ip):
    pattern = re.compile(fr'(\b{ip}\b).*\b{domain}\b')
    replacement = f'{ip} {domain}'

    if pattern.search(hosts_content):
        modified_content = pattern.sub(replacement, hosts_content)
    else:
        modified_content = f'{hosts_content}\n{replacement}'

    return modified_content

def main():
    parser = argparse.ArgumentParser(description='Modify the Hosts file.')
    parser.add_argument('--domain', required=True, help='Domain to modify in Hosts file')
    parser.add_argument('--ip', required=True, help='IP address to set for the domain')
    args = parser.parse_args()

    with open('/etc/hosts', 'r') as file:
        hosts_content = file.read()

    modified_content = modify_hosts(hosts_content, args.domain, args.ip)

    with open('/etc/hosts', 'w') as file:
        file.write(modified_content)

if __name__ == '__main__':
    main()

通过运行python hosts_tool.py --domain example.com --ip 127.0.0.1,我们就能够方便地修改Hosts文件了。

完善工具

为了让工具更加健壮和易用,可以进一步添加功能,比如备份原Hosts文件、支持多个域名的同时修改等。

以下是一个增加备份功能的例子:

# hosts_tool.py
import argparse
import re
import shutil
import datetime

def backup_hosts(hosts_path):
    backup_path = f'{hosts_path}_backup_{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    shutil.copyfile(hosts_path, backup_path)
    print(f'Backup created at {backup_path}')

def modify_hosts(hosts_content, domain, ip):
    pattern = re.compile(fr'(\b{ip}\b).*\b{domain}\b')
    replacement = f'{ip} {domain}'

    if pattern.search(hosts_content):
        modified_content = pattern.sub(replacement, hosts_content)
    else:
        modified_content = f'{hosts_content}\n{replacement}'

    return modified_content

def main():
    parser = argparse.ArgumentParser(description='Modify the Hosts file.')
    parser.add_argument('--domain', required=True, help='Domain to modify in Hosts file')
    parser.add_argument('--ip', required=True, help='IP address to set for the domain')
    parser.add_argument('--backup', action='store_true', help='Backup the original Hosts file')
    args = parser.parse_args()

    hosts_path = '/etc/hosts'

    if args.backup:
        backup_hosts(hosts_path)

    with open(hosts_path, 'r') as file:
        hosts_content = file.read()

    modified_content = modify_hosts(hosts_content, args.domain, args.ip)

    with open(hosts_path, 'w') as file:
        file.write(modified_content)

if __name__ == '__main__':
    main()

多域名修改支持

在进一步完善Hosts修改工具时,可以考虑支持同时修改多个域名的功能。为了实现这一点,需要对命令行参数进行修改,使其能够接受多个域名和对应的IP地址。

以下是一个相应的例子:

# hosts_tool.py
import argparse
import re
import shutil
import datetime

def backup_hosts(hosts_path):
    backup_path = f'{hosts_path}_backup_{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    shutil.copyfile(hosts_path, backup_path)
    print(f'Backup created at {backup_path}')

def modify_hosts(hosts_content, modifications):
    for domain, ip in modifications.items():
        pattern = re.compile(fr'(\b{ip}\b).*\b{domain}\b')
        replacement = f'{ip} {domain}'

        if pattern.search(hosts_content):
            hosts_content = pattern.sub(replacement, hosts_content)
        else:
            hosts_content = f'{hosts_content}\n{replacement}'

    return hosts_content

def main():
    parser = argparse.ArgumentParser(description='Modify the Hosts file.')
    parser.add_argument('--backup', action='store_true', help='Backup the original Hosts file')
    parser.add_argument('modifications', nargs='+', metavar='domain:ip', help='Domain and IP pairs to modify in Hosts file')
    args = parser.parse_args()

    hosts_path = '/etc/hosts'

    if args.backup:
        backup_hosts(hosts_path)

    modifications = {}
    for modification in args.modifications:
        domain, ip = modification.split(':')
        modifications[domain] = ip

    with open(hosts_path, 'r') as file:
        hosts_content = file.read()

    modified_content = modify_hosts(hosts_content, modifications)

    with open(hosts_path, 'w') as file:
        file.write(modified_content)

if __name__ == '__main__':
    main()

通过运行python hosts_tool.py --backup example.com:127.0.0.1 google.com:192.168.1.1,可以同时修改多个域名的Hosts记录。

异常处理

为了增加工具的稳定性,可以加入异常处理机制。如果在文件操作或Hosts修改过程中发生错误,希望程序能够 graceful 地处理并给出有用的提示。

以下是一个简单的异常处理示例:

# hosts_tool.py
import argparse
import re
import shutil
import datetime

def backup_hosts(hosts_path):
    backup_path = f'{hosts_path}_backup_{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    shutil.copyfile(hosts_path, backup_path)
    print(f'Backup created at {backup_path}')

def modify_hosts(hosts_content, modifications):
    for domain, ip in modifications.items():
        pattern = re.compile(fr'(\b{ip}\b).*\b{domain}\b')
        replacement = f'{ip} {domain}'

        if pattern.search(hosts_content):
            hosts_content = pattern.sub(replacement, hosts_content)
        else:
            hosts_content = f'{hosts_content}\n{replacement}'

    return hosts_content

def main():
    parser = argparse.ArgumentParser(description='Modify the Hosts file.')
    parser.add_argument('--backup', action='store_true', help='Backup the original Hosts file')
    parser.add_argument('modifications', nargs='+', metavar='domain:ip', help='Domain and IP pairs to modify in Hosts file')
    args = parser.parse_args()

    hosts_path = '/etc/hosts'

    try:
        if args.backup:
            backup_hosts(hosts_path)

        modifications = {}
        for modification in args.modifications:
            domain, ip = modification.split(':')
            modifications[domain] = ip

        with open(hosts_path, 'r') as file:
            hosts_content = file.read()

        modified_content = modify_hosts(hosts_content, modifications)

        with open(hosts_path, 'w') as file:
            file.write(modified_content)

        print('Hosts file modified successfully!')

    except Exception as e:
        print(f'Error: {e}')

if __name__ == '__main__':
    main()

这样,无论是文件不存在、无法写入,还是其他潜在的异常情况,都能够捕获并给出明确的错误提示。

总结

在这篇文章中,深入探讨了如何使用Python创建一个强大而实用的Hosts文件修改工具。通过详细的步骤和丰富的示例代码,覆盖了文件备份、多域名修改、异常处理等关键功能,并逐步完善工具的稳定性和扩展性。这个例子涵盖了许多常见的Python编程技能,包括文件操作、正则表达式、命令行工具设计、异常处理等,帮助大家更好地理解和应用这些技能。

通过实现Hosts修改工具,能够掌握文件操作的基本原理,了解如何设计命令行工具以及如何处理异常情况。同时,通过添加多域名修改支持和异常处理机制,使工具更加健壮和用户友好。最后,提出了进一步扩展功能的思路,让大家有机会在这个基础上继续探索,提高其Python编程的实际应用水平。

总体而言,这个Hosts修改工具是一个综合性的实际项目,通过逐步完善其功能,可以加深对Python编程的理解,并将学到的知识更灵活地应用到其他项目中。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/227685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js 学习总结(4)—— Vue3响应式系统原理

概念 响应式是指当数据发生变化时,系统会自动更新与数据相关的 DOM 结构。在 Vue2 中,响应式系统的实现基于 Object.defineProperty。然而,Object.defineProperty 有一些局限,如:无法监听数组的变化、需要遍历对象的每…

MS8091/2运算放大器可Pin to Pin兼容AD8091/2

MS809x 系列是一种易用的、低成本的轨到轨输出电压反馈放大器,它具有典型的电流反馈放大器带宽和转换率的优势,同时也有较大的共模电压输入范围和输出摆幅,这使它很容易在单电源 2.5V 的低压情况下工作。可Pin to Pin兼容AD8091/AD8092。 虽然…

DAP数据集成与算法模型如何结合使用

企业信息化建设会越来越完善,越来越体系化,当今数据时代背景下更加强调、重视数据的价值,以数据说话,通过数据为企业提升渠道转化率、改善企业产品、实现精准运营,为企业打造自助模式的数据分析成果,以数据…

快捷支付是什么?快捷支付好申请吗?

快捷支付是指用户在购买商品时,不需要打开网上银行,只需提供银行卡号码、户名、手机号码等信息,银行验证手机号码的正确性,输入动态密码即可完成支付,无需打开网上银行。持卡人将银行卡绑定到第三方支付应用程序&#…

高并发爬虫用Python语言适合吗?

不管你用什么语言没在进行高并发前,有几点是需要考虑清楚的,;例如:数据集大小,算法、是否有时间和性能方面的制约,是否存在共享状态,如何调试(这里指的是日志、跟踪策略)…

成品短视频app源码行业前沿趋势

随着移动互联网技术的不断发展和智能手机的普及,视频已经成为人们获取信息、娱乐和交流的主要形式之一。在这一趋势下,成品短视频app源码应运而生,成为用户创作、分享和观看短视频内容的重要平台。本篇文章将为您揭示成品短视频app源码行业的…

在intelliJ spring boot gradle插件3.2.0中未找到匹配的变量

我正在尝试使用spring启动Gradle插件的版本3.2.0。这是我的build.gradle文件: plugins {id javaid org.springframework.boot version 3.2.0id io.spring.dependency-management version 1.1.4 }group com.yaxin version 0.0.1-SNAPSHOTjava {sourceCompatibilit…

计算机毕业设计 基于大数据的智能家居销量数据分析系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

超大规模集成电路设计----FPGA时序模型及FSM的设计(八)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----RTL级设计之FSM(八) 7.1 CPLD的时序模型7.1.1 XPLA3 时序模型7.1.…

[Linux] Bash脚本多函数应该如何执行?使用eval提高脚本编写效率!

在工作过程中经常会编写一些测试脚本,有些脚本里有多个函数,要通过用户输入执行对应的函数,如这样: 这也太麻烦了吧 执行如下: 这样在函数多的情况下需要写很多判断,效率低下。 我们可以使用eval命令来进行…

MySQL之数据库及表操作

MySQL之数据库及表操作 文章目录 MySQL之数据库及表操作一、数据库的基本结构二、数据库的创建和删除三、数据表的结构定义和操作四、数据的插入五、主键和自增长属性1、什么是主键2、自增长属性 一、数据库的基本结构 数据库系统由数据库服务器为载体,拥有一个或者…

pymol使用

1.pymol使用小技巧8-选取配体周围氨基酸 select ligand,resn x[/code] PS: x为配体名字 color red, ligand[/code] select 5A, byres ligand around 5[/code] PS: 配体5埃范围内的残基 show sticks, 5A color yellow, …

区块链媒体:Web3.0时代的推广创新10爆款策略概览-华媒舍

随着Web3.0时代的到来,互联网推广正经历着一场创新的革命。在这个新的时代背景下,一系列全新的推广策略正在兴起,引领着市场的变革。本文将基于这一背景,为大家介绍Web3.0时代中的10大爆款推广策略概览。 1. 个性化推广 在Web3.0…

在 JavaScript 中导入和导出 Excel XLSX 文件:SpreadJS

在 JavaScript 中导入和导出 Excel XLSX 文件 2023 年 12 月 5 日 使用 MESCIUS 的 SpreadJS 将完整的 JavaScript 电子表格添加到您的企业应用程序中。 SpreadJS 是一个完整的企业 JavaScript 电子表格解决方案,用于创建财务报告和仪表板、预算和预测模型、科学、工…

移动app测试要不要做第三方软件测试?

移动app测试是指通过对移动应用进行全面的评估和验证,以确保其功能和性能符合设计要求,以提供给用户最好的体验。通常包括功能测试、界面测试、性能测试、兼容性测试等多个环节。由于现在越来越多的软件企业会选择将测试工作交由第三方软件测试进行&…

PHP 阿里云短信服务

目录 1、申请3个月免费短信 2、获取阿里云AccessKey ID 和 AccessKey Secret 3、php安装阿里云sdk 4、复制下面代码调用sdk替换自己key、运行该代码 1、申请3个月免费短信 2、获取阿里云AccessKey ID 和 AccessKey Secret 3、php安装阿里云sdk 开发文档短信服务_SDK中…

在linux上如何运用虚拟数据优化器VDO

本章主要介绍虚拟化数据优化器。 什么是虚拟数据优化器VDO 创建VDO设备以节约硬盘空间 16.1 了解什么是VDO VDO全称是Virtual Data Optimize(虚拟数据优化),主要是为了节省硬盘空间。 现在假设有两个文件file1和 file2,大小都是10G。file…

docker安装node及使用

文章目录 一、安装node二、创建node容器三、进入创建的容器如有启发,可点赞收藏哟~ 一、安装node 查看可用版本 docker search node安装最新版本 docker install node:latest二、创建node容器 docker run -itd --name node-test node–name node-test&#xff1…

HarmonyOS4.0从零开始的开发教程05 应用程序入口—UIAbility的使用

HarmonyOS(三)应用程序入口—UIAbility的使用 UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个UIAbility实例,…

视觉资料记录

1. 江南才尽,年少无知!_RK3399移植,(02)Cartographer源码无死角解析-免费,(01)ORB-SLAM2源码无死角解析-免费-CSDN博客江南才尽,年少无知!擅长RK3399移植,(02)Cartographer源码无死角解析-免费,(01)ORB-SLAM2源码无死角解析-免费,…