现在的我很菜,在写一个仿Bugscan的项目,这里是我起步的第一步,我这个东西不是抄的。。。
如果您有意参加测试版或者想提意见可以来Q群:419252623,web端目前已经开发的差不多了,欢迎加群测试,等bug少一些就发到github
邮箱:minisafe@foxmail.com 非常感谢
守护者2017.4.29
2017年11月27日冒泡
请加测试群,该位置有可能不更新代码
该项目我是没本事让他上线了,因为正主bugscan已经关闭了。。。 在测试群是发代码让大家自己搭建的。
不知道该怎么写文档,就写在这吧。
打开方式分两种
import MicroCore
mm = MicroCore.Microhttp()
print mm.http('http://www.baidu.com')
print mm.httpraw('http://www.baidu.com','GET / HTTP/1.1\r\n\r\n')
就这两种,http和httpraw
test里面有比较详细的栗子
返回值和hackhttp很相似,也是5个,分为
code(int) 返回代码,成功是200这种
headers(dic) headers是以字典形式返回的,例{'Cookie':'JSESSIONID=1111111111111111111'}
body(str) body为返回正文,例<html>......</html>
jumpurl(str) 如果返回代码300<=code<=305是会跳转的,该返回值为判断code,然后读headers里面的location
allbody(str) allbody是我自己拼接的,尽量像直接返回的socket
下面说说http和httpraw的区别
httpraw有三个参数(url, raw, timeout=3),和hackhttp一样,raw里面可以直接复制burpsuite抓到的包,和hackhttp不同的地方就是,MicroCore直接用的socket发送数据,比httplib还要底层,这样对用户发送的包也有比较严格的限制,比如content-length,用户要自己手动计算字节数
http有六个参数(url, post=None, raw=None, headers={}, method=None, cookies={},method=None(通过post或raw判断,默认为GET)),raw参数同样可以发送包,和hackhttp的区别在于,这个raw不是通过调用httpraw的方法实现的,而是自己处理的,会解析请求行,请求头,等等的字段,然后通过httplib来请求
上面说到底层库,其实不用urllib和urllib2是有原因的,因为这些库在返回错误代码的时候直接就抛异常了,不能看到返回的数据
MicroCore没有使用线程池,因为我比较菜,没有深刻理解线程池,等我搞明白了一定会加上
下面给几个栗子,方便大家理解我的辣鸡框架,也欢迎大家提出宝贵的意见或建议
mm = MicroCore.Microhttp()
code,headers,body,jumpurl,allbody=mm.http('http://www.baidu.com')
请求数据:
GET / HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
数据结束
code,headers,body,jumpurl,allbody=mm.http("http://www.baidu.com",headers={'User-Agent': '6666666666'},cookies={'a':'b'},raw='''GET /index.html HTTP/1.1
action: 123456''')
请求数据:
GET /index.html HTTP/1.1
action: 123456
Connection: Keep-Alive
Cookie: a=b
Accept-Encoding: gzip, deflate
User-Agent: 6666666666
数据结束
注:该方法优先使用raw的数据,比如headers里面写了User-Agent,raw里面也写了该请求头,优先使用raw里面的,我也不知道哪个是对的,只是跟着感觉走,大概是这样比较合理,如果post里面写了数据,会被raw里面的数据覆盖
另外请注意此方法请求的报文,被raw改了!!!
code,headers,body,jumpurl,allbody=mm.httpraw('http://www.baidu.com','GET / HTTP/1.1\r\n\r\n')
请求数据
GET / HTTP/1.1
请求结束
是的,这个方法就这么干脆
=======
更新日志:
2017.4.28 第一个测试同学就位 感谢Newbie
2017.4.29 完成httpraw方法 修复一半编码bug
2017.4.30 完成http方法 增加headers 增加cookies 添加raw解析 修复一些编码问题
2017.5.1 增加http方法proxy
2017.5.3 web前端写完一半了,写完用户后台就能下达任务了