bingo icon indicating copy to clipboard operation
bingo copied to clipboard

New Bing 封锁原理探讨

Open weaigc opened this issue 2 years ago • 51 comments

经过一段时间的观察及网友们的探索,目前已知 New Bing 的封锁等级为以下几种,程度依次递增,不同强度的解决办法也不一样:

封锁程度 现象 解决办法
1 偶发性中断 重试
2 出现人机校验 1. 录入身份信息 2. 更换 MUID 3. 通过人机校验
3 接口 404/wss 200/unexpected end of JSON input 1. 增加 x-forwarded-for 模拟正常美国地址 2. 换机器
4 接口 5xx 或域名无法解析 1. 换机器 2. 配置 ENDPOINT 转发
5 跳 cn.bing.com 1. 换机器 2. 配置 ENDPOINT 转发

除第5级封锁外,其它级别的过段时间会自动解除,但是很容易再次出现,所以比较好的办法是直接换机器

weaigc avatar Oct 09 '23 11:10 weaigc

@weaigc 大佬,你更新的muid()采用随机数现在基本上不可行的,官方已经用muid全面取代终端机器验证了,对muid的生成有自己的规则,一般生成的都会出错。 目前我测试出来的是可以用已知可行的muid,随便更换最后2位字符,大概率是可用的。所以,让ai生成的一段代码:


const MUID_ADDRESSES: string[] = [
    "074AD7F106536BC6392FC4C907CA6AEA",
    // 添加更多的IP地址
];

function getRandomMUID(): string {
    const timestamp = Date.now();
    const randomIndex = Math.floor(Math.random() * MUID_ADDRESSES.length * timestamp);
    const IPSTR = MUID_ADDRESSES[randomIndex % MUID_ADDRESSES.length];
    const trimmedIPStr = IPSTR.slice(0, IPSTR.length - 2);
    const randomString = generateRandomString(2);
    const USER_MUID = trimmedIPStr + randomString;
    return USER_MUID;
}

export function muid() {
//  return md5(new imei().random()).toUpperCase()
    return getRandomMUID()
}

SokWith avatar Oct 10 '23 12:10 SokWith

@weaigc 大佬,你更新的muid()采用随机数现在基本上不可行的,官方已经用muid全面取代终端机器验证了,对muid的生成有自己的规则,一般生成的都会出错。 目前我测试出来的是可以用已知可行的muid,随便更换最后2位字符,大概率是可用的。所以,让ai生成的一段代码:


const MUID_ADDRESSES: string[] = [
    "074AD7F106536BC6392FC4C907CA6AEA",
    // 添加更多的IP地址
];

function getRandomMUID(): string {
    const timestamp = Date.now();
    const randomIndex = Math.floor(Math.random() * MUID_ADDRESSES.length * timestamp);
    const IPSTR = MUID_ADDRESSES[randomIndex % MUID_ADDRESSES.length];
    const trimmedIPStr = IPSTR.slice(0, IPSTR.length - 2);
    const randomString = generateRandomString(2);
    const USER_MUID = trimmedIPStr + randomString;
    return USER_MUID;
}

export function muid() {
//  return md5(new imei().random()).toUpperCase()
    return getRandomMUID()
}

@SokWith MUID 我不想硬编码,按照标准的 MUID 生成规则又很容易跟真实的用户冲突,所以故意写了一个错误的。不过确实更容易被封禁。我有办法生成真实的 MUID ,只不过速度还不太快,如果你这个可行,我后面专门做一个服务来生成 MUID。谢谢反馈!

weaigc avatar Oct 10 '23 12:10 weaigc

vercel上面部署的1.0.0,无I内置ID,可以说很简单的几个字符,比如 “hi”,但也足以说明vercel没有被官方封禁。 image image

SokWith avatar Oct 12 '23 09:10 SokWith

官方10月更新API后,似乎原来的许多限制都解除了,几乎没有IP锁和MUID锁了(随便32个16进制字符串都可以),目前还剩下的只有根据连接网络属性来是否进行账户验证,我的部署测试表明,目前云服务器中抱脸、render、vercel都不需要验证匿名账户,replit、cf需要验证账户。

SokWith avatar Oct 14 '23 02:10 SokWith

官方10月更新API后,似乎原来的许多限制都解除了,几乎没有IP锁和MUID锁了(随便32个16进制字符串都可以),目前还剩下的只有根据连接网络属性来是否进行账户验证,我的部署测试表明,目前云服务器中抱脸、render、vercel都不需要验证匿名账户,replit、cf需要验证账户。

@SokWith 你说的那种方案试过了,流量一大了就不行,自用确实没啥问题。

weaigc avatar Oct 14 '23 13:10 weaigc

netlify也复活了

renqabs avatar Oct 15 '23 13:10 renqabs

netlify也复活了 netlify 一般只能复活一天,不能持续,https://effulgent-bubblegum-e2f5df.netlify.app/ 你可以用用看

weaigc avatar Oct 16 '23 11:10 weaigc

netlify也复活了 netlify 一般只能复活一天,不能持续,https://effulgent-bubblegum-e2f5df.netlify.app/ 你可以用用看

试了下,确实不稳定,今天我这一条都不能用了。。。

renqabs avatar Oct 16 '23 12:10 renqabs

@weaigc 大佬,你更新的muid()采用随机数现在基本上不可行的,官方已经用muid全面取代终端机器验证了,对muid的生成有自己的规则,一般生成的都会出错。 目前我测试出来的是可以用已知可行的muid,随便更换最后2位字符,大概率是可用的。所以,让ai生成的一段代码:


const MUID_ADDRESSES: string[] = [
    "074AD7F106536BC6392FC4C907CA6AEA",
    // 添加更多的IP地址
];

function getRandomMUID(): string {
    const timestamp = Date.now();
    const randomIndex = Math.floor(Math.random() * MUID_ADDRESSES.length * timestamp);
    const IPSTR = MUID_ADDRESSES[randomIndex % MUID_ADDRESSES.length];
    const trimmedIPStr = IPSTR.slice(0, IPSTR.length - 2);
    const randomString = generateRandomString(2);
    const USER_MUID = trimmedIPStr + randomString;
    return USER_MUID;
}

export function muid() {
//  return md5(new imei().random()).toUpperCase()
    return getRandomMUID()
}

这段代码在部署的时候应该放在哪里?

maggieqnr avatar Oct 20 '23 01:10 maggieqnr

@weaigc 大佬,你更新的muid()采用随机数现在基本上不可行的,官方已经用muid全面取代终端机器验证了,对muid的生成有自己的规则,一般生成的都会出错。 目前我测试出来的是可以用已知可行的muid,随便更换最后2位字符,大概率是可用的。所以,让ai生成的一段代码:


const MUID_ADDRESSES: string[] = [
    "074AD7F106536BC6392FC4C907CA6AEA",
    // 添加更多的IP地址
];

function getRandomMUID(): string {
    const timestamp = Date.now();
    const randomIndex = Math.floor(Math.random() * MUID_ADDRESSES.length * timestamp);
    const IPSTR = MUID_ADDRESSES[randomIndex % MUID_ADDRESSES.length];
    const trimmedIPStr = IPSTR.slice(0, IPSTR.length - 2);
    const randomString = generateRandomString(2);
    const USER_MUID = trimmedIPStr + randomString;
    return USER_MUID;
}

export function muid() {
//  return md5(new imei().random()).toUpperCase()
    return getRandomMUID()
}

这段代码在部署的时候应该放在哪里?

现在几乎没有MUID锁了,这段代码基本不需要了,有了由于MUID被频繁使用,反而容易上锁。

SokWith avatar Oct 20 '23 04:10 SokWith

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

weaigc avatar Oct 20 '23 14:10 weaigc

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

