Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

尝试登陆时返回10054错误码 #138

Closed
Max-Learning opened this issue Oct 9, 2020 · 12 comments
Closed

尝试登陆时返回10054错误码 #138

Max-Learning opened this issue Oct 9, 2020 · 12 comments
Labels

Comments

@Max-Learning
Copy link

尝试使用example_bypass_sni.py中的代码登陆时在login函数处报错:
pixivpy3.utils.PixivError: requests POST https://app-api.pixiv.net.cdn.cloudflare.net./auth/token error: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了 一个现有的连接。', None, 10054, None))
尝试使用测试账号和自己的账号登陆,都出现了同样的错误。
这个错误出现在两天前,此前它表现良好。
我使用的是中国的教育网,请问这是否是问题所在?

另外,api.hosts的值是app-api.pixiv.net.cdn.cloudflare.net.,尝试用curl -p访问这个网址时返回了1001的错误码。
尝试使用dns-query的其他返回值(ip地址)替换api.hosts,返回了错误
pixivpy3.utils.PixivError: requests POST https://104.18.30.199/auth/token error: HTTPSConnectionPool(host='104.18.30.199', port=443): Max retries exceeded with url: /auth/token (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1045)')))

@upbit
Copy link
Owner

upbit commented Oct 10, 2020

看提示应该是解析到的IP不可访问 Connection aborted

  1. 从域名推测P站加了 cloudflare.net 防水墙,对于没验证的流量估计绕不过;
  2. 如果还有以前的IP(比如解析app的host),可以尝试ip固定访问P站来绕开

@upbit
Copy link
Owner

upbit commented Oct 10, 2020

@Notsfsssf 有见过类似的情况吗?

@dylech30th
Copy link

直接上IP就行了,这是目前唯一的解决办法

@Max-Learning
Copy link
Author

看提示应该是解析到的IP不可访问 Connection aborted

  1. 从域名推测P站加了 cloudflare.net 防水墙,对于没验证的流量估计绕不过;
  2. 如果还有以前的IP(比如解析app的host),可以尝试ip固定访问P站来绕开

直接上IP就行了,这是目前唯一的解决办法

有效,使用app-api.pixiv.net的ip地址,即加上api.hosts='https://210.140.131.208'后可以正常连接。
然而这个ip地址不是一直对应的(例如2018年的地址是210.129.120.44),因此这个方法并不是稳定的,可能需要定时修改。

@upbit
Copy link
Owner

upbit commented Oct 10, 2020

看提示应该是解析到的IP不可访问 Connection aborted

  1. 从域名推测P站加了 cloudflare.net 防水墙,对于没验证的流量估计绕不过;
  2. 如果还有以前的IP(比如解析app的host),可以尝试ip固定访问P站来绕开

直接上IP就行了,这是目前唯一的解决办法

有效,使用app-api.pixiv.net的ip地址,即加上api.hosts='https://210.140.131.208'后可以正常连接。
然而这个ip地址不是一直对应的(例如2018年的地址是210.129.120.44),因此这个方法并不是稳定的,可能需要定时修改。

那问题应该就是,如何通过DNS over HTTPS解析到app-api.pixiv.net真实IP了。看之前用的是cloudflare的,因此可能返回不正确。感觉可以尝试换成其他服务商的:
https://github.com/upbit/pixivpy/blob/master/pixivpy3/bapi.py#L22

看目前返回的IP确实都指向它自己服务器了。。。https://cloudflare-dns.com/dns-query?name=app-api.pixiv.net&type=A&ct=application/dns-json

@Notsfsssf
Copy link
Contributor

@Notsfsssf 有见过类似的情况吗?

我完全使用硬编码了,既然使用Dns over Https获得真实ip的方式依然不稳定,不如直接放弃这个特性,只是跟进的时候需要勤快一些

@upbit
Copy link
Owner

upbit commented Oct 10, 2020

觉得你之前提供的这个bypass方法思路蛮好的,直接Set HOST对普通用户要求有点高(很少人知道如何获取真实host)
我再找找比较稳定的提供方(至少目前Google,CloudFlare都得放弃了)

@upbit
Copy link
Owner

upbit commented Oct 11, 2020

觉得你之前提供的这个bypass方法思路蛮好的,直接Set HOST对普通用户要求有点高(很少人知道如何获取真实host)
我再找找比较稳定的提供方(至少目前Google,CloudFlare都得放弃了)

https://dns.quad9.net:5053/dns-query?name=app-api.pixiv.net

这个思路可能不奏效,应该是P站这个域名,整个都指向了:app-api.pixiv.net.cdn.cloudflare.net.
用quad9解析也是这个

@upbit
Copy link
Owner

upbit commented Oct 11, 2020

一个变通的解决方法,使用未指向cloudflare的host解析实际IP:

    api = ByPassSniApi()  # Same as AppPixivAPI, but bypass the GFW
    api.require_appapi_hosts(hostname="public-api.secure.pixiv.net")

原理:

cloudflare还是比较贵的,一些二级域名一般不会用这个保护。我们可以通过解析二级域名得到P站的真实IP

方法:

  1. 查询P站的子域名:https://securitytrails.com/list/apex_domain/pixiv.net
  2. 使用quad9验证解析是否指向cloudflare: https://dns.quad9.net:5053/dns-query?name=public-api.secure.pixiv.net
  3. 看到真实IP后就可以把这个域名,传递给hostname参数了

@Notsfsssf
Copy link
Contributor

一个变通的解决方法,使用未指向cloudflare的host解析实际IP:

    api = ByPassSniApi()  # Same as AppPixivAPI, but bypass the GFW
    api.require_appapi_hosts(hostname="public-api.secure.pixiv.net")

原理:

cloudflare还是比较贵的,一些二级域名一般不会用这个保护。我们可以通过解析二级域名得到P站的真实IP

方法:

  1. 查询P站的子域名:https://securitytrails.com/list/apex_domain/pixiv.net
  2. 使用quad9验证解析是否指向cloudflare: https://dns.quad9.net:5053/dns-query?name=public-api.secure.pixiv.net
  3. 看到真实IP后就可以把这个域名,传递给hostname参数了

确实能奏效👌,只是需要过两家服务提供商

@upbit
Copy link
Owner

upbit commented Oct 11, 2020

短时间 hostname="public-api.secure.pixiv.net" 应该都是可以用的(这个是以前PAPI的子域名,估计他们都快忘了),也不需要重新找子域名

我更新下example

@luckyray-fan
Copy link

绕过去的这个方法太赞了!!!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants