| 104 | |
| 105 | @contextmanager |
| 106 | def reverse( |
| 107 | self, |
| 108 | targets, # type: Iterable[str] |
| 109 | proxy_auth=None, # type: Optional[str] |
| 110 | dump_headers=False, # type: bool |
| 111 | ): |
| 112 | # type: (...) -> Iterator[Tuple[int, str]] |
| 113 | os.mkfifo(self.messages) |
| 114 | args = [ |
| 115 | self.mitmdump_venv.interpreter.binary, |
| 116 | self.mitmdump_venv.bin_path("mitmdump"), |
| 117 | "--set", |
| 118 | "confdir={confdir}".format(confdir=self.confdir), |
| 119 | "--set", |
| 120 | "flow_detail={level}".format(level="2" if dump_headers else "1"), |
| 121 | "-p", |
| 122 | "0", |
| 123 | "-s", |
| 124 | self.addon, |
| 125 | ] |
| 126 | if proxy_auth: |
| 127 | args.extend(["--proxyauth", proxy_auth]) |
| 128 | for target in targets: |
| 129 | args.extend(["--mode", "reverse:{target}".format(target=target)]) |
| 130 | proxy_process = subprocess.Popen(args) |
| 131 | try: |
| 132 | with open(self.messages, "r") as fp: |
| 133 | data = json.load(fp) |
| 134 | yield data["port"], os.path.join(self.confdir, "mitmproxy-ca.pem") |
| 135 | finally: |
| 136 | proxy_process.kill() |
| 137 | os.unlink(self.messages) |
| 138 | |
| 139 | @contextmanager |
| 140 | def run( |