charles抓不到app某一请求包
2020-07-24 本文已影响0人
苦海飘摇
前言
工作中遇到了某个app抓不到登录请求的数据包,但是其他请求能抓到。
网上了解到charles能抓TCP的http和https请求包,因此怀疑他是走的socket通信。
Flutter强制不使用系统代理,导致APP使用Fiddler或Charles这类代理抓包软件默认情况下无法抓取请求Flutter类型App的抓包
模拟socket请求
基于socket实现的http请求代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Descr : 基于socket实现http请求
# @Atten :
# @Author: luqin
# @File : socket_http.py
# @Vers : 1.0
# @Time : 2020-07-24 15:20
import time
import socket
import select
# 定义一个Request类 对socket对象进行二次封装
class Request(object):
def __init__(self, sock, info):
self.sock = sock
self.info = info
def fileno(self):
return self.sock.fileno()
class Lou(object):
def __init__(self):
self.sock_list = []
self.conn_list = []
def add_request(self, req_info):
sk = socket.socket()
sk.setblocking(False)
try:
sk.connect((req_info['host'], req_info['port']))
except BlockingIOError as e:
pass
obj = Request(sk, req_info)
self.conn_list.append(obj)
self.sock_list.append(obj)
def run(self):
while True:
# 只要列表中的对象有fileno方法就可以作为select的参数
r, w, e = select.select(self.sock_list, self.conn_list, [], 0.05)
for obj in w:
data = "GET %s HTTP/1.1\r\nhost:%s\r\n\r\n" % (obj.info["path"], obj.info["host"])
obj.sock.send(data.encode("utf-8"))
self.conn_list.remove(obj)
for obj in r:
response = obj.sock.recv(8192)
print(obj.info["host"], response)
self.sock_list.remove(obj)
# obj.info["callback"](response)
if not self.sock_list:
break
# def done(response):
# filename = str(time.time()).split('.')[1]
# with open("%s.html" % filename, "wb") as f:
# f.write(response)
url_list = [
{"host": "www.baidu.com", "port": 80, "path": "/"}, # , "callback": done},
{"host": "cn.bing.com", "port": 80, "path": "/"}, # , "callback": done},
]
l = Lou()
for req_info in url_list:
l.add_request(req_info)
l.run()
请求结果
run该代码可以直接运行,可以自己用charles抓包试试,是抓不到任何包的。接下来用wireshark抓包结果如下:
wireshark
用wireshark抓手机包
mac启动热点方法
-
共享网络
打开系统偏好设置-共享,如果是热点共享勾选WiFi,如果是usb共享就勾选usb,然后勾选互联网共享。
mac热点
电脑打开热点,手机连接电脑的热点。
wireshark重设捕获接口
点击wireshark的红色方框停止捕获,选择捕获接口,勾选手机使用的网络,如下图:
i重设捕获接口