亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? encrypter.py

?? 一個多點下載且源碼公開的P2P軟件
?? PY
?? 第 1 頁 / 共 2 頁
字號:
# Written by Bram Cohen# see LICENSE.txt for license informationfrom cStringIO import StringIOfrom binascii import b2a_hexfrom socket import error as socketerrorfrom urllib import quotefrom traceback import print_excfrom BitTornado.BTcrypto import Cryptotry:    Trueexcept:    True = 1    False = 0    bool = lambda x: not not xDEBUG = FalseMAX_INCOMPLETE = 8protocol_name = 'BitTorrent protocol'option_pattern = chr(0)*8def toint(s):    return long(b2a_hex(s), 16)def tobinary16(i):    return chr((i >> 8) & 0xFF) + chr(i & 0xFF)hexchars = '0123456789ABCDEF'hexmap = []for i in xrange(256):    hexmap.append(hexchars[(i&0xF0)/16]+hexchars[i&0x0F])def tohex(s):    r = []    for c in s:        r.append(hexmap[ord(c)])    return ''.join(r)def make_readable(s):    if not s:        return ''    if quote(s).find('%') >= 0:        return tohex(s)    return '"'+s+'"'   class IncompleteCounter:    def __init__(self):        self.c = 0    def increment(self):        self.c += 1    def decrement(self):        self.c -= 1    def toomany(self):        return self.c >= MAX_INCOMPLETE    incompletecounter = IncompleteCounter()# header, options, download id, my id, [length, message]class Connection:    def __init__(self, Encoder, connection, id,                 ext_handshake=False, encrypted = None, options = None):        self.Encoder = Encoder        self.connection = connection        self.connecter = Encoder.connecter        self.id = id        self.locally_initiated = (id != None)        self.readable_id = make_readable(id)        self.complete = False        self.keepalive = lambda: None        self.closed = False        self.buffer = ''        self.bufferlen = None        self.log = None        self.read = self._read        self.write = self._write        self.cryptmode = 0        self.encrypter = None        if self.locally_initiated:            incompletecounter.increment()            if encrypted:                self.encrypted = True                self.encrypter = Crypto(True)                self.write(self.encrypter.pubkey+self.encrypter.padding())            else:                self.encrypted = False                self.write(chr(len(protocol_name)) + protocol_name +                     option_pattern + self.Encoder.download_id )            self.next_len, self.next_func = 1+len(protocol_name), self.read_header        elif ext_handshake:            self.Encoder.connecter.external_connection_made += 1            if encrypted:   # passed an already running encrypter                self.encrypter = encrypted                self.encrypted = True                self._start_crypto()                self.next_len, self.next_func = 14, self.read_crypto_block3c            else:                self.encrypted = False                self.options = options                self.write(self.Encoder.my_id)                self.next_len, self.next_func = 20, self.read_peer_id        else:            self.encrypted = None       # don't know yet            self.next_len, self.next_func = 1+len(protocol_name), self.read_header        self.Encoder.raw_server.add_task(self._auto_close, 30)    def _log_start(self):   # only called with DEBUG = True        self.log = open('peerlog.'+self.get_ip()+'.txt','a')        self.log.write('connected - ')        if self.locally_initiated:            self.log.write('outgoing\n')        else:            self.log.write('incoming\n')        self._logwritefunc = self.write        self.write = self._log_write    def _log_write(self, s):        self.log.write('w:'+b2a_hex(s)+'\n')        self._logwritefunc(s)            def get_ip(self, real=False):        return self.connection.get_ip(real)    def get_id(self):        return self.id    def get_readable_id(self):        return self.readable_id    def is_locally_initiated(self):        return self.locally_initiated    def is_encrypted(self):        return bool(self.encrypted)    def is_flushed(self):        return self.connection.is_flushed()    def _read_header(self, s):        if s == chr(len(protocol_name))+protocol_name:            return 8, self.read_options        return None    def read_header(self, s):        if self._read_header(s):            if self.encrypted or self.Encoder.config['crypto_stealth']:                return None            return 8, self.read_options        if self.locally_initiated and not self.encrypted:            return None        elif not self.Encoder.config['crypto_allowed']:            return None        if not self.encrypted:            self.encrypted = True            self.encrypter = Crypto(self.locally_initiated)        self._write_buffer(s)        return self.encrypter.keylength, self.read_crypto_header    ################## ENCRYPTION SUPPORT ######################    def _start_crypto(self):        self.encrypter.setrawaccess(self._read,self._write)        self.write = self.encrypter.write        self.read = self.encrypter.read        if self.buffer:            self.buffer = self.encrypter.decrypt(self.buffer)    def _end_crypto(self):        self.read = self._read        self.write = self._write        self.encrypter = None    def read_crypto_header(self, s):        self.encrypter.received_key(s)        self.encrypter.set_skey(self.Encoder.download_id)        if self.locally_initiated:            if self.Encoder.config['crypto_only']:                cryptmode = '\x00\x00\x00\x02'    # full stream encryption            else:                cryptmode = '\x00\x00\x00\x03'    # header or full stream            padc = self.encrypter.padding()            self.write( self.encrypter.block3a                      + self.encrypter.block3b                      + self.encrypter.encrypt(                            ('\x00'*8)            # VC                          + cryptmode             # acceptable crypto modes                          + tobinary16(len(padc))                          + padc                  # PadC                          + '\x00\x00' ) )        # no initial payload data            self._max_search = 520            return 1, self.read_crypto_block4a        self.write(self.encrypter.pubkey+self.encrypter.padding())        self._max_search = 520        return 0, self.read_crypto_block3a    def _search_for_pattern(self, s, pat):        p = s.find(pat)        if p < 0:            if len(s) >= len(pat):                self._max_search -= len(s)+1-len(pat)            if self._max_search < 0:                self.close()                return False            self._write_buffer(s[1-len(pat):])            return False        self._write_buffer(s[p+len(pat):])        return True    ### INCOMING CONNECTION ###    def read_crypto_block3a(self, s):        if not self._search_for_pattern(s,self.encrypter.block3a):            return -1, self.read_crypto_block3a     # wait for more data        return len(self.encrypter.block3b), self.read_crypto_block3b    def read_crypto_block3b(self, s):        if s != self.encrypter.block3b:            return None        self.Encoder.connecter.external_connection_made += 1        self._start_crypto()        return 14, self.read_crypto_block3c    def read_crypto_block3c(self, s):        if s[:8] != ('\x00'*8):             # check VC            return None        self.cryptmode = toint(s[8:12]) % 4        if self.cryptmode == 0:            return None                     # no encryption selected        if ( self.cryptmode == 1            # only header encryption             and self.Encoder.config['crypto_only'] ):            return None        padlen = (ord(s[12])<<8)+ord(s[13])        if padlen > 512:            return None        return padlen+2, self.read_crypto_pad3    def read_crypto_pad3(self, s):        s = s[-2:]        ialen = (ord(s[0])<<8)+ord(s[1])        if ialen > 65535:            return None        if self.cryptmode == 1:            cryptmode = '\x00\x00\x00\x01'    # header only encryption        else:            cryptmode = '\x00\x00\x00\x02'    # full stream encryption        padd = self.encrypter.padding()        self.write( ('\x00'*8)            # VC                  + cryptmode             # encryption mode                  + tobinary16(len(padd))                  + padd )                # PadD        if ialen:            return ialen, self.read_crypto_ia        return self.read_crypto_block3done()    def read_crypto_ia(self, s):        if DEBUG:            self._log_start()            self.log.write('r:'+b2a_hex(s)+'(ia)\n')            if self.buffer:                self.log.write('r:'+b2a_hex(self.buffer)+'(buffer)\n')        return self.read_crypto_block3done(s)    def read_crypto_block3done(self, ia=''):        if DEBUG:            if not self.log:                self._log_start()        if self.cryptmode == 1:     # only handshake encryption            assert not self.buffer  # oops; check for exceptions to this            self._end_crypto()        if ia:            self._write_buffer(ia)        return 1+len(protocol_name), self.read_encrypted_header    ### OUTGOING CONNECTION ###    def read_crypto_block4a(self, s):        if not self._search_for_pattern(s,self.encrypter.VC_pattern()):            return -1, self.read_crypto_block4a     # wait for more data        self._start_crypto()        return 6, self.read_crypto_block4b    def read_crypto_block4b(self, s):        self.cryptmode = toint(s[:4]) % 4        if self.cryptmode == 1:             # only header encryption            if self.Encoder.config['crypto_only']:                return None        elif self.cryptmode != 2:            return None                     # unknown encryption        padlen = (ord(s[4])<<8)+ord(s[5])        if padlen > 512:            return None        if padlen:            return padlen, self.read_crypto_pad4        return self.read_crypto_block4done()    def read_crypto_pad4(self, s):        # discard data        return self.read_crypto_block4done()    def read_crypto_block4done(self):        if DEBUG:            self._log_start()        if self.cryptmode == 1:     # only handshake encryption            if not self.buffer:  # oops; check for exceptions to this                return None            self._end_crypto()        self.write(chr(len(protocol_name)) + protocol_name +             option_pattern + self.Encoder.download_id)        return 1+len(protocol_name), self.read_encrypted_header    ### START PROTOCOL OVER ENCRYPTED CONNECTION ###    def read_encrypted_header(self, s):        return self._read_header(s)    ################################################    def read_options(self, s):        self.options = s        return 20, self.read_download_id    def read_download_id(self, s):

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区在线| 蜜桃av一区二区在线观看| 午夜精品福利一区二区三区av| 老司机精品视频一区二区三区| av不卡免费电影| 日韩免费在线观看| 亚洲va国产天堂va久久en| 国产a级毛片一区| 日韩欧美视频在线| 亚洲国产成人av好男人在线观看| 成人午夜免费视频| 精品999久久久| 日韩激情av在线| 欧美综合天天夜夜久久| 欧美韩国日本一区| 日韩电影在线看| 欧美偷拍一区二区| 综合久久久久久| 成人午夜av影视| 国产视频不卡一区| 国产一区二区三区四区五区入口| 这里只有精品99re| 视频在线观看一区| 在线视频国产一区| 亚洲欧美色图小说| 91网站黄www| 国产精品视频观看| 国产一区二区精品久久99| 日韩一区二区三区精品视频| 手机精品视频在线观看| 91 com成人网| 日本欧美一区二区三区| 欧美一二三区在线| 蜜桃久久精品一区二区| 91精品国产综合久久久久久久久久 | 国产精品网站在线| 国产乱码精品一品二品| 久久你懂得1024| 国产精品一品视频| 国产精品久久久一本精品| 成人av网址在线| 亚洲精品乱码久久久久久| 欧美午夜精品一区| 丝袜诱惑制服诱惑色一区在线观看| 555夜色666亚洲国产免| 开心九九激情九九欧美日韩精美视频电影 | 色av成人天堂桃色av| 亚洲一区电影777| 欧美色区777第一页| 视频在线观看91| 欧美精品一区二区三区蜜桃 | 在线视频国内一区二区| 日韩黄色片在线观看| 精品国产一区二区三区久久影院| 激情文学综合插| 国产精品青草久久| 欧美影院一区二区| 久久99久久久久| 国产精品色呦呦| 欧美另类高清zo欧美| 精品伊人久久久久7777人| 国产精品美女视频| 欧美色倩网站大全免费| 国产精品一区在线观看你懂的| 中文字幕在线播放不卡一区| 欧美日韩精品一区二区三区四区| 老司机精品视频一区二区三区| 国产精品久久一卡二卡| 69av一区二区三区| 不卡的av中国片| 日韩精品电影一区亚洲| 欧美国产精品一区二区| 欧美日本在线观看| 国产99久久久国产精品| 亚洲 欧美综合在线网络| 国产日韩欧美一区二区三区乱码| 欧美三级电影在线观看| 丰满亚洲少妇av| 日韩av一区二| 一区二区在线免费观看| 精品国产三级a在线观看| 色婷婷av一区二区三区gif| 麻豆高清免费国产一区| 亚洲激情av在线| 久久精品亚洲精品国产欧美kt∨ | 欧美96一区二区免费视频| 中文字幕二三区不卡| 日韩欧美亚洲一区二区| 欧美性videosxxxxx| 成人精品gif动图一区| 麻豆视频观看网址久久| 亚洲女女做受ⅹxx高潮| 国产精品午夜久久| 久久综合九色综合欧美98| 欧美日韩激情一区| 91丨九色丨国产丨porny| 国产剧情一区二区三区| 另类的小说在线视频另类成人小视频在线 | 亚洲一卡二卡三卡四卡无卡久久 | 日本中文字幕一区二区视频| 亚洲精品成人在线| 国产欧美日韩激情| 久久久久久**毛片大全| 日韩欧美www| 日韩一区二区三区电影在线观看 | 国产精品美女www爽爽爽| 久久你懂得1024| 久久精品一区二区三区不卡| 欧美va日韩va| 日韩美一区二区三区| 欧美电视剧在线看免费| 日韩一区二区三区免费观看| 91精品国产一区二区三区| 欧美系列日韩一区| 欧美色男人天堂| 欧美日韩国产乱码电影| 欧美日韩中文国产| 欧美日韩一卡二卡| 欧美人伦禁忌dvd放荡欲情| 欧美日韩一区二区欧美激情| 欧美三级一区二区| 欧美精品一卡两卡| 欧美一区二区在线播放| 日韩视频免费观看高清完整版在线观看 | 日韩精品一区二区三区在线观看| 欧美一区二区三区在线观看| 日韩亚洲电影在线| 精品国产免费人成在线观看| 久久久久国色av免费看影院| 国产精品福利一区| 亚洲乱码国产乱码精品精的特点| 亚洲最新视频在线观看| 亚洲123区在线观看| 韩国av一区二区三区| 成人免费av在线| 欧美主播一区二区三区| 日韩欧美国产三级| 国产精品日日摸夜夜摸av| 亚洲精品国产视频| 日本aⅴ亚洲精品中文乱码| 久久99蜜桃精品| 91在线一区二区三区| 欧美日本不卡视频| 久久亚洲综合色一区二区三区| 中日韩av电影| 五月天中文字幕一区二区| 黄页视频在线91| 91国内精品野花午夜精品| 精品第一国产综合精品aⅴ| 国产精品理论片在线观看| 午夜日韩在线观看| 国产乱子伦一区二区三区国色天香| caoporen国产精品视频| 91精品国产免费久久综合| 国产精品久久久久久久裸模| 天天影视涩香欲综合网| 懂色av中文字幕一区二区三区| 精品视频在线免费看| 国产欧美精品日韩区二区麻豆天美| 亚洲美女在线国产| 韩国一区二区在线观看| 在线免费观看日本欧美| 久久久影院官网| 亚洲gay无套男同| 99re热视频精品| 26uuu亚洲| 婷婷成人综合网| 色播五月激情综合网| 久久久久亚洲蜜桃| 蜜芽一区二区三区| 91高清在线观看| 日本一区二区免费在线观看视频| 日韩专区中文字幕一区二区| www.av亚洲| 久久久国产午夜精品| 免费欧美日韩国产三级电影| 色94色欧美sute亚洲13| 国产亚洲一区二区在线观看| 免费精品视频在线| 欧美日韩一级片网站| 综合在线观看色| 国产精品一二一区| 精品嫩草影院久久| 天天综合天天综合色| 欧美日韩视频在线一区二区 | 麻豆91在线观看| 欧美精品xxxxbbbb| 亚洲影视在线观看| 色婷婷综合久久久中文字幕| 中文字幕va一区二区三区| 国产福利精品一区| 久久久精品影视| 国产凹凸在线观看一区二区| 国产视频一区在线播放| 国产宾馆实践打屁股91| 国产精品丝袜久久久久久app| 国产一区二区不卡在线| 久久久久亚洲综合| 成人污视频在线观看| 国产精品五月天|