SokWith avatar Oct 20 '23 14:10 SokWith

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

weaigc avatar Oct 20 '23 15:10 weaigc

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

确实,render会封账号,特别是部署隔壁go-proxy时,秒封,但却不封重写核心的这个项目和NewBingGoGo。 vercel也确实限制了时间,只能问很短的问题。go-proxy在vercel上的部署本质还是用的cf的wss,所以没有时长限制。但是因为实质是cf,而和cf沾边的网络几乎都要验证账户不能匿名使用。但使用vercel来获得id,是能够匿名的,就不知道可否与cf结合起来,使用cf来连接wss。只是,你那个cf-proxy的代码似乎不能直接路由,会跳转cn。

SokWith avatar Oct 20 '23 15:10 SokWith

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

我今天申请render新账号部署bingo,结果被告知在进行suspicious actions,然后账号被suspended...

maggieqnr avatar Oct 20 '23 16:10 maggieqnr

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

我今天申请render新账号部署bingo,结果被告知在进行suspicious actions,然后账号被suspended...

不好意思哈。也幸好你用的新号。看来我也得把我的部署停了换新号了。

ps: 果然,新部署直接秒封。

SokWith avatar Oct 21 '23 05:10 SokWith

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

确实,render会封账号,特别是部署隔壁go-proxy时,秒封,但却不封重写核心的这个项目和NewBingGoGo。 vercel也确实限制了时间,只能问很短的问题。go-proxy在vercel上的部署本质还是用的cf的wss,所以没有时长限制。但是因为实质是cf,而和cf沾边的网络几乎都要验证账户不能匿名使用。但使用vercel来获得id,是能够匿名的,就不知道可否与cf结合起来,使用cf来连接wss。只是,你那个cf-proxy的代码似乎不能直接路由,会跳转cn。

cf没可能了,它的流量自带特征,只要访问过去就会被 new bing 检测到

weaigc avatar Oct 21 '23 06:10 weaigc

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

确实,render会封账号,特别是部署隔壁go-proxy时,秒封,但却不封重写核心的这个项目和NewBingGoGo。 vercel也确实限制了时间,只能问很短的问题。go-proxy在vercel上的部署本质还是用的cf的wss,所以没有时长限制。但是因为实质是cf,而和cf沾边的网络几乎都要验证账户不能匿名使用。但使用vercel来获得id,是能够匿名的,就不知道可否与cf结合起来,使用cf来连接wss。只是,你那个cf-proxy的代码似乎不能直接路由,会跳转cn。

cf没可能了,它的流量自带特征,只要访问过去就会被 new bing 检测到

不是吧,隔壁go-proxy就可以纯js部署在cf上,只是不能匿名访问bing而已。只是不清楚决定是否要进行账户验证是在create时决定的还是在wss握手时决定的。如果是在create时决定的,就可以使用vercel来获取无需验证的连接id,如果是在wss握手时那就没办法了。目前看上去是在create时决定的,因为go-proxy部署在vercel上时,是使用的vercel的代理网络获得的连接id,然后路由的cf的wss,刚才测试表明也可以匿名访问。

SokWith avatar Oct 21 '23 07:10 SokWith

确实跟muid没什么关系了,但是目前这些免费平台每次解禁都活不过一天。

不是吧,vercel、render都一直活起的哟。 image image image

render能用是因为很多人会被封账号,我也被封了。vercel目前有10秒限制,也不支持websocket,所以没法正常使用,你试试让它写诗,就能看出问题

确实,render会封账号,特别是部署隔壁go-proxy时,秒封,但却不封重写核心的这个项目和NewBingGoGo。 vercel也确实限制了时间,只能问很短的问题。go-proxy在vercel上的部署本质还是用的cf的wss,所以没有时长限制。但是因为实质是cf,而和cf沾边的网络几乎都要验证账户不能匿名使用。但使用vercel来获得id,是能够匿名的,就不知道可否与cf结合起来,使用cf来连接wss。只是,你那个cf-proxy的代码似乎不能直接路由,会跳转cn。

