满眼喜欢990 2024-05-15 14:54 采纳率: 0%
浏览 10

python为什么循环无故中止

这是一段通过字典进行网站后台扫描的代码,为什么找到存在的网站后循环就终止了,整段就这样停止了?

php = ['admin/', 'administrator/', 'admin1/', 'admin2/', 'admin3/', 'admin4/', 'admin5/', 'usuarios/', 'usuario/',
           'administrator/', 'moderator/', 'webadmin/', 'adminarea/', 'bb-admin/', 'adminLogin/', 'admin_area/',
           'panel-administracion/', 'instadmin/',
           'memberadmin/', 'administratorlogin/', 'adm/', 'admin/account.php', 'admin/index.php', 'admin/login.php',
           'admin/admin.php', 'admin/account.php',
           'admin_area/admin.php', 'admin_area/login.php', 'siteadmin/login.php', 'siteadmin/index.php',
           'siteadmin/login.html', 'admin/account.html', 'admin/index.html', 'admin/login.html', 'admin/admin.html',
           'admin_area/index.php', 'bb-admin/index.php', 'bb-admin/login.php', 'bb-admin/admin.php', 'admin/home.php',
           'admin_area/login.html', 'admin_area/index.html',
           'admin/controlpanel.php', 'admin.php', 'admincp/index.asp', 'admincp/login.asp', 'admincp/index.html',
           'admin/account.html', 'adminpanel.html', 'webadmin.html',..............]


try:
        var1=0
        var2=0
        try:
            site=target
            site = site.replace("http://","")
            print ("\tChecking website " + site + "...")
            conn = httplib.HTTPConnection(site)
            conn.connect()
            print "\t[$] Yes... Server is Online."
        except (httplib.HTTPResponse, socket.error) as Exit:
            print 'error'
            # raw_input("\t [!] Oops Error occured, Server offline or invalid URL")
            db.close()
            return

        print("\t [+] Scanning " + site + "...\n\n")
        for admin in php:
            admin = admin.replace("\n", "")
            admin = "/" + admin
            host = site + admin
            print ("\t [#] Checking " + host + "...")
            connection = httplib.HTTPConnection(site)
            connection.request("GET", admin)
            response = connection.getresponse()
            var2 = var2 + 1
            if response.status == 200:
                var1 = var1 + 1
                print "%s %s" % ("\n\n>>>" + host, "Admin page found!")
                try:
                    sqlAdd='insert into webmanager(webmanager)VALUES ("%s")'%host
                    cursor.execute(sqlAdd)
                    db.commit()
                except Exception,e:
                    print 'sqlAdd--error!',e
                # f=open('./result/webmanager.txt','w')
                # f.write(host)
                # f.close()
                db.close()
                return
            elif response.status == 404:
                var2 = var2
            elif response.status == 302:
                print "%s %s" % ("\n>>>" + host, "Possible admin page (302 - Redirect)")
            else:
                print "%s %s %s" % (host, " Interesting response:", response.status)
            connection.close()
        print("\n\nPHP Completed \n")
        print var1, " Admin pages found"
        print var2, " total pages scanned"
  except (httplib.HTTPResponse, socket.error):
        print "\n\t[!] Session Cancelled; Error occured. Check internet settings"
        db.close()
        return
  except (KeyboardInterrupt, SystemExit):
        print "\n\t[!] Session cancelled"
        db.close()
        return

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-15 15:02
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您想要解决的问题是:在运行一段用于扫描网站后台的Python代码时,发现当找到存在的网站后循环无故中止,您希望找出原因并解决这个问题。

    问题出现原因

    1. return语句的使用:在循环内部,当检测到一个页面状态为200时,代码执行了return语句,这会导致函数立即结束执行,并且退出当前的循环。
    2. 异常处理:您的代码中使用了try...except结构来处理可能发生的异常,但如果在try块中的代码执行了return,那么它将跳过except块直接退出函数。

    问题解决方案

    要解决这个问题,您可以移除或修改return语句,使其在找到存在的网站后不立即退出函数,而是继续执行循环直到所有可能的后台路径都被检查。

    提供代码

    以下是修改后的代码示例,移除了return语句,并添加了对数据库操作的异常处理:

    import httplib
    import socket
    
    # ... 省略了部分代码 ...
    
    try:
        var1 = 0
        var2 = 0
        try:
            # ... 省略了部分代码 ...
            print "\t[$] Yes... Server is Online."
        except (httplib.HTTPResponse, socket.error) as Exit:
            print 'error'
            # ... 省略了部分代码 ...
    
        print("\t [+] Scanning " + site + "...\n\n")
        for admin in php:
            # ... 省略了部分代码 ...
            connection.request("GET", admin)
            response = connection.getresponse()
            var2 += 1
            if response.status == 200:
                var1 += 1
                print "%s %s" % ("\n\n>>>" + host, "Admin page found!")
                try:
                    # ... 省略了部分代码 ...
                    db.commit()
                except Exception as e:
                    print 'sqlAdd--error!', e
                # ... 省略了部分代码 ...
                # db.close()  # 移动到循环外
            elif response.status == 404:
                pass  # 404不需要特别处理
            elif response.status == 302:
                print "%s %s" % ("\n>>>" + host, "Possible admin page (302 - Redirect)")
            else:
                print "%s %s %s" % (host, " Interesting response:", response.status)
            connection.close()
        print("\n\nPHP Completed \n")
        print var1, " Admin pages found"
        print var2, " total pages scanned"
        db.close()  # 移动到循环外
    except (httplib.HTTPResponse, socket.error):
        print "\n\t[!] Session Cancelled; Error occured. Check internet settings"
        db.close()
    except (KeyboardInterrupt, SystemExit):
        print "\n\t[!] Session cancelled"
        db.close()
    
    # ... 省略了部分代码 ...
    

    代码运行方式

    运行此代码需要Python环境,您需要确保已经安装了Python,并且导入了httplibsocket模块。此外,您还需要一个数据库连接(代码中提到的dbcursor),以及相应的数据库操作逻辑。

    代码预期运行结果

    如果代码成功运行,它将检查列表php中指定的所有路径,并对每个路径进行HTTP请求。如果找到状态码为200的响应,它将记录这个路径并尝试将其插入到数据库中。循环完成后,将输出找到的管理员页面数量和扫描的总页面数。

    推荐相关链接

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月15日

悬赏问题

  • ¥20 qt4代码实现二进制文件读取显示,以及显示的内容进行搜索
  • ¥15 Labview获取LK-G3001数据
  • ¥15 我知道什么是混合树,但是怎么写代码啊
  • ¥50 开发板linux系统安装dpkg,apt函数库 有偿
  • ¥15 浏览器时间循环 交互事件和延时事件的 优先级与执行问题
  • ¥15 GD模块安装出错,libgd无法正常安装
  • ¥20 求有缘人帮我把笛卡尔坐标系转换为经纬度 有偿
  • ¥15 vue2中使用计算属性
  • ¥50 远程桌面打开Mastercam、没有许可证、物理机打开正常
  • ¥15 ubuntu安装gdal后java读取tif文件报错