[Python] HTTP(s) proxy server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 165232

Topicstarter
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.

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?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Weet je zeker dat je proxy-instellingen kloppen, zodat de proxy ook voor https gebruik wordt?

Acties:
  • 0 Henk 'm!

  • GiantLeap
  • Registratie: Oktober 2005
  • Nu online

GiantLeap

One GiantLeap for mankind

Verder heb je volgens mij ook een i vergeten: import urllib :)

Mario Kart Tour: 211982902522
Rockstar Games Social Club (PC): GiantLeap

RC spul:
Traxxas Nitro Rustler
Hubsan X4 H107D
DJI Phantom 2 Vision+


Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 07:04

voodooless

Sound is no voodoo!

proxyen van https is er eigenlijk in twee smaken:

- netjes via je proxy instelling: in dat geval zal er inderdaad eerst een CONNECT naar de proxy server gestuurd worden. In de CONNECT staat waar de proxy heen moet connecten. daarna zal de proxy simpelweg een directe verbinding opbouwen met de remote host en de 1:1 gegevens uitwisselen tussen client en remote host. Aangezien https niets anders is dan TLS/SSL + HTTP, heb je geen controle over wat er over de lijn gaat.
- transparante proxy: hierbij zorg je ervoor dat je proxy zelf TLS/SSL doet. Hij stuurt dan dus de HTTP data weer via een eigen TLS/SSL verbinding door naar de remote server. "Voordeel" is dat je nu dus wel kan meeluisteren. Je hebt echter wel een probleem met certificaten. Je browser zal waarschijnlijk je proxy niet vertrouwen en overal een warning geven. Oplossing is dan om een eigen certificaat in je browser te installeren voor *.*... Je zult dan echter je echte certificaat security op je proxy moeten regelen.

Do diamonds shine on the dark side of the moon :?