某音init_gorgon(),x-gorgon分析和数据的获取(3)

一、go请求抖音接口

1.获取直播间列表接口

https://webcast.amemv.com/webcast/feed/?cate_id=0&channel_id=21&content_type=0&req_type=0&show_location=0&style=2&sub_channel_id=0&sub_type=live_merge&tab_id=1&type=live&max_time=1632617241765&req_from=feed_loadmore&enter_source=live_merge-live_cover&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI%209&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254316123529&app_name=aweme&version_name=11.5.0&ts=1632617268&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=1632617268230&device_platform=android&iid=1539749293618855&version_code=110500&mac_address=00%3AF4%3A8D%3A7F%3AEB%3AED&cdid=26ef06f3-d0c5-4ed1-bc88-3bca82ce7966&openudid=10d8232e457a66ec&device_id=3825946774998071&resolution=1280*720&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007

接口可变参数
max_time 下一页游标,请求接口后返回下一页的游标
ts 时间戳
_rticket 毫秒时间戳
iid和device_id 用户唯一表示(可能被抖音封禁)

url := fmt.Sprintf("https://webcast.amemv.com/webcast/feed/?cate_id=0&channel_id=21&content_type=0&req_type=0&show_location=0&style=2&sub_channel_id=0&sub_type=live_merge&tab_id=1&type=live&max_time=%v&req_from=feed_loadmore&enter_source=live_merge-live_cover&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=351564010359305&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=06f5e02b-6343-41d0-90a5-d9851444b1c3&openudid=f1b36729d56797e4&device_id=%v&resolution=1280*720&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
			max_time, strTs, strRticket,global.USERS[i].IID, global.USERS[i].DevId)

2.获取直播间观看人数列表

https://webcast.amemv.com/webcast/ranklist/room/7011033733058890530/contributor/?sec_anchor_id=MS4wLjABAAAASz7PwznGnQ0NEVObD7NesWZFHCuQ57jOxScjfR2Qdjk&room_id=7011033733058890530&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI%209&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=1632384451&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=1632384452081&device_platform=android&iid=2736017703177928&version_code=110500&mac_address=00%3AF4%3A8D%3A7F%3AEB%3AED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=1055991630410519&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007

可变参数
room_id :7011033733058890530
sec_anchor_id = MS4wLjABAAAASz7PwznGnQ0NEVObD7NesWZFHCuQ57jOxScjfR2Qdjk
ts=1632384451
_rticket 时间戳除以1000
iid和device_id 用户唯一表示(可能被抖音封禁)

url := fmt.Sprintf("https://webcast.amemv.com/webcast/ranklist/room/%v/contributor/?sec_anchor_id=%v&room_id=%v&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=%v&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
	roomId, userId, roomId, strTs, strRticket, val.IID, val.DevId)

二、go获取数据

1.伪造请求参数

ts := int(time.Now().Unix())
rticket := int(time.Now().Unix() * 1000)

2.拼装url

url := fmt.Sprintf("https://webcast.amemv.com/webcast/ranklist/room/%v/contributor/?sec_anchor_id=%v&room_id=%v&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=%v&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
	roomId, userId, roomId, strTs, strRticket, val.IID, val.DevId)

3.拼装请求头

headers := map[string]string{
		"Host":            "webcast.amemv.com",
		"Connection":      "keep-alive",
		"Cookie":          cookie,
		"X-SS-REQ-TICKET": strRticket,
		"sdk-version":     "1",
		"User-Agent":      agent,
		"X-Khronos":       strTs,
		"X-Gorgon":        gorgon,
		"X-Pods":          "",
	}

4.发送请求

data, err := utils.HttpGet(global.IP, url, headers)
	if err != nil {
		log.Printf("err fail %v", err)
		return datas, err
	}

5.分析并获取数据