cf没可能了,它的流量自带特征,只要访问过去就会被 new bing 检测到

不是吧,隔壁go-proxy就可以纯js部署在cf上,只是不能匿名访问bing而已。只是不清楚决定是否要进行账户验证是在create时决定的还是在wss握手时决定的。如果是在create时决定的,就可以使用vercel来获取无需验证的连接id,如果是在wss握手时那就没办法了。目前看上去是在create时决定的,因为go-proxy部署在vercel上时,是使用的vercel的代理网络获得的连接id,然后路由的cf的wss,刚才测试表明也可以匿名访问。

不匿名部署cf bingo一直可以的呀,不过不能匿名就不能不限量使用了 image 解决方案里不是说了吗,要么账号没被封,要么vps没被封

weaigc avatar Oct 21 '23 11:10 weaigc

你那个cf不是部署,包括replit里面的,都只是反代。这个项目本来就是纯js,是可以直接部署的,只是需要把next编译一下吧?。

SokWith avatar Oct 21 '23 11:10 SokWith

你那个cf不是部署,包括replit里面的,都只是反代。这个项目本来就是纯js,是可以直接部署的,只是需要把next编译一下吧?。 @SokWith cf部署的代码没有开放了(因为没有解决根本问题),实际上bingo可以把 ENDPOING 设置为其他项目的代理,包括 cf,你可以试试

weaigc avatar Oct 21 '23 15:10 weaigc

你那个cf不是部署,包括replit里面的,都只是反代。这个项目本来就是纯js,是可以直接部署的,只是需要把next编译一下吧?。 @SokWith cf部署的代码没有开放了(因为没有解决根本问题),实际上bingo可以把 ENDPOING 设置为其他项目的代理,包括 cf,你可以试试

ENDPOINT是指的WS_ENDPOINT的环境变量吗?这个变量是wss服务器的地址吧,换成cf的代理服务器并没有改善vercel的连接时长限制,主要还是vercel与wss服务器之间的数据交换时间。 所以,有没有可能,将create获取连接id的实现放在vercel上,就是原本访问 www.bing.com/turing/conversation/create换成访问 vercel.nbing.eu,org/turing.conversation/create,这样获得连接id,而客户端界面实现在cf worlers上? 这样折腾的意义主要是抱脸的反应实在太慢了,给项目部署留一条后路。

SokWith avatar Oct 22 '23 06:10 SokWith

你那个cf不是部署,包括replit里面的,都只是反代。这个项目本来就是纯js,是可以直接部署的,只是需要把next编译一下吧?。 @SokWith cf部署的代码没有开放了(因为没有解决根本问题),实际上bingo可以把 ENDPOING 设置为其他项目的代理,包括 cf,你可以试试

ENDPOINT是指的WS_ENDPOINT的环境变量吗?这个变量是wss服务器的地址吧,换成cf的代理服务器并没有改善vercel的连接时长限制,主要还是vercel与wss服务器之间的数据交换时间。 所以,有没有可能,将create获取连接id的实现放在vercel上,就是原本访问 www.bing.com/turing/conversation/create换成访问 vercel.nbing.eu,org/turing.conversation/create,这样获得连接id,而客户端界面实现在cf worlers上? 这样折腾的意义主要是抱脸的反应实在太慢了,给项目部署留一条后路。

ENDPOINT和WS_ENDPOINT是两个,WS封杀力度不大,不用管

weaigc avatar Oct 22 '23 07:10 weaigc

@SokWith v1不推荐用hf了呀,文档都改了,v2在用是因为v2版本对配置要求比较高,只有hf能给这么好的配置

weaigc avatar Oct 22 '23 07:10 weaigc

@SokWith v1不推荐用hf了呀,文档都改了,v2在用是因为v2版本对配置要求比较高,只有hf能给这么好的配置

