manejo de sockets en cualquier lenguaje

Algoritmos, estructuras de datos, estrategias o patterns. Lenguaje' de programasión, vieja! Ce, loco, Ce! Páison, y todo eso.

manejo de sockets en cualquier lenguaje

Notapor dualbyte el Vie Feb 29, 2008 12:57 pm

hola gente, bueno les comento lo que quiero hacer y luego espero rebir algo de ideas..

quiero lograr hacer un proxy , al estilo de achilles, que modifique los paquetes y la data enviada/recivida automaticamente; osea por una serie de filtros la puedo cambiar no hay problema con eso...

ahora en la parte donde requiero hacer un "proxy" q simplemente envie lo q revice me da problemas con algunas paginas...
osea yo desarrolle uno basico en visual basic, pero puedo visualizar google.com (sin la imagen :S valla a saber proque, calculo que lo tengo que lograr como multisesion o pagina para que pueda acceder al server y "descargarse la imagen" ) y otras webs no me lo permite, ejemplo.. webs de foros, de blogs, etc..

ideas ?

no tengo problema en programar en otro lenguaje... osea c++ o lo que sea no hay problema...

busque algunos de codigo libre pero no andan...

y otrea cosa buanzo: estas en la utn de donde ? lugano, medrano.. o cual otra ? ..
dualbyte
 
Posts: 3
Registrado: Vie Feb 29, 2008 3:09 am

manejo de sockets en cualquier lenguaje

Sponsor

Sponsor
 

Re: manejo de sockets en cualquier lenguaje

Notapor buanzo el Sab Mar 01, 2008 9:38 am

No, no estoy en ninguna UTN, ni lo estare'. Apesta.
No, tampoco en la UBA. Las carreras de informatica tambien apestan ahi.

Material mio fue usado en la UTN, si, pero eso es otra cosa.

Ahora, sobre tu pregunta: buscate http proxies hechos en python. Hay varios. Especialmente, hay uno MUY sencillo, lo vas a encontrar como adjunto a un mensaje de una lista de correos. No recuerdo la URL, pero usa el modulo de HTTP Server creo.

Espera, aca lo encontre. Te lo re-indente con TABs. Funciona:

Código: Seleccionar todo
#!/usr/bin/python
import BaseHTTPServer, select, socket, SocketServer, urlparse

class ProxyHandler (BaseHTTPServer.BaseHTTPRequestHandler):
   __base = BaseHTTPServer.BaseHTTPRequestHandler
   __base_handle = __base.handle

   server_version = "EnigformProxy/0.0.1"
   rbufsize = 0                        # self.rfile Be unbuffered

   def handle(self):
      (ip, port) =  self.client_address
      if hasattr(self, 'allowed_clients') and ip not in self.allowed_clients:
         self.raw_requestline = self.rfile.readline()
         if self.parse_request(): self.send_error(403)
      else:
         self.__base_handle()

   def _connect_to(self, netloc, soc):
      i = netloc.find(':')
      if i >= 0:
         host_port = netloc[:i], int(netloc[i+1:])
      else:
         host_port = netloc, 80
      print "\t" "connect to %s:%d" % host_port
      try: soc.connect(host_port)
      except socket.error, arg:
         try:   msg = arg[1]
         except:   msg = arg
         self.send_error(404, msg)
         return 0
      return 1

   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:
         print "\t" "bye"
         soc.close()
         self.connection.close()

   def do_GET(self):
      (scm, netloc, path, params, query, fragment) = urlparse.urlparse(self.path, 'http')
      if scm != 'http' or fragment or not netloc:
         self.send_error(400, "bad url %s" % self.path)
         return
      soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      try:
         if self._connect_to(netloc, soc):
            self.log_request()
            soc.send("%s %s %s\r\n" % (self.command,urlparse.urlunparse(('', '', path, params, query, '')), self.request_version))
            self.headers['Connection'] = 'close'
            del self.headers['Proxy-Connection']
            for key_val in self.headers.items():
               soc.send("%s: %s\r\n" % key_val)
            soc.send("\r\n")
            self._read_write(soc)
      finally:
         print "\t" "bye"
         soc.close()
         self.connection.close()

   def _read_write(self, soc, max_idling=20):
      iw = [self.connection, soc]
      ow = []
      count = 0
      while 1:
         count += 1
         (ins, _, exs) = select.select(iw, ow, iw, 3)
         if exs: break
         if ins:
            for i in ins:
               if i is soc:
                  out = self.connection
               else:
                  out = soc
               data = i.recv(8192)
               if data:
                  out.send(data)
                  count = 0
         else:
            print "\t" "idle", count
         if count == max_idling: break

   do_HEAD = do_GET
   do_POST = do_GET
   do_PUT  = do_GET
   do_DELETE=do_GET

class ThreadingHTTPServer (SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer): pass

if __name__ == '__main__':
   from sys import argv
   if argv[1:] and argv[1] in ('-h', '--help'):
      print argv[0], "[port [allowed_client_name ...]]"
   else:
      if argv[2:]:
         allowed = []
         for name in argv[2:]:
            client = socket.gethostbyname(name)
            allowed.append(client)
            print "Accept: %s (%s)" % (client, name)
         ProxyHandler.allowed_clients = allowed
         del argv[2:]
      else:
         print "Any clients will be served..."
      BaseHTTPServer.test(ProxyHandler, ThreadingHTTPServer)
Avatarde Usuario
buanzo
Administrador
 
Posts: 673
Registrado: Sab Dic 09, 2006 11:17 am
Ubicación: Buanzonia (ok, Florida, Buenos Aires)


Volver a Programación y Diseño de Sófwer.

¿Quién está conectado...?

Usuarios navegando este Foro: Google [Bot] y 1 invitado

cron