Momenteel ben ik ben ik bezig om een python http(s) proxy te schrijven. Het eerste gedeelte ging vrij makkelijk aangezien python een baseHTTPServer libary heeft.
Nu schijnt het zo te zijn dat een browser eerst een CONNECT (ipv GET) statement stuurt alsvorens SSL te gebruiken. Dus heb ik de volgende def toegevoegd:
Nu gebruik ik firefox en GET verzoeken zie ik netjes in mijn terminal terug. Echter als ik naar bijvoorbeeld encrypted.google.com ga krijgt ik dat verzoek niet te zien. Ook als ik wireshark er tussen zet zie ik geen specifiek CONNECT verzoek overgaan. Weet iemand of het in firefox wellicht anders werkt of dat ik iets mis in python?
code:
1
2
3
4
5
6
7
8
9
10
11
| import SocketServer import SimpleHTTPServer mport urllib PORT = 8080 class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): self.copyfile(urllib.urlopen(self.path), self.wfile) httpd = SocketServer.ForkingTCPServer(('', PORT), Proxy) print "serving at port", PORT httpd.serve_forever() |
Nu schijnt het zo te zijn dat een browser eerst een CONNECT (ipv GET) statement stuurt alsvorens SSL te gebruiken. Dus heb ik de volgende def toegevoegd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| def do_CONNECT(self): soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: if self._connect_to(self.path, soc): self.log_request(200) self.wfile.write(self.protocol_version + " 200 Connection established\r\n") self.wfile.write("Proxy-agent: %s\r\n" % self.version_string()) self.wfile.write("\r\n") self._read_write(soc, 300) finally: soc.close() self.connection.close() |
Nu gebruik ik firefox en GET verzoeken zie ik netjes in mijn terminal terug. Echter als ik naar bijvoorbeeld encrypted.google.com ga krijgt ik dat verzoek niet te zien. Ook als ik wireshark er tussen zet zie ik geen specifiek CONNECT verzoek overgaan. Weet iemand of het in firefox wellicht anders werkt of dat ik iets mis in python?