-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в dimzon541

 -Интересы

.net ajax c# development fallout futurama java javascript nightwish o/r mapping rpg sci-fi vbscript web 2.0 windows communication foundation windows presentation foundation xaml xml алгоритмы сжатия аудио/видео альтернативная история

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2006
Записей:
Комментариев:
Написано: 3362


Переход на Linux - GreedyTorrent на Python

Четверг, 03 Февраля 2011 г. 20:33 + в цитатник
За основу взял microproxy, добавил модификацию upload-а и поддержку цепочки прокси...

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. pyGreedTorrent
  6. This code is based on code based on microproxy.py written by ubershmekel in 2006.
  7.  
  8.  
  9. """
  10.  
  11. PORT = 8080
  12. UP_MULT = 5.53
  13. DN_MULT = 0
  14.  
  15. ACTUAL_PROXY_HOST_PORT = ()
  16. # Uncomment and modify line below to use chain proxy
  17. #ACTUAL_PROXY_HOST_PORT = '127.0.0.1', 3128
  18.  
  19. import re, socket, threading
  20.  
  21. reUP =  re.compile(r"(?<=\Wuploaded=)\d+", re.UNICODE )
  22. reDOWN =  re.compile(r"(?<=\Wdownloaded=)\d+", re.UNICODE )
  23.  
  24. err403 = 'HTTP/1.0 403 Forbidden\r\n' \
  25.     +'Server: nginx/0.7.65\r\n' \
  26.     +'Date: Tue, 16 Nov 2010 14:20:07 GMT\r\n' \
  27.     +'Content-Type: text/html; charset=windows-1251\r\n' \
  28.     +'Content-Length: 169\r\n' \
  29.     +'Connection: close\r\n' \
  30.     +'<html> <head><title>403 Forbidden</title></head>' \
  31.     +'<body></body></html>'
  32.  
  33. regex = re.compile(r'http://(.*?)/', re.IGNORECASE)
  34.  
  35. def cheat_url( s ):
  36.     m = reUP.search( s )
  37.     m2 = reDOWN.search( s )
  38.     if m and m2 :
  39.         up = int( round( UP_MULT * int( m.group() ) ) )
  40.         down = int( round( DN_MULT * int( m2.group() ) ) )
  41.         return s[:m.start()] + str(up + down) + s[m.end():]
  42.     else:
  43.         return s
  44.    
  45.  
  46. class ConnectionThread(threading.Thread):
  47.     def __init__(self, (conn,addr)):
  48.         self.conn = conn
  49.         self.addr = addr
  50.         threading.Thread.__init__(self)
  51.    
  52.     def run(self):
  53.  
  54.         data = self.conn.recv(1024*1024)
  55.         #print data
  56.         #print 11
  57.  
  58.         host = regex.search(data).groups()[0]
  59.  
  60.         data = cheat_url( data )
  61.        
  62.         request = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  63.         #request.settimeout(6)
  64.        
  65.         if ACTUAL_PROXY_HOST_PORT:
  66.             host = ACTUAL_PROXY_HOST_PORT
  67.         else:
  68.             i = host.find(':')
  69.             if i >= 0:
  70.                 host = host[:i], int(host[i+1:])
  71.             else:
  72.                 host = host, 80
  73.         try:        
  74.             request.connect( host )
  75.                
  76.             request.send( data )
  77.      
  78.             reply = ''
  79.      
  80.             while 1:
  81.                 temp = request.recv(1024)
  82.      
  83.                 if ('' == temp):
  84.                     break
  85.                    
  86.                 self.conn.send(temp)
  87.         except:
  88.             self.conn.send( err403 )
  89.         self.conn.close()
  90.  
  91. class ProxyThread(threading.Thread):
  92.     def __init__(self, port):
  93.         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  94.         self.sock.bind(('localhost', port))
  95.         threading.Thread.__init__(self)
  96.    
  97.     def run(self):
  98.         self.sock.listen(10)
  99.         while 1:
  100.             temp = ConnectionThread(self.sock.accept())
  101.             temp.daemon = True
  102.             temp.start()
  103.  
  104. if __name__ == "__main__":
  105.     proxy = ProxyThread(PORT)
  106.     #proxy.daemon = True
  107.     #proxy.start()
  108.     print "Started a proxy on port", PORT
  109.     proxy.run()
  110.    
  111.  
Рубрики:  девелопмент
всячина

Понравилось: 33 пользователям

lugoshy   обратиться по имени Вторник, 05 Июня 2018 г. 15:34 (ссылка)
+
Ответить С цитатой В цитатник
Аноним   обратиться по имени Понедельник, 25 Июня 2018 г. 15:52 (ссылка)
+
Ответить С цитатой В цитатник
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку