AD

python 代理自动切换及INI文件操作

# coding:UTF-8
#!C:/Python27
# Filename: proxy_auto.py\
#Author: KING RING
#Email:shuichon@qq.com
#Version:2.0
'''
设计理念:
通过控制台参数,实现根据主机网络环境进行自动代理切换
运行后先检查本机IP是否在需要代理的IP地址字典KEY的范围内。如果在
则根据对应的value自动切换代理
如果无,则提示是否为该IP设置代理,如果不需要设置代理,则退出。
代理服务器包括,proxy_ip proxy_port
主机网络环境主要为work_ip
根据host_ip的值,设置相对应的IE代理,如果无匹配的值,则禁用代理
'''

import io, sys, time,os,socket
import _winreg,doini
#复杂字符串分析,为chkip()模块提供支持
import re
#程序说明
print '''
proxy_auto 2.0 python script by KING RING
Email:shuichon@qq.com
Version:2.0'''

#获取当前IP地址
ip=(socket.gethostbyname(socket.gethostname()))
print(' now ip is '+ip)
xpath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, xpath, 0, _winreg.KEY_WRITE)


#本地网络地址列表
#work_ip={"127.0.0.1":None}
work_ip=['127.0.0.1']

#代理IP地址字典
pyips={}
pyip=''
#pyip=sys.argv[2]+':'+sys.argv[3]
tmpip=''

#检查当前IP是否已经存在work_ip列表内,返回bool值
def chkhave(m):
for i in work_ip:
if m==i:
return True
else:
return False
else:
return False

#获取用户输入的IP地址
#tmpip=input()

#定义check模块,检查是否是合法的IPv4地址,返回bool值
def chkip(s):
ipv4Pattern = r"\b(25[0-4]|2[0-4[0-9]|[01]?[0-9][0-9]?)\.(25[0-4]|2[0-4[0-9]|[01]?[0-9][0-9]?)\.(25[0-4]|2[0-4[0-9]|[01]?[0-9][0-9]?)\.(25[0-4]|2[0-4[0-9]|[01]?[0-9][0-9]?)\b"
if re.match(ipv4Pattern,s):
ip=re.findall(ipv4Pattern,s)
return True
else:
print('The ip address you input is invalid')
return False

#判断参数是否合法,返回bool值
def chkargv():
if chkip(sys.argv[2]) and (0 return True
else:
return False

#切换至相应代理(此处n为work_ip)
def swithpy(n):
#获得该IP对应的pyip
proxy=pyips[n]
try:
_winreg.SetValueEx(key, "ProxyEnable", 0, _winreg.REG_DWORD, 1)
_winreg.SetValueEx(key, "ProxyServer", 0, _winreg.REG_SZ, proxy)
print("have enable proxy!")
except Exception as e:
print("ERROR: " + str(e.args))
finally:
None

if len(sys.argv)<2:
if chkhave(ip)==False:
proxy=''
try:
_winreg.SetValueEx(key, "ProxyEnable", 0, _winreg.REG_DWORD, 0)
_winreg.SetValueEx(key, "ProxyServer", 0, _winreg.REG_SZ, proxy)
print('''
work_ip don't have this ip address!
please input '--help' behind the script.''')
except Exception as e:
print("ERROR: " + str(e.args))
finally:
None
else:
if sys.argv[1].startswith('--') and chkargv():
#新增proxy代理
pyip=sys.argv[2]+':'+sys.argv[3]

#取得argv参数列表内的第二个参数,去除前两个字符“--”
option=sys.argv[1][2:]
if option=='version':
print('''Proxy_auto 2.0 python script by KING RING''')
elif option=='help':
print('''
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : The version number of the pychon script
--help : Display this help
--add : Add using ip to using ip poor
exp:proxy_auto --add [proxy_ip]:[proxy_prot]
--dell : Del unusing ip from using ip poor
exp:proxy_dell [work_ip]
--show :show the list of all
''')
elif option=='add':
print('add IP & proxy')
doini.ini_add('proxylist',ip,pyip)
#work_ip.append(ip)
#pyips[ip]=pyip
print('have add the '+sys.argv[2]+':'+sys.argv[3]+' to the ini')
elif option=='del':
print('del work_ip and proxy')
#del work_ip[IP]
#del pyips[ip]
doini.ini_del(ip)
print('have del the '+ip+':'+sys.argv[2]+':'+sys.argv[3]+' from zhe pyips{}')
elif option=='show':
print('nothing')
else:
print('''Unknown option !
please input '--help' behind the script.''')

#sys.exit()
============================================================================================================
#!/usr/bin/env python
# -*- coding:gb2312 -*-

#Filename: doini.py
#Author: KING RING
#Email:shuichon@qq.com
#Version:1.0

'''ini文件格式
内含一个proxylist的section,格式为工作环境的地址workip对应
于代理服务器的地址proxyip
ini文件格式
[section]
options=[key] {该一对为一个items}
'''

import ConfigParser
workip="" #工作环境IP
proxyip="" #对应代理IP和端口
INITXT="f:/proxy.ini" #INI文件名字
#打开INI文件
config = ConfigParser.ConfigParser()
config.readfp(open(INITXT))

sections=config.sections()

'''
#输出所有section
print('section is ',sections)
#输出所有KEY-VALUE,即所以的items
v=config.items('proxylist')
print('items is ',v)
#输出所有的option,即KEY
key=config.options('proxylist')
print('key is ',key)
'''


def ini_get(workip): #读取INI
try:
#获取workip项的配置内容
proxyip = config.get("proxylist",workip)
print(workip,proxyip)
except Exception as e:
print '读取ini错误!',str(e)

def ini_add(sections,workip,proxyip):#写入INI
try:
print('好吧,我是打酱油滴~~~')
#判断是否已经存在该workip
print(config.has_option(sections,workip))
#看是否存在该Section,不存在则创建
if not config.has_section(sections):
config.add_section(sections)
config.set(sections,workip,proxyip)
#config.set("proxylist","proxyip",proxyip)
config.write(open(INITXT, "r+"))# 写入文件
except Exception as e:
print("写入INI错误",str(e))

#修改INI
def ini_del(workip):
try:
#global INITXT
#config.read(INITXT)
#看是否存在该option,即workip,此处sections默认为proxylist
if not config.has_option('proxylist',workip):
print("don't have this work ip !")
config.remove_option('proxylist',workip)
config.write(open(INITXT, "r+"))
except Exception as e:
print"修改INI错误",str(e)


ini_add('proxylist','1','2')
ini_add('proxylist','333','222')
ini_get('333')
ini_add('proxylist','123','3')
ini_get('tst')
ini_del('1')

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略