最近写一小工具,需要获取提供的url中的参数名,参数值,然后对每个参数值进行替换,但是在替换其中一个参数值的时候,其它参数值不变,由于是新手,不会写,请教了大牛,最终才搞定,分享一下。。。感谢北京安信华科技有限公司张*伦大牛的大力支持。
测试环境及需求:
测试环境:python 2.7.8 windows 7 x64位
测试url: http://www.waitalone.cn/index.php?id=123&abc=456&xxx=ooo
其实参数名值对个数不是固定的,这里我只是以3个为准测试。
payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd')
我想要实现的是这样的功能,首先遍历payloads,然后使用其payload替换url中的参数值,但是要在替换第一个参数值的时候其它两个或者多个参数名值对保护不变,举例如下:
http://www.waitalone.cn/index.php?id=../boot.ini&abc=456&xxx=ooo
http://www.waitalone.cn/index.php?id=../etc/passwd&abc=456&xxx=ooo
.....
http://www.waitalone.cn/index.php?id=../../etc/passwd&abc=456&xxx=ooo
当替换第2个参数值的时候其它的不变:
http://www.waitalone.cn/index.php?id=123&abc=../boot.ini&xxx=ooo
...
http://www.waitalone.cn/index.php?id=123&abc=../../etc/passwd&xxx=ooo
第3个或者多个参数名值对同上面。。
在2个开发社区问了大牛,最终得到如下的结果:
payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd') s1 = ['123']*5 s2 = ['456']*5 s3 = ['ooo']*5 a = zip(payloads, s2, s3) + zip(s1, payloads, s3) + zip(s1, s2, payloads) for item in a: x, y, z = item print ("http://www.waitalone.cn/index.php?id=%s&abc=%s&xxx=%s" %(x,y,z))
这个代码已经实现了我想要的意图,但是在实际实用过程中,s1,s2,s3需要提前定义,大牛说的多参数可以loop,但是不知道怎么操作,所以放弃了,知道的兄弟们帮我改一下。
最终在公司大牛的努力下,成功得到可以实用的代码。。
遍历替换url中的参数值最终代码:
#!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf-8 -*- # Date: 2014/12/18 # Created by 独自等待 # 博客 http://www.waitalone.cn/ import urlparse, copy, urllib def url_values_plus(url, vals): ret = [] u = urlparse.urlparse(url) qs = u.query pure_url = url.replace('?'+qs, '') qs_dict = dict(urlparse.parse_qsl(qs)) for val in vals: for k in qs_dict.keys(): tmp_dict = copy.deepcopy(qs_dict) tmp_dict[k] = val tmp_qs = urllib.unquote(urllib.urlencode(tmp_dict)) ret.append(pure_url + "?" + tmp_qs) return ret url = "http://www.waitalone.cn/index.php?id=123&abc=456&xxx=ooo" payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd') urls = url_values_plus(url, payloads) for pure_url in urls: print pure_url
参考网址:
http://segmentfault.com/q/1010000002428297?_ea=90382
http://www.v2ex.com/t/154518
感谢为此题分享思路的大牛们。。。
from www.waitalone.cn.thanks for it.
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论