[bugku]-秋名山车神详解

本文介绍了解析网页中的数学表达式并求解的方法,通过使用Python的requests库和re模块,实现自动获取页面内容、解析表达式并提交答案的过程。同时,还讲解了如何利用正则表达式抓取特定格式的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题

每一次刷新都不一样

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gHXJL89k-1648368286554)(https://note.youdao.com/yws/res/10244/WEBRESOURCEc4d28714992a40c6bf05f07283bb8672)]

post传参value

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZnyybXD-1648368286555)(https://note.youdao.com/yws/res/10255/WEBRESOURCE0e76a21232136f164e93fb8d26474e77)]

脚本1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rauo2fW9-1648368286555)(https://note.youdao.com/yws/res/10267/WEBRESOURCE3073d6c70e91f0d88fbdc970a59f86ad)]

import requests
import re
url = 'http://114.67.175.224:10053/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)

# session表示复用与目标的链接,可以多次以一个cookie与服务器通信
# group()返回字符串
# eval() 执行内容

re.search中正则表达式

正则表达式30分钟入门教程

  1. 字符转义
r''表示内容为原生字符串,防止被转义。要用反斜杠转义。
  1. 一个复杂的表达式:(?0\d{2}[) -]?\d{8}。
这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。
分析:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。
  1. (\d+[+-*])+(\d+)
首先匹配一个或连续多个数字    \d+
然后是一个 +或-(这里用了转义)或*    [+\-*]
接着匹配多个首先和然后的内容    (\d+[+\-*])+
之后再匹配一个或多个数字     (\d+)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kHvK4NTO-1648368286556)(https://note.youdao.com/yws/res/10330/WEBRESOURCE96527c43abc69d8cea11fa4df5949ad3)]

脚本2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDTb9pZx-1648368286556)(https://note.youdao.com/yws/res/10267/WEBRESOURCE3073d6c70e91f0d88fbdc970a59f86ad)]

import requests                           
import re                                 

request = requests.Session()              
url = "http://114.67.175.224:10053/"      
response = request.get(url)               
n = re.findall("<div>(.*?)=", response.text)[0] 
num = eval(n)                             
data = {"value": num}                     
response1 = request.post(url, data=data)  
f = re.findall('flag{(.*?)}', response1.text)
flag = "flag{" + f[0] +"}"                   
print(flag)                               

re.findall中正则表达式(.*?)

Python 正则表达re模块之findall()详解

  1. 符号 . 就是匹配除 \n (换行符)以外的任意一个字符
str = 'aabbabaabbaa'
print(re.findall(r'a.b',str))
#['aab', 'aab']
  1. 符号 * 前面的字符出现0次或以上
str = 'aabbabaabbaa'
print(re.findall(r'a*b',str))
#['aab', 'b', 'ab', 'aab', 'b']
  1. 符号 .* 贪婪,匹配从.*前面字符为开始到.*后面字符为结束的所有内容
str = 'aabbabaabbaa'
print(re.findall(r'a.*b',str))
#['aabbabaabb']

4.符号.*? 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取

str = 'aabbabaabbaa'
print(re.findall(r'a.*?b',str))
#['aab', 'ab', 'aab']

5.符号(.*?) 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容

str = 'aabbabaabbaa'
print(re.findall(r'a(.*?)b',str))
#['a', '', 'a']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值