精华内容
下载资源
问答
  • 一般来说代理IP断开重连就能就会为你重新分配IP了 1.在网络设置中手动创建一个vpn连接 比如我创建的名称为conname地址为 gaosama.5464.org 账号为 aaa1密码为 aaa2 2.使用cmd命令进行连接 rasdial nameaccount ...

    一般来说代理IP断开重连就能就会为你重新分配IP了

    1.在网络设置中手动创建一个vpn连接

    比如我创建的名称为conname 地址为 gaosama.5464.org 账号为 aaa1 密码为 aaa2

    2.使用cmd命令进行连接

    rasdial name account password

    实例:rasdial conname aaa1 aaa2

    3.使用cmd命令断开连接

    rasdial name /disconnect

    实例:rasdial conname /disconnect

    4.在python中调用cmd命令

    import os
    
    #连接
    cmd = 'rasdial conname aaa1 aaa2'
    connect_result = os.popen(cmd)
    result_str = connect_result.read()
    print(result_str)
    
    #断开
    cmd = 'rasdial conname /disconnect​​​​​​​'
    connect_result = os.popen(cmd)
    result_str = connect_result.read()
    print(result_str)
    
    

     

     

     

    展开全文
  • 不过用编辑器看二进制值,确实发现代理IP地址和自动配置脚本的地址都在里面。 那怎么办呢?AHK可不会操作二进制,也没什么方法能用 reg add 命令行直接把二进制值注入。 然后又进入无尽的百度模式。 注册表的...

    转载:http://www.jianshu.com/p/49c444d9a435


    文/solomonxie(简书作者)
    原文链接:http://www.jianshu.com/p/49c444d9a435
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    声明下:不同于网络上千百篇方法,下文是经过各种严格测试都通过的,同时也是一个实验的过程,排除了各种不靠谱的方法。有需要的可以评论来讨论,想要源码和相关参考文献或笔记的,也可以找我。

    思路及启发

    先说一下我这一路实验的思路吧,这个至关重要。
    之前一直在用Python做爬虫抓取数据,发现本机IP的问题不解决,爬虫相当于白费了。然后各种百度,不管是用urllib2还是requests的代理设置,都不管用。然后又各种搜索Python更改windows代理的设置,还需要接触windos底层API,有复杂又不好实现。于是爬虫的学习就放弃了好长一段时间。
    最近因为一直在用AutoHotkey大大加快电脑操作效率,各种快捷键和代替手动操作一些常规系统设置。突发奇想,想让它自动打开IE的Internet设置,然后自动点击“局域网设置”,在自动在代理框里输入IP地址,按回车完成设置。这真是个好主意~
    不过失败了。。。因为AHK在IE设置弹出的框框中选择某一个输入框,很麻烦,我也没法实现。所以就在想另一个办法,因为AHK操作Windows的cmd命令很方便,所以在想能不能用它打开cmd然后用命令设置IE呢?
    然后又各种百度。发现这是可以通过reg add注册表设置来实现的!于是,就开启了reg命令的百度之旅。
    按照网上各种方法,都指向了注册表的这个地方:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
    大家都说在这个路径下,有这么3个项非常重要:

    • ProxyEnable - 使用代理
    • ProxyServer - 代理IP的地址及端口号
    • AutoConfigURL - 自动配置脚本(PAC)的地址
      于是试着用reg add命令操作:
      reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /tREG_DWORD /d 1 /f
      reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d"192.168.1.1:8080" /f
      这两句第一个是打开“代理”,第二个是设置代理的IP地址。
      先在命令行里敲了下命令,然后打开regedit注册表,刷新下看,还真改了!
      然后手动打开IE设置,发现里面的内容也确实改变了。然后再打开浏览器,打开IP查询的网址,自己的IP真的变了!
      至此以为大功告成了。结果再用时,发现大错特错——
      再次用命令行改我指定的IP地址后,网页打不开了。。。
      来回反复调试查错之后,我发现一个“大秘密”:如果不手动打开IE设置里的局域网设置窗口的话,所有代理设置是不生效的。这是为什么呢?
      百度里搜索不到。
      于是我就用英文到Stackoverflow去搜,结果发现实际影响本机代理的注册表项目并不是之前的那几个!(真怀疑网上那些人说自己用这个项达到定时设置代理的人是不是玩真的。。。)
      而是这个位置的项:
      HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections
      其中的DefaultConnectionSettings才是真正需要改的东西。打开以后各种乱码,原来是二进制值。
      不过用编辑器看二进制值,确实发现代理IP地址和自动配置脚本的地址都在里面。
      那怎么办呢?AHK可不会操作二进制,也没什么方法能用reg add命令行直接把二进制值注入。
      然后又进入无尽的百度模式。

      注册表的二进制项修改方式的突发奇想

      忘了什么启发的我吧,好像是自己无聊到在注册表上乱点,发现我刻意导出注册表。
      然后导出了下试试,发现是个.reg文件。然后无聊双击一下,发现可以把这个文件导入到注册表!
      于是灵光一闪,赶紧用文本编辑器打开这个.reg文件,发现里面是文字画的十六进制码,类似这样的:
      Windows Registry Editor Version 5.00
      [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections]
      "DefaultConnectionSettings"=hex:46,00,00,00,03,00,00,00,07,00,00,00,0e,00,00,\
      00,31,39,32,2e,31,36,38,2e,31,2e,31,3a,38,30,00,00,00,00,21,00,00,00,68,74,\
      74,70,3a,2f,2f,78,64,75,6f,74,61,69,2e,63,6f,6d,2f,70,52,73,4f,33,4e,47,52,\
      33,2d,2e,70,61,63,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00
      "SavedLegacySettings"=hex:46,00,00,00,c1,0c,00,00,07,00,00,00,0e,00,00,00,31,\
      39,32,2e,31,36,38,2e,31,2e,31,3a,38,30,00,00,00,00,21,00,00,00,68,74,74,70,\
      3a,2f,2f,78,64,75,6f,74,61,69,2e,63,6f,6d,2f,70,52,73,4f,33,4e,47,52,33,2d,\
      2e,70,61,63,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00

      于是最终答案就出来了(这里开始有Python介入)

      这个时候我还不知道这是正确答案,只是想试一试:
      用Python组成一段有效的二进制码(其实是十六进制) -> 把注册表值封装为reg文件 -> 通过命令行的reg import命令导入reg文件 -> 成功!
      然后问题就在于怎么安装正确的格式组成

    DefaultConnectionSettings十六进制值的分析

    于是继续到Stackoverflow上搜索DefaultConnectionSettings这个项中十六进制的读取问题。
    发现有一个人大概总结了每一位字节是代表什么,不过不够详细。地址在这里【How to set 'automatic configuration script' for a dial-up connection programmatically?
    然后开始做笔记:


    How to set 'automatic configuration script' for a dial-up connection programmatically?


    接着开始尝试对照着那段二进制值看一看。于是我把这段十六进制码做成PDF,方便做笔记,大概是这样的:


    _Windows代理设置注册表值的十六进制分析DefaultConnectionSettings


    实际的十六进制值果然和网上的不同。经过实验,后面一大段画删除线的,都是没用的,删除也没关系。实际上,它只有在你手动打开IE设置面板时,才自动加上的。不管它,实际上有用的十六进制并不长。总结下也就这么几位:
    46 00 00 00 00 00 00 00 开关 00 00 00 IP长度 00 00 00 IP地址 00 00 00 是否跳过本地代理 21 00 00 00 PAC地址
    其中,通过规律发现每个信息的分隔符是三个00,即00 00 00。上面有7个00的,因为没什么用我就不讲了(其实第四个代表自增数,直接为00就好了)
    当然,其中汉字的部分是十六进制格式的。
    这几个汉字,是其中最重要的信息,具体如下:

    • 开关(switcher): 主要代表IE设置中复选框的选中情况,你可以打开IE设置看看。以下是所有可用的值(括号中是我用的别名):
      0F全部开启(ALL);01全部禁用(Off)
      03使用代理服务器(ProxyOnly);05使用自动脚本(PacOnly);
      07使用脚本和代理(ProxyAndPac);09打开自动检测设置(D);
      0B打开自动检测并使用代理(DIP);0D打开自动检测并使用脚本(DS);
    • IP长度:必须是十六进制的,0就是00,7就是07,10就是0a,11是0b。在Python中,格式是0xa,所以需要把格式统一为注册表的标准。
    • IP地址:直接把IP安装每个字符转十六进制就好了。如果IP为空的话,就直接为00。这时会看到switcher后面跟了11个00。。。
    • 是否跳过本地代理:这段有点复杂,实际上我们几乎不用。如果不用的话直接为00就好了。但是用的话,就必须写为:附加信息长度00 00 00 附加信息这样的。
      • 附加信息:只能是这句话:<local>
      • 附加信息长度:因为附加信息是固定的,所以共7位,写为07就好了。
    • PAC地址:这个简单,直接把PAC地址翻译为十六进制就好了。如果没有则什么都不写。

    至此这段十六进制值就全部解析完毕了。
    剩下的就是把你需要的代理IP地址和PAC地址作为参数传进去就好了。然后把这段值封装到reg文件中的对应位置就完全ok了~这步太简单,就不用多说了。

    增加更方便的功能

    各种测试成功后,非常高兴。但是还有点余味不足,就想着多添加点方便的功能。
    这个Python文件的最后成品可以做到这些事:

    • 直接通过命令行传参数达到各种设置代理的效果。这个很自豪~第一次用系统参数功能,哈哈哈!
    • 在文件夹中直接双击达到效果
    • 在别的Python文件中(如爬虫)作为模块被使用
    • 被AHK调用

    在Autohotkey中调用——极其方便极其傻瓜式操作!

    不忘初心嘛~
    python处理一切完成后,又回到了AHK中。
    这一步可能也就写了几分钟,让AHK直接带参数打开python脚本就做到了。比如设置一个代理IP地址:

    path = "D:\setRegProxy.py" ;这里是python脚本的地址,随便放哪都行。
    key   = "0.0.0.0:80"  ;这里根据需要设置为代理地址
    Run % path " -o ProxyOnly " key

    这样就齐活了~
    当然,我的AHK脚本实现的功能比这个还要爽快——弹出一个小输入框,直接粘贴一个ip地址,按回车就能实现代理设置。

    Python脚本的源码(setProxy.py)

    只要机器上安装了Python 2.x版本就行,不需要依赖安装和设置其他任何东西。

    # coding:utf-8
    '''
      # Title   : setRegProxy
      # Author  : Solomon Xie
      # Utility : Via Registry key of windows, change proxy settings of IE on Windows.
      # Require : Python 2.x, Windows 7
      # Reg Path: HKUC\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections
      # Anlysis : 注册表的二进制值(及关键信息)如下:"46 00 00 00 00 00 00 00 开关 00 00 00 IP长度 00 00 00 IP地址 00 00 00 是否跳过本地代理 21 00 00 00 PAC地址"
      # Method  : 通过在cmd中导入reg文件的方式执行并立即生效。
      # Notes   : - 二进制值的设置选项在代码中已经体现了。本代码可以根据需要自动设置代理。
      # switcher: 开关:0F全部开启(ALL);01全部禁用(Off)
                  03使用代理服务器(ProxyOnly);05使用自动脚本(PacOnly);
                  07使用脚本和代理(ProxyAndPac);09自动检测设置(D);
                  0B自动检测并使用代理(DIP);0D自动检测并使用脚本(DS);
    '''
    import os, sys, re, getopt
    
    def regIESettings(op, noLocal=False, ip='', pac=''):
      '''
        # 根据需求生成Windows代理设置注册表的.reg文件内容
        # DefaultConnectionSettings项是二进制项
        # 而具体这个二进制文件怎么解析,在收藏的PDF中有详细解释。
      '''
      if not op : return
      # 如果是设置IP代理的模式 则检查IP地址的有效性(允许为空,但不允许格式错误)
      if 'Proxy' in op and not ip == '': 
        # if len(extractIp(ip))==0
        if 1 > len(re.findall('([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s*:{0,1}\s*([0-9]{1,5}){0,1}',ip)) :
          print '---Unexpected IP Address:%s---'%ip
          return
      options = {'On':'0F','Off':'01','ProxyOnly':'03','PacOnly':'05','ProxyAndPac':'07','D':'09','DIP':'0B','DS':'0D'}
      if op == 'Off':
        reg_value = '46,00,00,00,00,00,00,00,01'
      else:
        switcher = options.get(op)
        if not switcher:
          print '\n---Unexpected Option. Please check the value after [-o]---\n'
          return
        skipLocal = '07,00,00,00,%s'%__toHex('<local>') if noLocal else '00'
        reg_value = '46,00,00,00,00,00,00,00,%(switcher)s,00,00,00,%(ipLen)s,00,00,00,%(ip)s00,00,00,%(skipLocal)s,21,00,00,00%(pac)s' % ({ 'switcher':switcher,'ipLen':__toHex(len(ip)),'ip':__toHex(ip)+',' if ip else '','infoLen':__toHex(len('<local>')),'skipLocal':skipLocal,'pac':','+__toHex(pac) if pac else '' })
      settings = 'Windows Registry Editor Version 5.00\n[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections]\n"DefaultConnectionSettings"=hex:%s' % reg_value
      # print 'Using proxy address: %s' % ip
      print op, ip, pac
      print options[op] +'\n'+ __toHex(ip) +'\n'+ __toHex(pac)
      print settings
      # === 生成reg文件并导入到注册表中 ===
      filePath = '%s\DefaultConnectionSettings.reg'%os.getcwd() 
      with open(filePath, 'w') as f:
        f.write( settings )
      cmd = 'reg import "%s"' %filePath
      result  = os.popen(cmd)
      if len(result.readlines()) < 2 :
        print '---Successfully import proxy into Registry on this machine.---'
      return 
    
    def __toHex(obj):
      if   obj == '': return ''
      elif obj == 0 or obj == '0' or obj == '00': return '00'
      if isinstance(obj, str):
        rehex = [str(hex(ord(s))).replace('0x','') for s in obj]
        return ','.join(rehex)
      elif isinstance(obj, int):
        num = str(hex(obj)).replace('0x', '')
        return num if len(num)>1 else '0'+num # 如果是一位数则自动补上0,7为07,e为0e
    
    if __name__ == '__main__':
      # 获取文件外部参数
      # 用法:在命令行中输入setRegProxy.py -o "ProxyOnly" -l --proxy"0.0.0.0:80" -l
      opts, args = getopt.getopt(sys.argv[1:], 'o:p:a:l',['option=','proxy=','pac=','local'])
      print opts, args #调试用
      if len(opts) > 0:
        op, ip, pac = '', '', ''
        noLocal = False
        for o,a in opts:
          if   o == '-o' or o == '--option':  op = a
          elif o == '-p' or o == '--proxy' :  ip = a
          elif o == '-a' or o == '--pac'   : pac = a
          elif o == '-l' or o == '--local' : noLocal = False
        pac = 'http://xduotai.com/pRsO3NGR3-.pac' if not pac else pac
        if op == 'ProxyOff':
          regIESettings(op='Off', ip=ip, pac=pac, noLocal=noLocal)
          regIESettings(op='PacOnly', ip=ip, pac=pac, noLocal=noLocal)
        elif op == 'PacOff':
          regIESettings(op='Off', ip=ip, pac=pac, noLocal=noLocal)
          regIESettings(op='ProxyOnly', ip=ip, pac=pac, noLocal=noLocal)
        else:
          regIESettings(op=op, ip=ip, pac=pac, noLocal=noLocal)

    Autohotkey源码

    Autohotkey怎么用呢?太简单了,傻到爆!
    直接官网下载安装一个Autohotkey软件,也就几M。然后呢,新建一个文本文件,把下面内容粘贴进去。把文件名后缀改为.ahk,然后双击就启动了脚本哈哈!
    这时你试着按一下键盘上的ScrollLock键,就会弹出来一个对话框。效果是这样的:


    按下ScrollLock键后弹出的框框

    你可以在这里输入改代理的命令~ 我设计的命令都非常简单,如下:

    • 输入proxy,就会打开IE设置的窗口
    • 输入proxy 192.168.1.1:8080 ,就会把代理设置为这个IP
    • 输入proxy on,就会打开代理(但是IP为空)
    • 输入proxy off,就会关闭代理
    • 输入pac http://abc.com/123.pac,就开启某自动代理设置脚本
    • 输入pac off,就会关闭自动脚本

    输入指令的样子

    注意:

    1. 我这里注册的键是键盘上的ScrollLock按钮,按一下就有了。也可以自己设定一个。
    2. 下面的代码是处理过的,实际上这个按键远比它要方便的多:它是我的快速操作杀手锏,一条命令实现巨多功能。如有感兴趣的可以联系我讨论,或者看我的下一篇专门针对AHK的文章(如果我不犯懒写了的话)。
    3. 我设定的指令是proxy ??这样的,如果嫌长或者不方便,可以改为别的自己用着舒服的。甚至不用弹出框,直接按一下F1之类的就完成设置都可以。不过这就需要稍微了解下AHK语法啦~(也不难)
    ScrollLock:: 
    {
        ; --- 获取指令及关键词 ---
        InputBox, fullCommand, (Command Line Interface), Please give me a command:, , 600, 130 ;获取命令
        if (fullcommand = "")
            Return
        ; -- 解析命令 ---
        split  := " " 
        StringGetPos , posi, fullCommand, %split%
        if (posi > 0) {
            StringMid, eng, fullCommand, 0 , posi ;
            StringMid, key, fullCommand, posi+2 , StrLen(fullCommand)
        }
        else {
            eng := fullCommand
            key := ""
        }
            ; === 打开IE设置窗口的命令 ===
            ieSettings := "rundll32.exe shell32.dll, Control_RunDLL inetcpl.cpl, ,4L"
            ; === python脚本的地址 ===
        path  := "D:\Solomon Xie\Workspace\setRegProxy.py" ;Python设置代理脚本,可接收命令行参数
        ; ---开始执行操作---
        if      (eng = "" and fullcommand != "")
            Run % ieSettings
        else if (eng = "Proxy"){
            if (key = "")
                Return
            else if (key = "Off")
                Run % path " -o Off "
            else{
                if (key = "On")
                    key := "" ;“获取”历史IP值太麻烦 先为空吧
                else
                    key = "--proxy " %key%
                Run % path  " -o ProxyOnly " key
            }
        }
        else if (eng = "Pac" and key != "") {
            if (key = "" or key = "On")
                key = "http://xduotai.com/pRsO3NGR3-.pac"
            if (key = "Off")
                Run % path  " -o Off "
            else {
                key = "%key%"
                Run % path " -o PacOnly --pac " key
            }
        }
        Return
    }

    展开全文
  • Python 实现windows下自动切换代理IP

    千次阅读 2018-08-21 20:01:32
    简介:利用python实现windows下“打开代理”和“关闭代理切换 原理:通过修改注册表 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 下的子项,能够设置IE代理,...

    简介:利用python实现windows下“打开代理”和“关闭代理”切换

    原理:通过修改注册表 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 下的子项,能够设置IE代理,然后通过代理可以上网或做其它事情。基于该原理通过python脚本调用winreg模块来访问和操作注册表,达到自动切换代理的目的

    import winreg
    
    #########################################################################
    KEY_ProxyEnable = "ProxyEnable"
    KEY_ProxyServer = "ProxyServer"
    KEY_ProxyOverride = "ProxyOverride"
    KEY_XPATH = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    #########################################################################
    
    '''
    设置代理
      enable: 0关闭,1开启
      proxyIp: 代理服务器ip及端口,如 "192.168.70.127:808"
      IgnoreIp:忽略代理的ip或网址,如 "172.*;192.*;"
    '''
    def SetProxy(enable, proxyIp, IgnoreIp):
        hKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, KEY_XPATH, 0, winreg.KEY_WRITE)
        winreg.SetValueEx(hKey, KEY_ProxyEnable, 0, winreg.REG_DWORD, enable)
        winreg.SetValueEx(hKey, KEY_ProxyServer, 0, winreg.REG_SZ, proxyIp)
        winreg.SetValueEx(hKey, KEY_ProxyOverride, 0, winreg.REG_SZ, IgnoreIp)
        winreg.CloseKey(hKey)
    
    # 获取当前代理状态
    def GetProxyStatus():
        hKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, KEY_XPATH, 0, winreg.KEY_READ)
        retVal = winreg.QueryValueEx(hKey, KEY_ProxyEnable)
        winreg.CloseKey(hKey)
        return retVal[0]==1
    
    def main():
        if GetProxyStatus():
            SetProxy(0, "", "")
            print("关闭代理")
        else:
            SetProxy(1, "192.168.70.127:808", "172.*;192.*;")
            print("打开代理")
    
    if __name__ == '__main__':
        main()

     

    展开全文
  • Python实现 windows 下代理IP自动切换
  • 我用Python自动代理服务IP的经过

    千次阅读 2016-03-26 21:23:45
    应朋友要求实现一个动态切换代理服务器IP的功能,朋友只发了一个博客链接给我,用Python做的,当时我对Python并不熟悉,但是那篇博客中的思路确实很清晰,于是决定安装Python,按照博客的思路,一步一步的走下去。...

    应朋友要求实现一个动态切换代理服务器IP的功能,朋友只发了一个博客链接给我,用Python做的,当时我对Python并不熟悉,但是那篇博客中的思路确实很清晰,于是决定安装Python,按照博客的思路,一步一步的走下去。

    做事之前,我需要搞明白,动态切换代理服务器IP到底是什么意思?具体的工作原理是什么?于是,搜索代理服务器,找到了squid(Linux下的一个开源代理法服务器软件),了解了传统代理服务器工作的基本原理,并在Linux上安装了一下,做了一个实验,写了一篇博客。了解了代理服务器的基本原理之后,开始了正式的摸索之旅。

    第一步,安装Python。第一反应就是去Python官网下载Python。这里出现了一个选择Python版本的问题,Python2和Python3到底选哪个呢?既然别人博客中用的是Python2,那我也就用Python2了,管他好坏呢,先把Demo跑出来再说。既然有了开发语言,选择什么集成开发环境呢?本人科班出身,当初接收的“传统”思想是,C/C++,底层开发语言,有挑战性,Java都是封装好的,比较傻,所有我有了莫名讨厌Java的情感(现在想想,这个想法和现在的IT发展有点偏离),但现在很多情况下都要求会Java。不是怕自己学不会Java,只是没有找到一个说服自己学习Java的理由,就是不想碰他,但是工作又需要它,好了,有点扯远了。于是,就抱着同时用一个集成开发环境来学习Java和Python的想法,我选择了用Eclipse。至此,开发环境搭建完成。

    第二步,学习Python的基本语法。因为,有C/C++,PHP,SHELL,Matlab的编程集基础,我第以反应就是,只要我了解一些Python的基本书法和数据结构,我就能把它用起来,熟练还是不熟练又是另一回事,反正只是为了跑Demo嘛。我选择了Python的基础在线教程,了解Python的变量类型、定义方法、数据结构、for、while循环、函数的声明和定义之后,我就开始了使用Python的路程。

    第三步,按照博客中的说明,用Python跑通Demo。这期间由于对Python的不熟悉,多次使用了Google、Baidu以及Python开发手册,主要涉及注册表的编程。果然,按照博客中的做法,很快的实现了动态服务器IP自动切换的功能。

    第四步,将Demo打包成exe。这个过程比较简单,搜索了一下,大家用的比较多的就是Pyinstaller和Py2exe,我在一篇博客中看到说Py2exe不太好用(没有实际体验过),所以直接选择了Pyinstaller。先做一个打包成exe的“Hello word” Demo,看了几篇别人的博客,很快的解决了打包成exe的问题。

    第五步,将Python打包成的exe安装成Windows系统服务。类似的功能我之前在Windows上用C++做过,于是回去搜索自己以前写的C++服务Demo,用C++写了两天,发现好烦啊,还费事,开发效率太低了,于是我想能不能用Python做Windows服务程序呢,答案是肯定的,而且按照博客上的说明,我很快的完成了实现编译成Windows服务的Demo。于是开始将自动切换代理服务器IP的Demo和Windows服务Demo做在一起!窃喜,觉得大功快要告成了!!!其实,真正的困难才刚刚开始。

    困难1:将服务编译成exe并安装,启动服务,完了,服务无法启动!为神马这样子?我完全不知道该从哪开始调试。抓抓头发,从头做起吧,于是我先在Windows服务demo的基础上,一点一点添加代理服务Demo的代码,一点一点添加,最后发现,是读取配置文件的时候出错了,所以服务直接退出。读取配置文件出错?不应该了,我没编译成exe之前,一切都很正常啊?为什这样子?还是先看看日志吧!

    困难2:无法写日志。不编译成exe执行,一点问题没有,编译成exe之后,写日志就是不成功!你这是要闹哪样啊?经过了长久的摸索,此处略去一万字,耗了我一天!最后,我将程序获取的路径换成了固定的绝对路径,日志正常输出,天啊,我getcwd()错在哪了,也是绝对路径啊?最后,也没搞明白为神马,项目中还是选择了使用固定绝对路径。困难2解决了,服务可以正常运行,日志可以正常输出,可是代理服务IP就是没有切换过来?
    又经过了半天的Google、baidu、stackover,思路逐渐确定,确定是Windows权限问题,因为操作了注册表。以前觉得Windows傻乎乎的能有什么限制,现在想想,我错了!就算是有权限限制,那我应该在哪设定呢?打开服务services.msc,查看服务器的属性,发现有一个登陆和切换用户的选项,于是填入了Administrator,输入开机密码,应用、确定,启动服务器,奇迹出现了,代理IP可以自动切换了,Happy,但是已经到深夜,一天又耗过去了!

    困难3:本来以为上面的所有问题解决了,也就可以打包,发给朋友!可是朋友用的时候,在IP里面搜索IP,一直是本机IP,并不是代理服务器的IP,靠,我机器上明明是可以的啊!于是又Goolge、baidu、stackover,最后发现,是因为IE浏览器缓存了代理服务器的IP,所以切换不过来,实际上已经切换过来了,于是使用这个网页中的方法,解决了我的问题,可以实时的看到代理IP的切换了。

    感悟:Demo只能是Demo,真正做一个稳定、可用的软件,还是需要克服种种问题!Demo就是温室的花朵,在温室内长的枝繁叶茂,一旦走出温室,之后被Kill了!真正能在复杂环境下能够正常工作的软件,既需要整体的良好架构,也需要后期慢慢的雕琢!

    实现代码:http://download.csdn.net/detail/guoxiaojie_415/9729050

    展开全文
  • 脚本是用python写的,用pyinstaller生成可执行文件,可以获取西刺代理的免费高匿IP,并进行连接测试,记录连接成功的代理IP,以备使用,实现了半自动切换本机的代理IP,脚本在win10 64为环境中测试,win7 64位测试...
  • python IP代理爬虫,download 代理IP

    千次阅读 2013-08-13 18:24:31
    本人小白,自己写来试试的,打算以后做个自动切换HTTP代理Python程序那,第一次写博客,大家多包涵哈。#-*- coding: utf-8 -*- import re import urllib2 import sys import time import os def search_url_1...
  • selenium主要实现模仿人来操作来 自动填写数据,点击按钮,操作dom,缩放浏览器,切换浏览器标签,扩展外部js功能等。selenium不好操作的功能可以用js来操作,比如 自动填写数据,点击按钮,...
  • Python杂项

    2019-05-17 09:05:34
    1、开始打算是每个代理ip跑5次后,自动切换到下一个ip,采用的是对中需要爆破的用户名、密码进行分组,但是写完后发现,为了增加破解的准确性,每次都要验证代理ip可用性,每个相同ip可能就要验证5次,不够高效,...
  • Python爬虫之selenium

    2020-05-10 12:08:35
    Python爬虫之selenium一:Selenium介绍二:selenium常用操作2.1 关闭页面2.2:定位元素2.3:操作表单元素2.4 行为链2.5 Cookie操作2.6 页面等待2.7 切换页面2.8 设置代理ip2.9 WebElement元素2.10 无界面浏览器 ...
  • 网站的反爬机制检查访问的IP地址,为了防止IP被封印,可以使用代理IP切换不同的IP爬行内容 在使用代理ip时,必须选择高匿名、高性能的付费代理ip哦。高质量HTTP代理,免费送10000个IP测试,注册自动
  • 这种情况最好的办法就是维护一个代理IP池,网上有很多免费的代理IP,良莠不齐,可以通过筛选找到能用的。对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。 proxies = {'...
  • 09 FTP之cd切换 11 FTP之创建文件夹及MD5校验思路 第33章 01 操作系统历史 02 进程的概念 03 线程的概念 04 线程的调用以及join方法 05 setDaemon方法和继承式调用.baiduyun.downloading 05 setDaemon方法和继承式...
  • 部分商业网站对爬虫程序限制较多,...同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定的数据采集。以python的demo为例: from selenium import webdriver import string im
  • 如果不希望代理访问内网(避免 SSRF 风险),可执行 setup-ipset.sh: /home/jsproxy/server/setup-ipset.sh 需要 root 权限,依赖 ipset 命令 该脚本可禁止 jsporxy 用户访问保留 IP 段(针对 TCP)。nginx 之外...
  • 代理自动切换 服务商支持: DNSPOD 阿里 DNS DNS.COM(@loftor-git) DNSPOD 国际版 CloudFlare(@tongyifan) HE.net(@NN708) (不支持自动创建记录) 华为云(@cybmp3) 其他: 可设置定时任务 ...
  • 主节点宕机后自动切换提升子节点为主节点 主节点恢复后自动恢复为真实主节点 配置通过主节点同步到所有子节点 主节点配置修改后无需重启子节点,支持自动更新 子节点消息实时同步到主节点 使用 将配置文件的中 ...
  • CVE-2020-2546,CVE-2020-2915 CVE-2020-2801 CVE-2020-2798 CVE-2020-2883 CVE-2020-2884 CVE-2020-2950 WebLogic T3 payload exploit poc python3|CVE-2020-2883-Weblogic coherence.jar RCE|WebLogic-Shiro-shell...
  • 下载流程:清理进程和数据(包括修改设备信息)、切换IP、登录appID、打开App Store、在App Store搜索应用、下载并安装app(打码)、注销app ID、关闭App Store、卸载app 评论流程:在下载流程的基础上进行评论 ...
  • 【源GitHub仓库】 | 【Gitee镜像库】如果本文档图片没有显示,请手动切换到Gitee镜像库阅读文档。 :open_book:省市区数据采集并标注拼音、坐标和边界范围 省市区镇四级数据在线测试和预览(支持转换成JSON、多级...
  • 4.2.8 如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。 4.2.9 请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用。 4.3.0 深拷贝和浅拷贝区别。 ...
  • 小伙伴想学Jenkins自动构建发布项目,我:安排上了!! 分布式存储 冰河又一超硬核分布式存储PDF教程免费开源!! FastDFS 分布式文件系统的安装与使用,看这一篇就够了!! 如何打造一款高可用的分布式文件系统...
  • 支持手动和自动加解密,自定义密码,密文风格切换 - 更多介绍 ✅ 网费很贵:用于统计上网时间的浏览器扩展。多种统计口径,丰富的图表展示,支持数据导出 - 更多介绍 2021年3月23号添加 bisz-dev (深圳) ✅...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

python自动切换代理ip

python 订阅