python-网络安全编程第十天(web目录扫描&&fake_useragent模块&&optionParser模块)

前言

昨天的内容没有完成今天花了点时间继续完成了 感觉自己的学习效率太低了!想办法提高学习效率吧 嗯 ,再制定下今天的目标 开始健身。

python fake_useragent模块 

 1.UserAgent

  userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值。

 2. fake_useragent

  fake_useragent是一个集成了市面上大部分的user-agent,可以指定浏览器,也可随机生成任意一个

  在工作中进行爬虫时,经常会需要提供User-Agent,如果不提供User-Agent,会导致爬虫在请求网页时,请求失败,所以需要大量User-Agent。如何生成合法的User-Agent?

  使用fake-useragent库就可以解决该问题。

 3.fake_useragent简单使用

示例代码1:

  简单打印出几个user-agent

from fake_useragent import UserAgent
ua=UserAgent() #实例化

print(ua.ie) #随机打印一个ie浏览器的User-Agent
print(ua.random)#随机打印一个User-Agent

输出结果:

 

示例代码2:

  将useragent带入到header请求头里面进行http请求

from fake_useragent import UserAgent
import requests
ua=UserAgent() #实例化

url="http://baidu.com"
ua=str(ua.random)
headers={'User-Agent':ua}

r=requests.get(url=url,headers=headers)
print(r.url)
print(r.headers)

 

请求结果:

Python-optionParser模块

代码:

from optparse import OptionParser
parser=OptionParser()

#dest是存储变量的 default是缺省值  help是帮助提示
#使用add_option()加入选项
parser.add_option("-u","--url",dest="url",help='target url for scan')
parser.add_option("-f","--file",dest="ext",help="target url ext")
parser.add_option("-t","--thread",dest="count",default=10,help="scan thread_count")
#最后通过parse_args()函数的解析
(options,args)=parser.parse_args()

#当option.url 和option.ext里面的值都为真是则继续执行里面的函数    
if options.url and options.ext:
    print(options.url)
    print(options.ext)
    print(options.count)
else:
    parser.print_help()

正常使用我们在cmd命令界面调用一一输入我们的值即可正常运行

如果没有输入值则会打印出我们定义的help里面的信息

输入-help参数也会打印help信息

参考学习:https://blog.csdn.net/lwnylslwnyls/article/details/8199454

web目录扫描器

代码:

import requests
import queue
import sys
import threading
#from agent_proxy import USER_AGENT_LIST
from fake_useragent import UserAgent
queue=queue.Queue()
from optparse import OptionParser
import sys


class DirScan(threading.Thread):
    def __init__(self,queue):
        threading.Thread.__init__(self)
        self._queue=queue
           
    def run(self):
        while not self._queue.empty():
            url=self._queue.get()
          
            try:
             
                ua=UserAgent()
                ua1=str(ua.random)
              

                headers={'User-Agent':ua1}
                r=requests.get(url=url,headers=headers,timeout=8)
              
            
                if r.status_code==200:
                    print(r.url)
                    #sys.stdout.write('\r'+'[*]%s\t\t'%(url))
                    f=open('result.html','a+')
                    f.write('<a href="'+url+'" target="_blank">'+url+'</a>')
                    f.write('\r\n<br>')
                    f.close
                  
            except Exception as e:
                pass
            
            
def start(url,ext,count):
    
    f=open('result.html','w')
    f.close()
    
    f=open('./dics/%s.txt'%ext,'r')
    
    for i in f:
        queue.put(url+i.rstrip('\n'))

 
#        
    threads=[]
    thread_count=int(count)
#    
    for i in range(thread_count):
        threads.append(DirScan(queue))
    for t in threads:
        t.start()
    for t in threads:
        t.join()
##        
#        
#start("http://www.dokocom.com",'asp','10');
        
if __name__=='__main__':
    print("=====================================\n榆林学院信息安全协会开发V1.0\n超级高速web目录敏感扫描器\n=====================================\n")
    
    parser=OptionParser()
 #   parser=OptionParser()
    parser.add_option("-u","--url",dest="url",help='target url for scan')
    parser.add_option("-f","--file",dest="ext",help="target url ext")
    parser.add_option("-t","--thread",dest="count",default=10,help="scan thread_count")
    (options,args)=parser.parse_args()
    
    if options.url and options.ext:
        start(options.url,options.ext,options.count);
        sys.exit(1)
    else:
        parser.print_help()
        sys.exit(1)
#    

使用方法:

使用方法:python Scan.py http:xxx.com -f asp -t 20
-f: 脚本类型
-t :线程数

 

如果输入有误提示使用方式:

会在程序当前目录下生成result.html文件 打开就是扫描的结果

 

posted @ 2020-02-07 06:20  笑花大王  阅读(338)  评论(0编辑  收藏  举报