for _, val := range foller.Data.Ranks {
		if val.User.Gender == 1 || val.User.Gender == 2 {
			gender := "男"
			if val.User.Gender == 2{
				gender = "未知"
			}
			user := LiveUser{
				Id:         fmt.Sprintf("%v", val.User.ID),
				SecUid:     val.User.SecUID,
				Nickname:   val.User.Nickname,
				Gender:     gender,
				Level:      fmt.Sprintf("%v", val.User.PayGrade.Level),
				Display_id: val.User.DisplayID,
				Scor:       fmt.Sprintf("%v", val.Score),
			}
			datas = append(datas, &user)
		}
	}

三、python自动化获取抖音iid

1.python使用pyautogui包
pyautogui是一款自动化点击的包
主要是根据软件在屏幕上的位置实现自动化点击操作来打开抖音,配合fiddle抓包抓取请求包含iid的url并保存到本地文件夹。最后使用分析txt文件的url获取到iid存到redis。

import socket
from functools import reduce
import redis
import pyautogui
import time, json
import os


# POST https://register.xmpush.global.xiaomi.com/pass/v2/register HTTP/1.1
# User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; MI 9 Build/NMF26X)
# Host: register.xmpush.global.xiaomi.com
# Connection: Keep-Alive
# Accept-Encoding: gzip
# Content-Type: application/x-www-form-urlencoded
# Content-Length: 315
#
# android_id=5ba6756546df6c8b&appid=2882303761517509924&apptoken=5571750917924&appversion=110501&board=Xiaomi&brand=Android&devid=a-152B2B16C8CDA2504BB529B29AB6499694A76BEB&devid1=a-A21A7A725CE0BC1F69F718430AE1620CE15C5CCA&model=MI+9&os=5.1.1-500210628&packagename=com.ss.android.ugc.aweme&sdkversion=30619&space_id=0
#

# 窗口大小 模拟器位置 x=522 y=140 大小 800*670
# 模拟器位置 486 292  大小1009*578

def setup():
    print("开机中")
    time.sleep(5)
    # 启动新的模拟器
    pyautogui.click(1215, 287)
    time.sleep(30)

    # 输入密码
    pyautogui.click(974, 800)
    pyautogui.scroll(-500)
    time.sleep(1)
    pyautogui.press('shift')
    time.sleep(1)
    pyautogui.typewrite('q123')
    pyautogui.press('enter')
    print("开机成功")

# 1.获取本机路由ip
# print(GetLocalIPByPrefix('192.168'))
def GetLocalIPByPrefix(prefix):
    r""" 多网卡情况下,根据前缀获取IP(Windows 下适用) """
    localIP = ''
    for ip in socket.gethostbyname_ex(socket.gethostname())[2]:
        if ip.startswith(prefix):
            localIP = ip

    return localIP

# 2.虚拟点击下载安卓模拟器
def setupYeshen():
    # # 2.1点击模拟器
    pyautogui.click(330, 740,clicks=2)
    time.sleep(5)
    #
    # # 删除原本的模拟器
    pyautogui.click(1262, 287, clicks=1)
    pyautogui.click(1010, 494, clicks=1)

    # # 克隆模拟器
    pyautogui.click(1322,287, clicks=1)
    pyautogui.click(1280, 320, clicks=1)
    time.sleep(3)

    #启动输入密码
    setup()

   # #安装xpsot
    print("安装xposed中")
    time.sleep(3)
    pyautogui.click(1330, 486, clicks=2)
    time.sleep(3)

    pyautogui.click(1162, 789, clicks=2)
    time.sleep(3)
    pyautogui.click(625, 640)
    time.sleep(3)
    pyautogui.click(785, 583)

    time.sleep(5)
    print("安装xposed成功")

    # # 关闭模拟
    pyautogui.click(1220, 59)
    time.sleep(3)
    pyautogui.click(1049, 588)
    time.sleep(1)
    print("关闭模拟器成功")
    time.sleep(5)
    # 启动新的模拟器
    setup()

    # 打开fiddle
    print("打开fiddle")
    pyautogui.click(334, 852, clicks=2)
    time.sleep(5)

    # 打开抖音
    print("打开抖音")
    pyautogui.click(760, 596)
    time.sleep(20)
    pyautogui.click(965, 669)
    time.sleep(3)
    pyautogui.scroll(-500)
    time.sleep(3)
    pyautogui.scroll(-500)
    time.sleep(3)
    pyautogui.scroll(-1000)
    print("开始抓取并分析请求")
    time.sleep(5)

    print("抓取成功,开始关闭模拟器")
    # 关闭模拟
    pyautogui.click(1217, 59)
    time.sleep(3)
    pyautogui.click(1058, 588)
    time.sleep(3)
    print("模拟器关闭成功")

