在antiy实习的日子(python验证页面存活)

来源:互联网 发布:菲利普亲王知乎 编辑:程序博客网 时间:2024/04/28 11:50

    来安天之后还是接着研究这个jsunpackn,被安排写一个检测页面存活的脚本,由于对python不算特别熟,所以还是蛋疼了一小下的,吃饭时候听说在CNNVD上面提交漏洞前几,有安天,绿盟,晨星,什么360瑞星什么的反而没什么资格,顿时感觉自己牛鼻了很多,可能是这些公司是为政府工作的机会比较多,绿盟的前身也比较有趣,是绿盟军团,有兴趣的话可以看着篇文章http://www.hudong.com/wiki/%E7%BB%BF%E8%89%B2%E5%85%B5%E5%9B%A2

最后创始人goodwell的一段介绍非常有意思,顿时有一种生不逢时的感觉,什么时候才能有这么多志同道合的伙伴呀。

(本文引用GOODWELL写的绿色兵团的战友录) Rocky:请允许我把这个人的名字放在第一位,并致以最沉痛的悼念,早期的绿色兵团核心成员,美国国防部的web site上曾留下过他为祖国的呐喊,绿色兵团早期的文章由他翻译。我依然记得四年前rocky第一次进入我的 linux ,当时他的激动和喜悦,然而今天他却永远的离开了我们,走的这么突然。我会记得你,大家会记得你,直到永远、永远,我的朋友 --Rocky。 Dspman(HeHe):绿色兵团核心成员,为人和气,讲义气,做事情大大咧咧。但是Unix基础相当过硬。 Solo:绿色兵团核心成员,美丽的solo,精通数据库,做事比较重感情,曾第一个提出SQL查询语句的严重漏洞。 LittleFish(小鱼儿):绿色兵团核心成员,要是上天再给我一次机会的话,我还是愿意和他做朋友。因为我爱他。果断的性格,冷俊的言语是一个天生的黑客。当年我曾对他说,我们要做一个中国最大的网络安全组织,鱼儿回答我说:“不!,我们要做亚洲最大的。”这句话我永远记得,我会去努力的,即使一事无成。 Blackeye:绿色兵团核心成员,是个具有商业头脑的人,曾为绿色兵团商业化做过很多的付出和努力,中国黑客走到商业化道路和这个名字分不开。 笛亚哥:是一个很老很老的朋友,也许很多人已经遗忘了这个名字,但是我一直在寻找他,曾编写当时来说比较实用的文章(绿色兵团黑客教材)。 冰人:一个人彻底的消失很难尤其是这样出名的一个人物,早期的中国黑客没有不知道这个名字的,但是他的确做到了,彻底的从网络这个世界消失了。 jianyuf:几年前是绿色兵团聊天室的常客,大家一起学习一起进步,对技术他完全不保留。 中国鹰派:绿色兵团早期成员,擅长加密破解曾参加过第一次的绿色兵团年会。为组织出谋化策是个铁杆成员现在中国鹰派发展迅速,成员分布中国各地,和他的努力分不开。 Frankie:辰光站长,说到深圳辰光无人不晓,是中国出名的一个安全站点。 Iamin:97年绿色兵团站点第一万个访客,当时他的站点和绿色兵团是两个主要的安全大站。其安全站点黑客之家也是当初最出名的站点。 袁哥:我非常敬佩的一个程序员,非常实干,热于助人,技术相当过硬,而且看程序有耐心。不管发生什么,他都是我敬佩的一个程序员。 Adam:chinaasp的安全版版主,相识很偶然,很好客和热心,就是喜欢开开小玩笑,借我的那本书不知道啥年头可以还我。 Davidchen(backend):翻译过很多技术文章,很多经典的安全文章出自他的手。 Cloudsky:清华bbs斑竹之一,写过很多好文章。 CK:一个广洲的年轻小伙子,绿色兵团成员,非常好学。 PP:一个老朋友,为中国网络安全做过很多贡献,喜欢在网络上打报不平。 ColdFace:绿色兵团分站网络力量站长,脾气比较大,但是为组织做过很多事情,纯ORG的强烈拥护者。 小榕:从乱刀到流光,用过的人都知道这个名字,他是一个专门开发安全工具的程序员。 Zer9:我非常喜欢的一个朋友,气量很大,代表作品,代理猎手高度分析等。 天行:天行软件的作者,应该不用介绍了,要是你不知道就去用一下他的软件。 LOG:绿色兵团早期成员,曾参加过第一次绿色兵团年会,话语不多,但是为人很诚恳,我一直感到欠疚,他从外地赶来开会我没有招呼好他。 雨馨:千万别以为这是个女孩,不过他的cn105没有人不知道,以前是绿色兵团的常客,技术提高很快。 LoGon(doorless):一个非常谦虚和好学的人,值得交往的朋友。 liwrml:绿色兵团分站,麒麟网络安全小组的站长,兵团铁杆支持者。 Chener:需要什么软件,需要什么地址去问他,觉得他就象活的网络词典。 大鹰:补天的得力干将,很有互助精神,你问他什么问题他总是尽量回答你。 shutgun:一个真正热爱网络安全的技术人员,不为名利,不为金钱。 WoWo:患难之中见真情,得人滴水之恩当涌泉相报。 仙剑:仙剑乐园有一大批的中国安全爱好者,是中国最大的一个电话破解站点。 Casper:是也很好的朋友,他有很cool的外型,谦虚和严谨,对技术从不保留,是个真正热爱安全的技术人员。 椰子:写过不少好文章,看事情比教成熟。 WhoamI:热心,乐于助人,只是有个坏习惯,千万别在他喝醉的时候去和他讨论技术。 **illy:中国每个安全站点的角落都能看到他的灌水贴,绿色兵团常客 weiyangsheng:绿色兵团铁杆支持者,比较低调。 BadBoy:中国红客的领袖人物,知识面教广也是兵团的支持者。 柳咏:绿色兵团的拥护者,其实他比很多人都要强,可是他总是很谦虚,说自己懂的很少,而且不太说废话,只和别人探讨技术。 小小龙女:绿色兵团的很多文章有他翻译,精通linux。 阿飞(remix):绿色兵团的成员,老说自己是垃圾,废话是挺多的,不过人不错,为兵团做了很事情。 五月玫瑰:绿色兵团的成员,虽然没有说过一句话,没见过一次面,而且几乎不看到他发言, 直到有一天他发来的信,把自己发现的微软输入法的新漏洞无私的告诉了我们,永远都会感谢他对兵团的支持。 Ghost_happy:他的桌面实在是叫人流口水,不行你去问他要一张截图看看(win2k + vm +FreeBsd)。 GoodWell: 请允许我把自己的名字写在最后,正是因为大家的努力,才会有一个美丽的光环照在我的头上,我真的、真的愿意做大家成功道路上的一颗垫脚石,一颗永远不需要闪光的垫脚石,我愿意看着你们一个一个的走向成功的道路,同时也希望不久的将来能把你的名字写上去,去为龙的传人争光。


