使用fiddler和WireShark进行网络抓包
-
WireShark
- 打开WireShark,开启网卡混杂模式,抓包。
- 对数据包进行过滤,命令如下
http.request.method== "POST"
- 接下来,点击POST事件那一行,然后右击选择“Follow TCP Stream”
- 分析报文内容.
-
fiddler
fiddler更加好用,直接打开fiddler,然后运行浏览器打开网站,它就会自动分析所有的get与post请求的详细信息。
凭借这个软件,成功的分析出来了一个网站的登录的跳转url。当时看网站源代码的时候也没有看出来跳转到那里了,因为都是JavaScript的代码,比较难找到。通过这个软件,只需几分钟就能找到。
如图,可以清楚的获取到网站的headers信息,以及登录的时候发送的post请求是什么形式,这个网站的post还是相当简单的只有username和password两项。
因此如下的代码就可以实现登录:
postDict = {
"username":self.username,
"password":self.password
}
postData = urllib.urlencode(postDict).encode()
response = opener.open(self.logUrl,postData)```
下面是添加headers和处理Cookie的代码:
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36",
"Referer":"https://mbsdisclosure.fanniemae.com/PoolTalk2/index.html",
"Connection":"keep-alive",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8",
"Accept":"application/json, text/javascript, /",
"X-Requested-With":"XMLHttpRequest"
}
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
header = []
for key,value in headers.items():
elem = (key,value)
header.append(elem)
opener.addheaders = header```