from mitmproxy import http from mitmproxy.tools.main import mitmdump class AddHeader: def __init__(self): self.num = 0 self.file = open("./request_headers.txt", "w") # 打开文件对象 def request(self, flow: http.HTTPFlow) -> None: self.num += 1 flow.request.headers["My-Header"] = f"Request {self.num}" print("Request Headers:") for name, value in flow.request.headers.items(): print(f"{name}: {value}") # 保存请求头部内容到文件 self.file.write(f"Request {self.num} Headers:\n") for name, value in flow.request.headers.items(): self.file.write(f"{name}: {value}\n") self.file.write("\n") self.file.flush() # 立即写入文件 # def response(self, flow: http.HTTPFlow) -> None: # self.num += 1 # flow.response.headers["My-Header"] = f"Response {self.num}" # print("Response Headers:") # for name, value in flow.response.headers.items(): # print(f"{name}: {value}") def done(self): self.file.close() # 关闭文件对象 addons = [ AddHeader() ] if __name__ == "__main__": mitmdump(['-p', '8081', '-s', __file__]) 以上代码中 如何将请求的URL一同保存到request_headers.txt中
时间: 2024-03-11 13:50:42 浏览: 150
可以在保存请求头部内容的时候,将请求的URL也一同写入文件中,修改代码如下:
```
# 保存请求头部内容和请求URL到文件
self.file.write(f"Request {self.num} Headers:\n")
for name, value in flow.request.headers.items():
self.file.write(f"{name}: {value}\n")
self.file.write(f"URL: {flow.request.pretty_url}\n\n")
self.file.flush()
```
这样,请求头部内容和请求URL就都会被写入到request_headers.txt文件中了。
相关问题
from mitmproxy import http from mitmproxy.tools.main import mitmdump class AddHeader: def __init__(self): self.num = 0 def request(self, flow: http.HTTPFlow) -> None: self.num += 1 flow.request.headers["My-Header"] = f"Request {self.num}" print("Request Headers: ") for name, value in flow.request.headers.items(): print(f"{name}: {value}") def response(self, flow: http.HTTPFlow) -> None: self.num += 1 flow.response.headers["My-Header"] = f"Response {self.num}" print("Response Headers: ") for name, value in flow.response.headers.items(): print(f"{name}: {value}") addons = [ AddHeader() ] if __name__ == "__main__": mitmdump(['-p', '8081', '-s', __file__]) 我使用以上代码进行抓包,我如何才能将抓取到的内容保存到本地,请帮我完善代码
你可以在 `response` 函数中,使用 Python 的文件操作将抓取到的内容保存到本地文件中。下面是修改后的代码:
```python
from mitmproxy import http
from mitmproxy.tools.main import mitmdump
class AddHeader:
def __init__(self):
self.num = 0
def request(self, flow: http.HTTPFlow) -> None:
self.num += 1
flow.request.headers["My-Header"] = f"Request {self.num}"
print("Request Headers: ")
for name, value in flow.request.headers.items():
print(f"{name}: {value}")
def response(self, flow: http.HTTPFlow) -> None:
self.num += 1
flow.response.headers["My-Header"] = f"Response {self.num}"
print("Response Headers: ")
for name, value in flow.response.headers.items():
print(f"{name}: {value}")
# 将抓取到的内容保存到本地文件中
with open('response.txt', 'a') as f:
f.write(flow.response.text)
addons = [
AddHeader()
]
if __name__ == "__main__":
mitmdump(['-p', '8081', '-s', __file__])
```
在 `response` 函数中,我们使用 `with open('response.txt', 'a') as f:` 打开一个名为 `response.txt` 的文件,并设置文件模式为追加模式,这样每次抓取到的内容都会被追加到文件的末尾。然后我们使用 `f.write(flow.response.text)` 将抓取到的内容写入到文件中。最后别忘了关闭文件。
from mitmproxy import http from mitmproxy.tools.main import mitmdump import temp import json class AddHeader: def __init__(self): self.num = 0 self.file = open("./request_headers.txt", "w") # 打开文件对象 def request(self, flow: http.HTTPFlow) -> None: with open('temp.json', 'r') as fff: config = json.load(fff) self.num += 1 # 保存请求头部内容和请求URL到文件 if f"{config['get_url']}" in flow.request.pretty_url: for name, value in flow.request.headers.items(): if f"{config['keyword']}" in name: self.file.write(f"{value}") self.file.flush() # 立即写入文件 # exit(0) def done(self): self.file.close() # 关闭文件对象 addons = [ AddHeader() ] if __name__ == "__main__": # print(config['get_url']) # print(config['keyword']) mitmdump(['-p', '8081', '-s', __file__]) 将写入request_headers.txt修改为写入到一个名为cookie.json的json文件中,把写入的值作为cookie.json中cookie的值,cookie.json如下: { "cookie": "" }
这段代码是使用 mitmproxy 中的 AddHeader 插件来获取 HTTP 请求的特定头部信息,并将其写入文件中。你的问题是将这个插件修改,不再将信息写入文件,而是将它们写入一个名为 cookie.json 的 JSON 文件中,并将其作为 cookie 的值。你需要将 AddHeader 插件修改为以下内容:
```python
import json
from mitmproxy import http
class AddCookie:
def __init__(self):
with open('cookie.json', 'r+') as f:
try:
self.cookies = json.load(f)
except json.JSONDecodeError:
self.cookies = {}
f.seek(0)
f.write(json.dumps(self.cookies))
f.truncate()
def request(self, flow: http.HTTPFlow):
if 'cookie' in self.cookies:
flow.request.headers['Cookie'] = self.cookies['cookie']
def response(self, flow: http.HTTPFlow):
if 'set-cookie' in flow.response.headers:
self.cookies['cookie'] = flow.response.headers['set-cookie']
with open('cookie.json', 'w') as f:
json.dump(self.cookies, f)
```
这个插件的作用是将请求中的 cookie 设置为 cookie.json 文件中的值,并将响应中的 set-cookie 头部中的 cookie 值更新为 cookie.json 文件中的值。请注意,这个插件需要在 mitmproxy 中以 AddCookie 插件名运行。你可以使用以下命令来运行它:
```
mitmdump -s your_script.py -s AddCookie
```
阅读全文