言归正传,下面是第一版本的脚本,运行速度比较慢,主要是因为使用了,较高层次的python模块urllib2

这是关于python 网络方面的模块比较好的说明http://www.cnblogs.com/morya/archive/2011/05/12/2044904.html

它会把网站的所有内容都读取出来。

import urllib2import osfile = open ('micropoint1000.txt')report = open ('report.txt','w')for line in file:    line = 'http://' + line.replace('\n','')    #print line    try:        response = urllib2.urlopen(line)        print line        report.write(line+'\n')        #os.system('echo '+line+' >>report.txt')        #os.system('python jsunpackn.py -V -u '+line+' >>report.txt')    except urllib2.URLError , e:        print '.'    except urllib2.HTTPError , e:        print '.'    except Exception , e:        print Exception,":",datafile.close()report.close()
之后在网络上找到了这样一个版本,使用了urlparse和httplib

但是发现了几个问题一是使用urlparse不能很好的解析URL,比如port,有一些host,都不能很好的分离出来

而且他好象是根据网站域名来判断,那么比如tk这种诡异的域名就很有可能判断不出来

这是urlparse的详细介绍

http://hi.baidu.com/springemp/item/64613c7457731517d0dcb3a7

但是httplib是netlib的底层模块,所以本着越底层越快度原则,一该会比netlib要快一些。