v2版给出的部署都是反代,和直接用你的部署是一样的,属于单点配置。

刚才我按上面的思路,对go-proxy项目对replit部署路由vercel的create,是可以匿名了。 但对这个项目采用类似处理,总是用户无效。

SokWith avatar Oct 22 '23 10:10 SokWith

@SokWith v1不推荐用hf了呀,文档都改了,v2在用是因为v2版本对配置要求比较高,只有hf能给这么好的配置

v2版给出的部署都是反代,和直接用你的部署是一样的,属于单点配置。

刚才我按上面的思路,对go-proxy项目对replit部署路由vercel的create,是可以匿名了。 但对这个项目采用类似处理,总是用户无效。

v2不是反代,反代是v1的

weaigc avatar Oct 22 '23 17:10 weaigc

你那个cf不是部署,包括replit里面的,都只是反代。这个项目本来就是纯js,是可以直接部署的,只是需要把next编译一下吧?。 @SokWith cf部署的代码没有开放了(因为没有解决根本问题),实际上bingo可以把 ENDPOING 设置为其他项目的代理,包括 cf,你可以试试

ENDPOINT是指的WS_ENDPOINT的环境变量吗?这个变量是wss服务器的地址吧,换成cf的代理服务器并没有改善vercel的连接时长限制,主要还是vercel与wss服务器之间的数据交换时间。 所以,有没有可能,将create获取连接id的实现放在vercel上,就是原本访问 www.bing.com/turing/conversation/create换成访问 vercel.nbing.eu,org/turing.conversation/create,这样获得连接id,而客户端界面实现在cf worlers上? 这样折腾的意义主要是抱脸的反应实在太慢了,给项目部署留一条后路。

ENDPOINT和WS_ENDPOINT是两个,WS封杀力度不大,不用管

与WS连接的网络(ip)很重要,所以,薅了一下render的羊毛:replit的前端+render的ws: https://rpbingo.nbing.eu.org


唉,帅不过3秒,测试5次后似乎ip上锁了

SokWith avatar Nov 02 '23 06:11 SokWith

目前封锁升级了: 1、对ENDPOINT,大面积的ip锁,目前只有少数几个云商还能够阵发性连接官网ENDPOINT,大多数的VLESS机场都受到限制了; 2、对WS_ENDPOINT,目前是行为封控,能够匿名访问的云商就更少了,迫切需要单独建立WSS代理服务器。 @weaigc 大佬,能抽空出一个单独建立WSS代理服务器的代码吗? ps:我在cf上大致按proxy.js建的服务器,是可以工作的(WS_ENDPOINT = "https://prosydney.nbing.eu.org“ ,限于登录用户可连接),但采用CLI部署到render、replit和huggingface都不可以,完全就是本地网络上一样。

SokWith avatar Nov 17 '23 04:11 SokWith

@weaigc 另外,大佬,现在的登录逻辑是什么样的? 1、在前端网页界面,填写了url后,要去掉尝试选项才能登录;不去掉选项就一直是匿名? 2、在后端环境变量中,是设置一个BING_HEADER变量还是必须docker命令行?我在replit上设置这个环境变量没有作用;在后端环境变量设置后,前端网页该如何配置? 3、BING_COOKIE这个参数只是用于cf worker部署吗?

SokWith avatar Nov 17 '23 05:11 SokWith

@weaigc 另外,大佬,现在的登录逻辑是什么样的? 1、在前端网页界面,填写了url后,要去掉尝试选项才能登录;不去掉选项就一直是匿名? 2、在后端环境变量中,是设置一个BING_HEADER变量还是必须docker命令行?我在replit上设置这个环境变量没有作用;在后端环境变量设置后,前端网页该如何配置? 3、BING_COOKIE这个参数只是用于cf worker部署吗?

因为很多人的账号只能用来画图,并不能聊天

weaigc avatar Nov 20 '23 04:11 weaigc