通过python切换hosts文件

  做开发或测试时常需要切换hosts ,如果hosts比较多,那么频繁的打开hosts文件对地址加注释(#),再把去掉注释是个繁琐的事情。

当然,SwitchHosts 已经可以帮我们方便的解决了这个繁琐的事情。

https://github.com/oldj/SwitchHosts

  但笔者还是自己尝试用python写个小程序来实现切换。以需求为驱动来解决日常的问题是件非常有意思的事。

 

假如我们有一组hosts:

172.168.12.107    www.baidu.com
172.168.10.213    account.baidu.com
172.168.12.107    pan.baidu.com
172.168.12.107    passport.baidu.com
172.168.10.129    is.baidu.com
172.168.12.107    un.baidu.com

写代码之前想清楚几点。

1、hosts 文件一般放在我们的C:\WINDOWS\system32\drivers\etc\目录下,没有扩展名。我们可以通过记事本打开。python 的os模块可以用于打开本地文件。

2、我们要做的操作也很简单,加注释(加#号),去掉注释(去掉#号)。去掉注释时,当我打开浏览器访问www.baidu.com 时,其实访问的是本地的,172.168.12.107 主机。加上注释时,那么访问的就是真的百度服务器。

3、我们要做的操作是判断,每一行数据的第一个字符是否有#号,没有的话就加上。

 

打开python shell 练习加“#”号操作

>>> abc = '127.168.10.107 www.baidu.com'
>>> a = abc[0]
>>> if a != '#':
    nabc = '#'+abc
    print nabc

#127.168.10.107 www.baidu.com

  定义abc字符串,abc[0] 表示取字符串的第一个字符,判断是是否为#号,如果不是,就把#号加到abc字符串的前面。

添加注释的完整代码入下:

#coding=utf-8
import os

def add_jing():
    input = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'r')
    lines = input.readlines()
    input.close()

    output = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'w')
    for line in lines:
        if not line:
            break
        jing = line[0]
        if jing != '#':
            print line
            nf = '#' + line
            output.write(nf)
        else:
            output.write(line)

  output.close()
if __name__ == "__main__":
    add_jing()

  程序先以读(r)的方式打开HOST文件,readlines() 方法逐行的读取内容。然后,close()关闭文件。

  程序再以写(w)的方式打开HOST文件,对readlines() 获取的每一行数据判断是否有#号,没有的话加上。并通过write() 方法写入到HOST文件中。最后close()关闭文件。

 

 

打开python shell 练习“#”号操作:

>>> abc = '#127.168.10.107 www.baidu.com'
>>> a = abc[0]
>>> if a == '#':
    nabc = abc.replace('#','')
    print nabc

127.168.10.107 www.baidu.com

  同样取字符串的第一个字符判断,如果是#号,那么通过replace()方法 将#号替换成空(’’)

去掉注释的完整代码:

def del_jing():
    input = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'r')
    lines = input.readlines()
    input.close()

    output = open(r'C:\WINDOWS\system32\drivers\etc\HOSTS', 'w')
    for line in lines:
        if not line:
            break
        jing = line[0]
        if jing == '#':
            print line
            nf = line.replace('#','')
            output.write(nf)
        else:
            output.write(line)

  output.close()

if __name__ == "__main__":
    del_jing()

 

  通过运行add_jing() 和del_jing()两个函数的方式并不灵活。这里只是通过修改#的方式来切换hosts ,那么你也可以将hosts定义一个数组,直接写入到HOST文件。通过

写入不同的数组来达到切换不同hosts的目的。

#coding=utf-8
import os

'''内网测试环境'''
insides = ['172.168.12.107 www.baidu.com',
          '172.168.10.129 pan.baidu.com',
          '172.168.12.107 un.baidu.com',
          '172.168.12.107 passport.baidu.com']

'''外网测试环境'''
outsides = ['172.16.12.223 www.baidu.com',
            '172.16.10.223 pan.baidu.com',
            '172.16.12.111 un.baidu.com',
            '172.16.12.223 passport.baidu.com']

def inside_test():
    output = open(r'C:\pyse\HOSTS.txt', 'w')
    for insid in insides:
        print insid
        output.write(insid)
        output.write("\n")
    output.close()

def outside_test():
    output = open(r'C:\pyse\HOSTS.txt', 'w')
    for outsid in outsides:
        print outsid
        output.write(outsid)
        output.write("\n")
    output.close()    

if __name__ == "__main__":
    #inside_test()
    outside_test()

  上面的方式会更加简单,把定义的host数组写到HOST文件中,注意:每写一个数组元素需要加一个回车换行---write("\n")

 

  如果想继续增加切换host的便捷性,可以使用wxPython写一个host的配置界面出来,那么也就是我们的SwitchHosts 工具了。

 

 

时间: 2025-01-25 00:31:27

通过python切换hosts文件的相关文章

python切换hosts文件代码示例_python

