302_poc_2.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import json
  2. import multiprocessing
  3. import re
  4. import threading
  5. import time
  6. from datetime import datetime
  7. from urllib import parse
  8. import requests
  9. from tools.utils import get_random_browser, get_proxy_ip, create_file_if_not_exists
  10. def poc_2(account, passwd, target_url, log_name):
  11. print('account: %s, passwd: %s' % (account, passwd))
  12. create_file_if_not_exists(log_name, f'------{account}, {passwd}------')
  13. user_agent = get_random_browser()
  14. single_proxy = get_proxy_ip()
  15. # single_proxy = 'rrehqcjf:33f90umk8x32@185.199.228.220:7300'
  16. proxies = {
  17. 'http': 'http://' + single_proxy,
  18. # 'https': 'https://' + single_proxy
  19. }
  20. print('proxies:', proxies)
  21. create_file_if_not_exists(log_name, f'account: {account}, passwd: {passwd}, proxies:{proxies}')
  22. # session
  23. """
  24. 模拟登录
  25. """
  26. # 定义请求地址
  27. login_url = "https://t.livepocket.jp/api/sessions/create?mytimestamp=" + str(int(time.time()))
  28. # 定义请求header
  29. headers = {'Content-Type': 'application/x-www-form-urlencoded;',
  30. 'Referer': 'https://t.livepocket.jp/login?acroot=header-new_p_u_nl',
  31. # 'Sec-Ch-Ua': 'Chromium',
  32. 'User-Agent': user_agent
  33. }
  34. # 通过字典方式定义请求body
  35. form_data = {"login": account,
  36. "password": passwd,
  37. "auto_login": "on",
  38. "login_password": f"{account}&{passwd}"
  39. }
  40. data = parse.urlencode(form_data)
  41. session = requests.session()
  42. content = session.post(url=login_url, headers=headers, data=data, proxies=proxies).text
  43. cookie = session.cookies
  44. response_cookie = cookie.get_dict()
  45. login_resp = json.loads(content)
  46. token = login_resp['result']['token']
  47. login_session = response_cookie['ci_session']
  48. php_session = response_cookie['PHPSESSID']
  49. # event_id
  50. event_id = 0
  51. response = requests.get(target_url, proxies=proxies)
  52. if response.status_code == 200:
  53. html_string = response.content.decode('utf8')
  54. start_index = html_string.find('https://t.livepocket.jp/purchase/verify?event_id=')
  55. if start_index != -1:
  56. end_index = html_string.find("'", start_index)
  57. if end_index != -1:
  58. event_id = html_string[start_index + len('https://t.livepocket.jp/purchase/verify?event_id='):end_index]
  59. print(f'event_id: {event_id}')
  60. else:
  61. print('End index not found.')
  62. else:
  63. print('Substring not found.')
  64. else:
  65. print('Failed to fetch the page. Status code:', response.status_code)
  66. # ticket_id
  67. ticket_id = 0
  68. response = requests.get(target_url, proxies=proxies)
  69. if response.status_code == 200:
  70. html_string = response.text
  71. match = re.search(r'id="js_order_limited_(\d+)"', html_string)
  72. if match:
  73. ticket_id = match.group(1)
  74. print(ticket_id)
  75. else:
  76. print("未找到匹配的数值")
  77. # event_cname
  78. # url = 'https://t.livepocket.jp/e/lxyyc'
  79. sub_str = target_url.replace("https://t.livepocket.jp/", "")
  80. strs = sub_str.split('/')
  81. cname = strs[len(strs) - 1]
  82. # print(cname)
  83. # redirect_url1
  84. net_url = 'https://t.livepocket.jp/purchase?type=new'
  85. result = requests.Session()
  86. header = {
  87. 'Host': 't.livepocket.jp',
  88. 'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
  89. "Chrome/69.0.3947.100 Safari/537.36",
  90. 'Content-Type': 'application/x-www-form-urlencoded',
  91. 'Referer': f'{target_url}',
  92. }
  93. # my_session = 'IN7u3uuP5WcizQkmRzF%2F3OsLuNNQePnxNBvnlPgqT6FPz2BgyKT2KCJaMvdj8ZSa6wNp2xZIL6VoA7Mj0R2zECMZkOKJOLbsNwUdXwvcsROxjfCzibxEaj4nG%2Bq29dCEUdiWI2TgUsKSFGRZaOP0p37ktl%2B1wSMqMAk918Nkt7APIxpQtZ%2BoLwId4PMOkN3oOIwT3CvsuDbgPQHIuokZXcnNe8uOAUuZBLW4nKOdYimLcSw6oTMt85UXkwm4OyTdxYR3%2B8crA0OfQCyfHXqY%2Bj0t9R0mmNSusRXRDuDBmOCFR58vHVuuwZ0AXNHYoYB0sdm28VL9xgHHrzkvm2M9cpLEIVWUWBWGaZgtO3xp2d8L70%2BfAKwyv6JPGcGmGf9wUQzBltssBpMmYqSfkws1%2Bp8BOhmXOqfljSYbWcxxVVSw%2B2dtoxBXsTf793mD9sVYRsrr8YPGz4JPVGWGU0outg%3D%3D'
  94. cookies = {
  95. 'ci_session': f'{login_session}',
  96. 'PHPSESSID': f'{php_session}',
  97. 'list_count': '{"success":true,"result":{"myticket_count":{"count":"0"},"today_event":{"total_count":0,"data_list":[]},"unread_count":5},"submit":true}',
  98. 'sns_status': '{"success":true,"result":{"facebook":0,"twitter":0,"mixi":0,"line":0,"yahoo":0,"plusid":1,"google":0},"submit":true}',
  99. 'display_init': '{"success":true,"result":{"purchased_tickets":{"total_count":0,"data_list":{"ticket_info":[]}},"lottery_tickets":{"total_count":0,"data_list":{"ticket_info":[]}},"order_limited_event_tickets":{"data_list":{"ticket_info":[]},"total_count":0},"event_order_limit":true},"submit":true}',
  100. }
  101. ticket_key = f'ticket_id_{ticket_id}'
  102. form_data = {
  103. 'redirect_url': 'https://t.livepocket.jp/purchase/',
  104. 'event_id': event_id,
  105. 'event_cname': f'{cname}',
  106. 'ticket_type': 'lottery',
  107. 'facebook_ticket_count': 0,
  108. 'twitter_ticket_count': 0,
  109. 'plusid_linkage_invalidation_flg': 0,
  110. ticket_key: 1
  111. }
  112. print('form_data:', form_data)
  113. response = result.post(net_url, headers=header, cookies=cookies, data=form_data, allow_redirects=False,
  114. proxies=proxies)
  115. print('response.headers: ', response.headers)
  116. redirect_url1 = response.headers['Location']
  117. print('redirect_url1: ', redirect_url1)
  118. # https://t.livepocket.jp/purchase/security?id=309887&type=new
  119. # redirect_url2
  120. response2 = result.get(redirect_url1, headers=header, cookies=cookies, allow_redirects=False, proxies=proxies)
  121. print('response2.headers: ', response2.headers)
  122. redirect_url2 = response2.headers['Location']
  123. print('redirect_url2: ', redirect_url2)
  124. # https://t.livepocket.jp/purchase/confirm?id=309887&reserved_session_id=423272
  125. # redirect_url3
  126. response3 = result.get(redirect_url2, headers=header, cookies=cookies, allow_redirects=False, proxies=proxies)
  127. print('response3.headers: ', response3.headers)
  128. redirect_url3 = response3.headers['Location']
  129. print('redirect_url3: ', redirect_url3)
  130. # https://t.livepocket.jp/purchase/confirm?id=309887&reserved_session_id=794986&otoken=mMyZTgzMmQ4OWQ5ZjY5NWFlNGE2ZmJlMWM5Mm
  131. # drawing_tickets
  132. drawing_url = 'https://t.livepocket.jp/api/drawing_tickets/entry?mytimestamp=' + str(int(time.time()))
  133. region_string = redirect_url3.split('?')[1]
  134. params = region_string.split('&')
  135. reserve_session_id = params[1].split("=")[1]
  136. drawing_headers = {
  137. 'Host': 't.livepocket.jp',
  138. 'User-Agent': user_agent,
  139. 'Content-Type': 'application/x-www-form-urlencoded',
  140. 'Referer': f'{redirect_url3}',
  141. }
  142. drawing_cookies = {
  143. 'ci_session': f'{login_session}',
  144. 'PHPSESSID': f'{php_session}',
  145. }
  146. drawing_form_data = {
  147. 'utoken': f'{token}',
  148. 'onetime_token_name': 'buy_ticket',
  149. 'onetime_token_value': params[2].split('=')[1],
  150. 'url': f'https://t.livepocket.jp/purchase/confirm?id={event_id}&reserved_session_id={reserve_session_id}',
  151. 'payment_method': 0,
  152. 'reserve_session_id': reserve_session_id,
  153. 'event_id': event_id,
  154. 'reserve_ticket[0][ticket_id]': ticket_id,
  155. 'reserve_ticket[0][amount]': 1,
  156. 'payment_type': 'credit'
  157. }
  158. drawing_response = result.post(drawing_url, headers=drawing_headers, cookies=drawing_cookies,
  159. data=drawing_form_data, allow_redirects=False, proxies=proxies)
  160. print('drawing_response.text: ', drawing_response.text)
  161. drawing_data = json.loads(drawing_response.text)
  162. if drawing_data['success']:
  163. order_id = drawing_data['result']['order_id']
  164. onetime_token_name = drawing_data['result']['onetime_token_name']
  165. onetime_token_value = drawing_data['result']['onetime_token_value']
  166. print('account, order_id, onetime_token_name, onetime_token_value', account, order_id, onetime_token_name,
  167. onetime_token_value)
  168. create_file_if_not_exists(log_name, f'account:{account}, order_id:{order_id}, onetime_token_name:{onetime_token_name}, onetime_token_value:{onetime_token_value}')
  169. def process_account(account, log_name):
  170. try:
  171. poc_2(account.strip(), 'panyue666', 'https://t.livepocket.jp/e/cx591', log_name)
  172. except Exception as e:
  173. print(f'error: {e}, account:{account}')
  174. def process_running():
  175. log_name = 'result_' + datetime.now().strftime('%Y%m%d%H%M')
  176. with open('account.txt', 'r') as accounts:
  177. account_list = accounts.readlines()
  178. threads = []
  179. for account in account_list:
  180. thread = threading.Thread(target=process_account, args=(account, log_name))
  181. threads.append(thread)
  182. thread.start()
  183. for thread in threads:
  184. thread.join()
  185. if __name__ == '__main__':
  186. # 新增下面一行代码即可打包多进程
  187. multiprocessing.freeze_support()
  188. # with open('account.txt', 'r') as accounts:
  189. # for account in accounts:
  190. # try:
  191. # poc_2(account.strip(), 'panyue666', 'https://t.livepocket.jp/e/cx591')
  192. # except Exception as e:
  193. # print(f'error: {e}, account:{account}')
  194. process_running()