def   httpExists(url):         host,   path   =   urlparse.urlsplit(url)[1:3]         found   =   0         try:                 connection   =   httplib.HTTPConnection(host)     ##   Make   HTTPConnection   Object                 connection.request( "HEAD ",   path)                 responseOb   =   connection.getresponse()             ##   Grab   HTTPResponse   Object                 if   responseOb.status   ==   200:                         found   =   1                 else:                         print   "Status   %d   %s   :   %s "   %   (responseOb.status,   responseOb.reason,   url)         except   Exception,   e:                 print   e.__class__,     e,   url         return   found
样本中有很多重复,也很蛋疼

修改之后的版本是这样,自己拆分了url,并缩短了timeout,但是还是不够快,timeout是时间上的最大问题,尝试用多线程

timeout 为 0.1 的时候是11kb

timeout 为 1 的时候是    13kb 相差了不少,看来timeout对准确性的确是有所影响


import urllib2import osimport urlparseimport httplibimport sockettimeout = 0.1socket.setdefaulttimeout(timeout)file = open ('micropoint1000.txt')report = open ('report.txt','w')for line in file:    url = line.replace('\n','')    host = url[:url.find('/')]    path = url[url.find('/'):]    port = 80    if (host.find(':') != -1):        port = host[host.find(':')+1:]        host = host[:host.find(':')]    print  'host:',host,'\n','path:',path,'\n','port:',port                                try:        connection = httplib.HTTPConnection(host,port)        connection.request("HEAD",path)        response = connection.getresponse()        print response.status        if (response.status == 200):            report.write(url+'\n')        #os.system('echo '+line+' >>report.txt')        #os.system('python jsunpackn.py -V -u '+line+' >>report.txt')    except urllib2.URLError , e:        print '.'    except urllib2.HTTPError , e:        print '.'    except Exception , e:        print Exception,":",efile.close()report.close()


加了 多进程之后,果然快了很多,但也没有想象中的快,不过可以忍受了

这里的多线程,逻辑些得很弱,不过现在既是周五又快下班了,就不改了。


import urllib2import osimport urlparseimport httplibimport socketimport threadingtimeout = 1socket.setdefaulttimeout(timeout)file = open ('micropoint1000.txt')report = open ('report.txt','w')fileRows = file.readlines()threadNum = 10threads = []workNum = len(fileRows)/threadNumdef ThreadWork(s,t):    for i in range(workNum):        url = fileRows[s+i].replace('\n','')        host = url[:url.find('/')]        path = url[url.find('/'):]        port = 80        if (host.find(':') != -1):            port = host[host.find(':')+1:]            host = host[:host.find(':')]        print  'host:',host,'\n','path:',path,'\n','port:',port                                    try:            connection = httplib.HTTPConnection(host,port)            connection.request("HEAD",path)            response = connection.getresponse()            print response.status            if (response.status == 200):                report.write(url+'\n')            #os.system('echo '+line+' >>report.txt')            #os.system('python jsunpackn.py -V -u '+line+' >>report.txt')        except urllib2.URLError , e:            print '.'        except urllib2.HTTPError , e:            print '.'        except Exception , e:            print Exception,":",efor i in range(threadNum):    t=threading.Thread(target=ThreadWork,args=((i-1)*workNum,i*workNum))    threads.append(t)for i in range(threadNum):    threads[i].start()for i in range(threadNum):    threads[i].join()file.close()report.close()




原创粉丝点击