周末去了好朋友家玩,继上次我帮他修好电脑(插拔内存条+用橡皮擦擦金手指)后。
又问我说,小x啊,你是搞计算机的,能不能帮我写个自动顶帖(回复)的机器啊?
我的好朋友现在除了用两套房子收租外,觉得待在家里太无聊,现在在做网站运营。
现在他作为一个论坛版主,每天要冒充水军回复固定的贴数。。。
我思考了一下,自动顶帖应该是自动发送HTTP协议的POST包吧。
如果是HTTPS那就比较麻烦了,他给我看了下网站 http://club.xxx.com。
嗯,HTTP的,是个老论坛,有希望短时间解决。
先打开百度,搜索下域名映射IP,IP是49.x.x.x,先记下来了。
然后我说你等会,我下载几个东西试试看,然后我下载了:Python3
WireShark
Notepad++
第一步先登陆他的账号,然后进入发帖页面,打开WireShark监听eth0,设置过滤表达式:
http && ip.addr == 49.x.x.x
回复了一个帖子之后,看下WireShark显示的结果,果然有一个POST包。
Post包到达的URL是以php为后缀的,PHP大法好!
先看下headers,数据格式是urlencode,果然是一个古老的论坛。
完整headers如下
headers = {
‘Host’: ‘club.xxx.com’,
‘Cache-Control’: ‘max-age=0’,
‘Origin’: ‘http://club.xxx.com’,
‘Upgrade-Insecure-Requests’: ‘1’,
‘Content-Type’: ‘application/x-www-form-urlencoded’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36’,
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8’,
‘Referer’: ‘http://club.xxx.com/xxx.html’,
‘Accept-Encoding’: ‘gzip, deflate’,
‘Accept-Language’: ‘zh-CN,zh;q=0.9’,
‘Cookie’: r’xxxxxxxxxxx’
}
完整的body经过组织后如下
message=内容&posttime=时间戳&formhash=XXX&其他参数=…
第二步,构造相似的HTTP包,把headers内容复制出来后,打开notepad++开始写python。
import time
import urllib
from urllib import parse
from urllib import request
headers = {
‘Host’: ‘club.xxx.com’,
‘Cache-Control’: ‘max-age=0’,
‘Origin’: ‘http://club.xxx.com’,
‘Upgrade-Insecure-Requests’: ‘1’,
‘Content-Type’: ‘application/x-www-form-urlencoded’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36’,
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8’,
‘Referer’: ‘http://club.xxx.com/xxx.html’,
‘Accept-Encoding’: ‘gzip, deflate’,
‘Accept-Language’: ‘zh-CN,zh;q=0.9’,
‘Cookie’: #保密#,
‘其他没用的参数’: #没用#
}
t = time.time()
url = r’http://49.x.x.x/forum.php?action=replay&…..’
data = r’message=test&posttime=’+str(t)+r’&formhash=xxx’
req = urllib.request.Request(url=url, headers=headers, data=data.encode(encoding=’UTF8′))
response = urllib.request.urlopen(req)
print(response.read())
就是模拟下浏览器发送Post请求,然后打印下Response看看服务器响应什么数据。
第一次发送,Response接到的是一个XML数据,还好心提示我发送数据类型有误。
然后我看了下,原来是忘记encode了,然后尝试进行第二次发送。
Response接到的是一串乱码,打开网页看下,居然直接成功发送了。。
接下来给好朋友定制了一个自动顶帖器,首先查下Python的GUI框架。
好的,自带tkinter,直接用它了。
import tkinter as tk
…
然后我设置了一个文本框(帖子URL),一个文本框(发送间隔:x秒))
一个文件(每行不同的水军内容),一个按钮(发送)。
然后写完测试成功,现在我的好朋友上班点点鼠标就行了。。。。。
然后请我吃了顿好的,美滋滋。