zoukankan      html  css  js  c++  java
  • 检测web服务器指定位置大文件是否存在

    在bugscan群里看到有人问有一个大文件,想探测其是否存在。如果使用curl的话,会将整个文件下载到节点,对于扫描没有任何用处,反而浪费了扫描时间。

    于是我想到的解决办法是不使用curl,直接用底层socket,发包之后接收http head部分,然后拿到返回码之后就断开链接。不知道这样做有没有什么弊端,如果有的话,请指出。

    下面直接贴上源码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #__author__ = 'Medici.Yan'
    #
    '''测试文件是wps官网上的提供的下载安装包'''
    import socketdef assign(service, arg):
        if service == "ip":
            return True, arg
    def audit(arg):
        doGet(arg,'/wdl1.cache.wps.cn/wps/download/W.P.S.4954.19.552.exe')
    
    def doGet(host,path):
        payload='''GET %s HTTP/1.1
    Host: %s
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
    
    ''' % (path,host)
        print payload
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        try:
            socket.setdefaulttimeout(20)#超时
            s.connect((host,80))#连接对应主机和端口
            s.send(payload)
            data=s.recv(len(payload))
            httphead=data.split('
    ')
            if '200 OK' in httphead[0]:
                print 'exist'
            else:
                print 'error or not exist'
        except Exception :
            pass
        finally:
            s.close()
    
    if __name__ == '__main__':
        from dummy import *
        audit(assign('ip', '222.178.202.37')[1])

    测试结果:

  • 相关阅读:
    JavaScript_01简介,基本语法,运算符
    JAVA_内部类
    JAVA_接口_默认方法&静态方法
    软件工程_01面向对象分析
    mybatis_16逆向工程
    mybatis_15整合ehcache
    mybatis_14二级缓存
    mybatis_13一级缓存
    mybatis_12延时加载_懒加载
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
  • 原文地址:https://www.cnblogs.com/mediciyan/p/4337589.html
Copyright © 2011-2022 走看看