win7以上需要使用管理员权限操作. 复制代码 代码如下: # -*- coding: utf-8 -*-import osimport globimport shutil def format_file_list(files):        all_files_str = ""        for i in range(len(files)):                all_files_str +=  str(i)+":"+files[i]+"

解决Win7系统修改hosts文件不能保存的问题

  由于软件注册的原因,我需要更改hosts文件来防止服务器验证!那么在我们修改这个文件的时候,修改完成之后发现保存不了,这种情况我们该怎样解决呢,难道就不能修改了吗?下面我们一起看看解决的方法吧 有时候我们要破解一些软件与服务器通讯,所以通常都需要更改Hosts文件来达到目的,XP系统可以直接修改保存,但是Win7系统却提示没有权限去修改,那么我们要怎样办呢,我们修改的是c:/windows/system32/drivers/etc下面的hosts文件. 首先打开该文件所在的文件,路径是:c:

如何使用瑞星保护HOSTS文件不被修改

Hosts文件中记录了对应主机名称的IP地址.恶意程序可以通过修改 Hosts 文件,使一些网站无法正常访问,甚至可以直接引导用户访问钓鱼网站,骗取用户账户和密码.如何使用瑞星保护Hosts文件不被修改呢? A.依次点击『开始』-『所有程序』-『瑞星全功能安全软件』或『瑞星杀毒软件』,启动『瑞星全功能安全软件』或『瑞星全功能安全软件』. B.点击『设置』菜单,切换至『电脑防护』选项卡,点击『系统加固』,『自定义级别](如图): C.然后选择『系统文件保护』,勾选『hosts文件』,然后将『触发规

huhamhire-hosts自动更新Google Hosts文件怎么办

  1.首先请确认系统是32位(x86)还是64位(x64)的,32位系统请使用x86版本,64位系统请使用x64版本.版本不对不能正常打开软件.不懂的请参考"怎么看电脑是32位还是64位". 2.切换服务器.软件默认为不可用的Google Code服务器,需要切换为其他3个任意一个服务器即可正常连接.连接显示为绿色"正常"才能进行下一步操作.提示:如果出现连接正常但是不能下载数据文件的情况,请换个时间再试. 3.下载Hosts文件.点击右边的下载按钮,底部进度条会

hosts文件找不到的解决方法

  还是先让大家了解下hosts文件的作用.hosts文件的作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析. 一般情况hosts文件是保存在C:windowsSystem32DriversEtc 文件夹上,学无忧安装是win7系统,在这个路径上就能找到这个hosts

Win7系统修改hosts文件不能保存的解决方法

  Win7系统修改hosts文件不能保存的解决方法,具体的操作步骤如下所示:  有时候我们要破解一些软件与服务器通讯,所以通常都需要更改Hosts文件来达到目的,XP系统可以直接修改保存,但是Win7系统却提示没有权限去修改,那么我们要怎样办呢,我们修改的是c:windowssystem32driversetc下面的hosts文件.  首先打开该文件所在的文件,路径是:c:windowssystem32driversetc  然后我们在该文件上面右键,选择属性选项  然后在打开的属性窗口中,我

huhamhire-hosts怎么自动更新Google Hosts文件?

  huhamhire-hosts是一款可以同步更新下载Google(谷歌)Hosts文件的神器,有了他就再也不用逐个寻找测试可用的谷歌服务器IP.谷歌Hosts文件了.从此,度娘不再是你的唯一,你可以再拥抱谷歌.Gmail可以上了,Google Drive可以用了,谷歌浏览器连上了,只要是谷歌的亲儿子你都可以看见了.很激动吧~~ huhamhire-hosts更新谷歌Hosts步骤1.首先请确认系统是32位(x86)还是64位(x64)的,32位系统请使用x86版本,64位系统请使用x64版本

Win7系统hosts文件修改后无法保存怎么办

win7系统用户在破解一些软件时,为了达到目的通常需要修改Hosts文件,我们知道XP系统是可以直接修改保存的,可是Win7系统却没有这个功能,只提示没有权限去修改,这就造成hosts文件修改完成后无法保存.那么遇到这种情况我们应该怎样办呢?下面小编就以win7 64位系统为例,带大家一起去学习下如何解决修改hosts文件之后不能保存的方法! 方法如下: 1.打开该文件所在的路径:c:windowssystem32driversetc; 2.右击该文件,选择"属性"选项; 3.在打开的

怎样突破Win8系统限制修改hosts文件

hosts文件是一种系统文件,它的作用是网址域名与对应IP建立关联的"数据库".当我们修改hosts文件时,Win8系统内置的安全软件Windows Defender就会出来干涉,如何阻止Windows Defender的这个行为呢? 其实只要按如下方法简单设置一下就可以了. 打开Windows Defender,切换到"设置"选项卡,点击左侧的"排除的文件和位置"选项,如图: 在右侧窗口中,点击"浏览"按钮,定位到C:Win