def Close():
    # pyautogui.mouseUp(button='right', x=236, y=1058)
    pyautogui.click(button='right', x=294, y=1059)
    time.sleep(2)
    pyautogui.click(206,1002)

def sent_redis_id():
    print("我开始迁移id到redis")
    r = redis.Redis(host='***.***.***', port=5930, decode_responses=True)  # host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
    list = march()

    for i in list:
        dict = {
            "devId":i.get("devce_id"),
            "iId":i.get("iid"),
        }
        p = json.dumps(dict)
        print(p)
        a = r.lpush("list3", p)
        print(a)
    if os.path.exists("E://response.txt"):
        os.remove("E://response.txt")

2.fiddle抓包并保存到本地代码
请添加图片描述
在这里插入图片描述

  if(oSession.host == 'aweme.snssdk.com' && oSession.url.Contains("iid") && oSession.url.Contains("device_id")){ 
            var filename = "E:/response.txt"; 

            //var logContent = oSession.GetResponseBodyAsString();    //oSession.GetResponseBodyAsString()获取相应内容字符串
            var sw : System.IO.StreamWriter;  
            if (System.IO.File.Exists(filename)){  //是否有该文件夹  
                sw = System.IO.File.AppendText(filename);   //有添加
                sw.Write(oSession.url);
                sw.Write("\n");
            }  
            else{  
                sw = System.IO.File.CreateText(filename);  //没有创建
                sw.Write(oSession.url);
                sw.Write("\n");
            }  
            sw.Close();  
            sw.Dispose();  

        }


四、python服务端代码部署签名算法

签名算法已经写好,通过flask进行服务端部署
安装python环境后直接执行即可

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
x-gorgon是字节跳动公司开发的一种用于生成和验证请求签名的算法。在API请求中,使用x-gorgon可以确保请求的合法性和安全性。 x-gorgon通过对请求参数进行加密和处理来生成一个签名,然后将签名信息放入请求头中发送至服务器。服务器收到请求后,会对请求头中的签名进行验证,以确保该请求是由合法的客户端发起的。 x-gorgon算法的生成过程相对复杂,包含了多种加密方法和数据处理步骤。具体步骤如下: 1. 首先,需要提取请求中的关键参数,如请求路径、请求方法、请求体等。 2. 接下来,根据一定的规则和加密算法,对这些参数进行处理和加密,生成一个签名。 3. 然后,将生成的签名放入请求头中的x-gorgon字段中。 4. 最后,将请求发送至服务器,服务器会根据事先约定好的算法对请求头中的签名进行验证,如果验证通过,则认为该请求是合法的,否则会拒绝该请求。 通过使用x-gorgon生成签名,可以保证请求的合法性和安全性,防止非法请求和网络攻击。这在网络交互中非常重要,特别是在涉及到用户隐私和数据安全的应用场景下。 总而言之,x-gorgon是一种用于生成和验证请求签名的算法,通过对请求参数进行处理和加密,确保请求的合法性和安全性。它在字节跳动的API请求中得到了广泛的应用,为用户的数据安全提供了很大的保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抬头看天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值