def freeProxyTen(): """ 云代理 http://www.ip3366.net/free/ :return: """ urls = ['http://www.ip3366.net/free/'] for url in urls: r = EasyHttp.get(url, timeout=10) if not r: Log.w('http://www.ip3366.com无效') return [] proxies = re.findall(r'<td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>[\s\S]*?<td>(\d+)</td>', r) for proxy in proxies: yield ":".join(proxy)
def freeProxyNinth(): """ 码农代理 https://proxy.coderbusy.com/ :return: """ urls = ['https://proxy.coderbusy.com/classical/country/cn.aspx?page=1'] for url in urls: r = EasyHttp.get(url, timeout=10) if not r: Log.w('http://proxy.coderbusy.com无效') return [] proxies = re.findall('data-ip="(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})".+?>(\d+)</td>', r) for proxy in proxies: yield ':'.join(proxy)
def freeProxyWallFirst(): """ 墙外网站 cn-proxy :return: """ urls = ['http://cn-proxy.com/', 'http://cn-proxy.com/archives/218'] for url in urls: r = EasyHttp.get(url, timeout=10) if not r: Log.w('http://cn-proxy.com无效') return [] proxies = re.findall(r'<td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>[\w\W]<td>(\d+)</td>', ) for proxy in proxies: yield ':'.join(proxy)
def spawnPeers(self): if SSimulator().tick == 0: Log.w(Log.DEBUG, "Creating new peers ...") for i in range(0, int(SConfig().value("nInitialPeers", "Peer"))): self.addPeer() for i in range(0, int(SConfig().value("nInitialPeers", "PeerC1"))): self.addPeer_C1() else: if self.spawnPeer() == True: self.addPeer() if self.spawnPeer_C1() == True: self.addPeer_C1()
def freeProxyWallSecond(): """ https://proxy-list.org/english/index.php :return: """ urls = ['https://proxy-list.org/english/index.php?p=%s' % n for n in range(1, 10)] import base64 for url in urls: r = EasyHttp.get(url, timeout=10) if not r: Log.w('http://proxy-list.org/english/index.php无效') return [] proxies = re.findall(r"Proxy\('(.*?)'\)", r) for proxy in proxies: yield base64.b64decode(proxy).decode()
def freeProxyTwelve(page_count=2): """ guobanjia http://ip.jiangxianli.com/?page= 免费代理库 超多量 :return: """ for i in range(1, page_count + 1): url = 'http://ip.jiangxianli.com/?page={}'.format(i) html_tree = EasyHttp.getHtmlTree(url) if not html_tree: Log.w('http://ip.jiangxianli.com无效') return [] tr_list = html_tree.xpath("/html/body/div[1]/div/div[1]/div[2]/table/tbody/tr") if len(tr_list) == 0: continue for tr in tr_list: yield tr.xpath("./td[2]/text()")[0] + ":" + tr.xpath("./td[3]/text()")[0]
def freeProxyEight(): """ 秘密代理 http://www.mimiip.com """ url_gngao = ['http://www.mimiip.com/gngao/%s' % n for n in range(1, 2)] # 国内高匿 url_gnpu = ['http://www.mimiip.com/gnpu/%s' % n for n in range(1, 2)] # 国内普匿 url_gntou = ['http://www.mimiip.com/gntou/%s' % n for n in range(1, 2)] # 国内透明 url_list = url_gngao + url_gnpu + url_gntou for url in url_list: r = EasyHttp.get(url, timeout=10) if not r: Log.w('http://www.mimiip.com无效') return [] proxies = re.findall(r'<td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>[\w\W].*<td>(\d+)</td>', r) for proxy in proxies: yield ':'.join(proxy)
def __waitForOrderId(self): Log.v('正在排队获取订单!') count = 0 while True: count += 1 status, msg, waitTime, orderId, errorMsg = self._queryOrderWaitTime( ) if not Utils.check(status, 'queryOrderWaitTime: %s' % msg): return None Log.v('[%d]正在等待订单提交结果...' % count) if waitTime < 0: if orderId: Log.v('订单提交成功,订单号: %s' % orderId) return orderId elif errorMsg: Log.v(errorMsg) return None Log.w('订单提交正在入队...') time.sleep(3) return None
def cut_image(dir_address, img_name): f_name = os.path.join(dir_address, img_name) im = read_image(f_name) if im is None: Log.w("该图片{ %s }处理异常: " % img_name) return all_pic = dir_address + '/pic' write_image(get_text(im), os.path.join(all_pic, img_name)) num = 1 sub_name = img_name.split('.') for sub_im in get_image(im): sub_img_name = sub_name[0] + '_' + str(num) + '.' + sub_name[1] num += 1 write_image(sub_im, os.path.join(all_pic, sub_img_name)) #开始验证图片百度/Tencent if IMAGE_OCR_SERVICE_CHOOSE == IMAGE_OCR_SERVICE_BAIDU: image = ImageClassify(BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_ID) captcha_name = image.resolve_words(os.path.join(all_pic, img_name)) or '' pass elif IMAGE_OCR_SERVICE_CHOOSE == IMAGE_OCR_SERVICE_TENCENT: image = TencentAI(TENCENT_APP_ID, TENCENT_SECRET_KEY) captcha_name = image.resolve_words(os.path.join(all_pic, img_name)) or '' flag_name = set(captcha_name) Log.w('找出:' + captcha_name) img_list = sorted(os.listdir(all_pic)) results = [] for i in img_list: if i == img_name: continue c_path = os.path.join(all_pic, i) index = int(i.split('.')[0].split('_')[1]) - 1 if IMAGE_OCR_SERVICE_CHOOSE == IMAGE_OCR_SERVICE_BAIDU: resolve_name = image.resolve_image(c_path) or '' pass elif IMAGE_OCR_SERVICE_CHOOSE == IMAGE_OCR_SERVICE_TENCENT: resolve_name = image.resolve_image(os.path.join(all_pic, img_name)) or '' Log.w('第' + str(index) + '图片识别为:' + resolve_name) variable_name = set(resolve_name) if flag_name.intersection(variable_name): results.append(str(index)) #内测阶段,不删除文件 # remove_pic(dir_address,img_name) Log.w('结果集是:' + ','.join(results)) return ','.join(results)
def main(): login = Login() Log.v("正在登录...") result, msg = login.login(USER_NAME, USER_PWD) if not Utils.check(result, msg): Log.e(msg) return Log.v("%s,登录成功" % msg) seatTypesCode = (SEAT_TYPE_CODE if SEAT_TYPE_CODE else [SEAT_TYPE[key] for key in SEAT_TYPE.keys()]) passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else "1" while True: # 无限循环一直查票,直到下单成功 try: print("-" * 40) ticketDetails = Query.loopQuery( TRAIN_DATE, FROM_STATION, TO_STATION, TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO, seatTypesCode, ) Log.v("已为您查询到可用余票:%s" % ticketDetails) ticketDetails.passengersId = PASSENGERS_ID ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else "dc" submit = Submit(ticketDetails) if submit.submit(): submit.showSubmitInfoPretty() break time.sleep(1) except Exception as e: Log.w(e) print(login.loginOut())
def main(): #免费代理ip访问 GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL) init_ip_pool() EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS) cookies = {c.name: c.value for c in EasyHttp.get_session().cookies} RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION') #(int(RAIL_EXPIRATION)-172800000) < int(time.time()*1000) if RAIL_EXPIRATION and int(RAIL_EXPIRATION) < int(time.time() * 1000): Log.d('cookie登录已过期,重新请求') status, login = do_login() if not status: return else: if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies): status, login = do_login() if not status: return else: response = EasyHttp.post_custom(loginUrls['normal']['conf']) if not response or not response.json(): Log.d('登录状态检查失败,重新请求') status, login = do_login() if not status: return resp = response.json() login_status = resp.get('data').get('is_login') Log.d('登录状态:%s' % login_status) if 'Y' != login_status: Log.d('登录状态已过期,重新请求') status, login = do_login() if not status: return login = Login() login._urlInfo = loginUrls['normal'] Log.v('已登录状态,开始寻找小票票') seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [ SEAT_TYPE[key] for key in SEAT_TYPE.keys() ] passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1' count = 0 while True: # 死循环一直查票,直到下单成功 try: nowTime, status = deadline.do_fix_time() if status: Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime) continue count += 1 Log.v('第%d次访问12306网站' % count) print('-' * 40) ticketDetails = Query.loopQuery( TRAIN_DATE, FROM_STATION, TO_STATION, TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO, seatTypesCode, PASSENGERS_ID, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL) Log.v('已为您查询到可用余票:%s' % ticketDetails) ticketDetails.passengersId = PASSENGERS_ID ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc' submit = Submit(ticketDetails) seats_default = copy.deepcopy(CHOOSE_SEATS) if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT] or ticketDetails.seatType == SeatName.SECOND_CLASS_SEAT) and not seats_default: results_seat = [] for i in range(len(PASSENGERS_ID)): random_seat = random.choice(NUM_SEAT) + random.choice( LETTER_SEAT) if random_seat in results_seat: continue results_seat.append(random_seat) seats_default.extend(results_seat) if submit.submit(seats_default): status, contents = submit.showSubmitInfoPretty() if status: flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents) if flag: Log.v("邮件发送成功!") else: Log.v("邮件发送失败!") sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!') if sms_id: Log.v("短信提醒发送成功!") else: Log.v("短信提醒发送失败!") break time.sleep(1) except Exception as e: Log.w(e) login.loginOut() Log.d('注销登录成功')
passengersId = input('请输入乘客身份证号(多个以,分隔): ').strip().split(',') tourFlag = input('单程:%s,往返:%s(默认%s): ' % (TourFlag.SINGLE, TourFlag.GO_BACK, TourFlag.SINGLE)).strip() or TourFlag.SINGLE Log.d('出发日期: %s,座位类别: %s,乘客类型: %s,车票类型: %s' % (trainDate, seatTypesCode, passengerTypeCode, tourFlag)) session = requests.session() login = Login(session) for count in range(1, 10, 1): Log.v('[%d]正在进行登录...' % count) result, msg = login.login(userName, userPwd, type=(count - 1) % 2) if Utils.check(result, msg): break Log.w('登录失败,正在重新进行登录...') if not Utils.check(login.isLogin(), '登录失败,程序退出!'): exit(-1) Log.v('%s,登录成功' % msg) ticketDetails = Query.loopQuery( session, trainDate, fromStation, toStation, TrainUtils.passengerType2Desc(passengerTypeCode), seatTypesCode) if not Utils.check(ticketDetails, '刷票失败!'): exit(-1) Log.v('已为您查询到可用余票:%s' % ticketDetails) ticketDetails.passengersId = passengersId ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = tourFlag submit = Submit(session, ticketDetails) try:
def addPeer_C1(self): uploadRate = random.randint(self.C1uMin, self.C1uMax) downloadRate = random.randint(self.C1dMin, self.C1dMax) sleep = random.randint(0, self._C1maxSleep) p = Peer_C1(Torrent(self.__tracker), uploadRate, downloadRate, sleep) # Create new peer Log.w(Log.INFO, "New Peer_C1 {} Up/Down [{}/{}] Sleep {}".format(p.pid, uploadRate, downloadRate, sleep))
def main(): eHttp.load_cookies(COOKIE_SAVE_ADDRESS) cookies = {c.name: c.value for c in eHttp.get_session().cookies} if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies): status,login = do_login() if not status: return else: response = eHttp.post_custom(loginUrls['normal']['conf']) if not response or not response.json(): Log.d('登录状态检查失败,重新请求') status, login = do_login() if not status: return resp = response.json() login_status = resp.get('data').get('is_login') login_name = resp.get('data').get('name') Log.d('登录状态:%s'%login_status) if 'Y' != login_status: Log.d('登录状态已过期,重新请求') status, login = do_login() if not status: return login = Login() login._urlInfo = loginUrls['normal'] if login_name is not None: Log.v(login_name + ': 已登录状态,开始寻找车票') count = 0 while True: # 死循环查票直到下单成功 try: nowTime, status = do_fix_time() if status: Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime) continue count += 1 Log.v('\n第%d次访问12306网站' % count) print('-' * 40) ticketDetails = Query.loopQuery(TRAIN_DATE, FROM_STATION, TO_STATION, passengerType2Desc(PASSENGER_TYPE_CODE), TRAINS_NO, SEAT_TYPE_CODE, PASSENGERS_ID, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL) Log.v('已为您查询到可用余票:%s' % ticketDetails) ticketDetails.passengersId = PASSENGERS_ID ticketDetails.ticketTypeCodes = PASSENGER_TYPE_CODE ticketDetails.tourFlag = TOUR_FLAG submit = Submit(ticketDetails) seats_default = copy.deepcopy(CHOOSE_SEATS) if (ticketDetails.seatType == SEAT_TYPE[SeatName.FIRST_CLASS_SEAT] or ticketDetails.seatType == SEAT_TYPE[SeatName.SECOND_CLASS_SEAT]) and not seats_default: results_seat = [] for i in range(len(PASSENGERS_ID)): random_seat = random.choice(NUM_SEAT)+random.choice(LETTER_SEAT) if random_seat in results_seat: continue results_seat.append(random_seat) seats_default.extend(results_seat) if submit.submit(seats_default): Log.v("您已成功订购火车票!请在30分钟内前往12306官方网站进行支付") break else: Log.v("购票失败,重新请求") time.sleep(5) except Exception as e: Log.w(e) time.sleep(5)
def super_hero(love): Log.v('启动***超级英雄***线程') #免费代理ip访问 GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL) init_ip_pool() EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS) cookies = {c.name: c.value for c in EasyHttp.get_session().cookies} if 'uamtk' not in cookies or 'RAIL_DEVICEID' not in cookies: status, login = do_login(love) if not status: love.change_offline_status(True) return else: status, _ = check_user_login() if not status: status, login = do_login(love) if not status: love.change_offline_status(True) return Log.v('已登录状态,开始寻找小票票') seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [ SEAT_TYPE[key] for key in SEAT_TYPE.keys() ] passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1' Log.d("订单详情:日期[%s]/区间[%s至%s]%s%s/刷票间隔[%ss]" % (','.join(TRAIN_DATE), FROM_STATION, TO_STATION, '/出发时间段[' + '~'.join(leave_time) + ']' if leave_time else '', '/车次[' + ','.join(TRAINS_NO) + ']' if TRAINS_NO else '', QUERY_TICKET_REFERSH_INTERVAL)) count = 0 while True: try: nowTime, status = deadline.do_fix_time() if status: Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime) continue count += 1 Log.v('第%d次访问12306网站' % count) print('-' * 40) ticketDetails = Query.loopQuery( TRAIN_DATE, FROM_STATION, TO_STATION, TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO, seatTypesCode, PASSENGERS_ID, leave_time, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL) status = love.get_login_status() # status,_ = check_user_login() if not status: #非登录状态有票,仅支持自动登录或第三方AI自动登录 if SELECT_AUTO_CHECK_CAPTHCA == CAPTCHA_CHECK_METHOD_HAND: Log.e("手动模式登录状态已过期,请手动重试...") status, login = do_login(love) if not status: Log.e("登录状态已过期,重试登录失败") love.change_offline_status(True) return # Log.v('已为您查询到可用余票:%s' % ticketDetails) Log.v('已为您查询到可用余票:[日期:%s,车次:%s,出发站:%s,到达站:%s,出发时间:%s,到达时间:%s]' % (ticketDetails.custom_date, ticketDetails.trainNo, ticketDetails.fromStation, ticketDetails.toStation, ticketDetails.leaveTime, ticketDetails.arriveTime)) ticketDetails.passengersId = PASSENGERS_ID ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc' submit = Submit(ticketDetails) seats_default = copy.deepcopy(CHOOSE_SEATS) if submit.submit(seats_default): status, contents = submit.showSubmitInfoPretty() if status: Log.v("获取车票详情成功") flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents) if flag: Log.v("邮件发送成功!") else: Log.v("邮件发送失败!") sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!') if sms_id: Log.v("短信提醒发送成功!") else: Log.v("短信提醒发送失败!") break time.sleep(1) except Exception as e: Log.w(e) login.loginOut() Log.d('注销登录成功') love.change_offline_status(True)
def working(username=USER_NAME, password=USER_PWD, id_cards=PASSENGERS_ID, day=TRAIN_DATE, from_station=FROM_STATION, to_station=TO_STATION, seats=SEAT_TYPE_CODE, types=PASSENGER_TYPE_CODE, train_no=TRAINS_NO, polocy=POLICY_BILL, tour_flag=TOUR_FLAG, refersh=QUERY_TICKET_REFERSH_INTERVAL): login = Login() Log.v('正在登录...') result, msg = login.login(username, password, IS_AUTO_CHECK_CAPTHCA) if not Utils.check(result, msg): Log.e(msg) return Log.v('%s,登录成功' % msg) seatTypesCode = seats if seats else [ SEAT_TYPE[key] for key in SEAT_TYPE.keys() ] passengerTypeCode = types if types else '1' count = 0 while True: # 死循环一直查票,直到下单成功 try: nowTime, status = deadline.do_fix_time() if status: Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime) continue count += 1 Log.v('第%d 次访问12306网站' % count) print('-' * 40) ticketDetails = Query.loopQuery( day, from_station, to_station, TrainUtils.passengerType2Desc(passengerTypeCode), train_no, seatTypesCode, id_cards, polocy, refersh) Log.v('已为您查询到可用余票:%s' % ticketDetails) ticketDetails.passengersId = id_cards ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = tour_flag if tour_flag else 'dc' submit = Submit(ticketDetails) if submit.submit(CHOOSE_SEATS): status, contents = submit.showSubmitInfoPretty() if status: flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents) if flag: Log.v("邮件发送成功!") else: Log.v("邮件发送失败!") sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!') if sms_id: Log.v("短信提醒发送成功!") else: Log.v("短信提醒发送成功!") break time.sleep(1) except Exception as e: Log.w("提交操作异常:" + e) print(login.loginOut())
def main(): #免费代理ip访问 GetFreeProxy.getAllProxy(THREAD_POOL_SIZE, THREAD_OR_PROCESS, IS_REFASH_IP_POOL) init_ip_pool() EasyHttp.load_cookies(COOKIE_SAVE_ADDRESS) cookies = {c.name: c.value for c in EasyHttp.get_session().cookies} RAIL_EXPIRATION = cookies.get('RAIL_EXPIRATION') #当前实际显示有效时间为4天,实际访问可下单时间大概为2天(细节可按实际情况调节) if 'RAIL_EXPIRATION' in cookies and (int(RAIL_EXPIRATION) - 172800000) < int(time.time() * 1000): Log.v('cookie登录已过期,重新请求') EasyHttp.removeCookies() status, login = do_login() if not status: return else: if not ('uamtk' in cookies and 'RAIL_DEVICEID' in cookies): status, login = do_login() if not status: return else: login = Login() Log.v('已登录状态,开始寻找小票票') seatTypesCode = SEAT_TYPE_CODE if SEAT_TYPE_CODE else [ SEAT_TYPE[key] for key in SEAT_TYPE.keys() ] passengerTypeCode = PASSENGER_TYPE_CODE if PASSENGER_TYPE_CODE else '1' count = 0 while True: # 死循环一直查票,直到下单成功 try: nowTime, status = deadline.do_fix_time() if status: Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime) continue count += 1 Log.v('第%d次访问12306网站' % count) print('-' * 40) ticketDetails = Query.loopQuery( TRAIN_DATE, FROM_STATION, TO_STATION, TrainUtils.passengerType2Desc(passengerTypeCode), TRAINS_NO, seatTypesCode, PASSENGERS_ID, POLICY_BILL, QUERY_TICKET_REFERSH_INTERVAL) Log.v('已为您查询到可用余票:%s' % ticketDetails) ticketDetails.passengersId = PASSENGERS_ID ticketDetails.ticketTypeCodes = passengerTypeCode ticketDetails.tourFlag = TOUR_FLAG if TOUR_FLAG else 'dc' submit = Submit(ticketDetails) if submit.submit(CHOOSE_SEATS): status, contents = submit.showSubmitInfoPretty() if status: flag = send_mail(mail_user, mailto_list, '12306订票结果通知', mail_host, mail_user, mail_pass, contents) if flag: Log.v("邮件发送成功!") else: Log.v("邮件发送失败!") sms_id = send_sms(ACCOUNT_SID, AUTO_TOKEN, FROM_NUM, TO_NUM, '小机机已经成功拿到小票票,请主人记得在30分钟内完成支付!!!') if sms_id: Log.v("短信提醒发送成功!") else: Log.v("短信提醒发送失败!") break time.sleep(1) except Exception as e: Log.w(e) login.loginOut() Log.d('注销登录成功')
#Load Config SConfig.setPath( sys.argv[1] ) C = SConfig() print("Starting Simulation with config {0}".format(sys.argv[1] )) #import time #time.sleep(5) random.seed(int(SConfig().value("randSeed"))) newLog = Log() #Create this log for the whole project logging.log(Log.INFO, "Starting simulation") S = SSimulator() T = Tracker() O = Observer( T ) logging.log(Log.INFO, "Creating nodes ...") tor = Torrent( T ) Log.w(Log.INFO, "Piece size [{0}] bytes".format(tor.pieceSizeBytes) ) s = Seeder( tor , SConfig().value("SeederUpload"), SConfig().value("SeederDownload") ) logging.log(Log.INFO, "Creating {0}".format(s)) pF = PeerFactory(T) S.start() logging.log(Log.INFO, "Ending simulation") sys.exit(0)