Steam使用笔记

Posted by wsxq2 on 2019-09-28
TAGS:  Steam

本文最后一次编辑时间:2019-09-29 17:20:23 +0800

本文是笔者使用 Steam 的笔记(其实笔者很少玩游戏)

遇到的问题

无法自动登录?

Steam->设置->账户->管理 Steam 令牌账户安全设置

正确设置一下,使你的电脑成为被认证的设备就可以了

国内无法访问社区?(Steam 错误代码列表)

首先说明,我的电脑使用的操作系统是 Windows 10,网络设置是没有问题的,可以访问百度、Steam 中的商店

在国内直接访问社区个人资料时总是提示:

1
错误代码:-118

那么错误代码-118到底代表什么问题呢?如何解决呢?Steam 应该有个错误代码列表供用户排查错误吧?

让我们使用谷歌搜索一下:

1
steam community error code -118

竟然没有直接相关的结果??

等下,-好像在搜索引擎中有特殊含义,是(NOT)的意思。那我们去掉-试试:

1
steam community error code 118

果然,修改后很快便找到了相关内容:

1
2
3
ERROR CODE: -118 Unable to connect to server...
https://steamcommunity.com › discussions › forum
...

(这里我错误地认为Unable to connect to server...便是错误代码-118的含义 /捂脸)

(然而,这并不是-118的真正含义,这只是一个通用的说明——无法连接到服务器)

我使用谷歌搜索了半天也没有找到前面提出的那三个问题的正确答案(虽然有很多相关搜索结果,但是对于-118的含义模糊不清,对于解决方法也是“多种多样”,对于 Steam 错误排查列表倒是找到一个—— SteamErrors.com,不过不是我遇到的错误)。于是我开始另辟蹊径(其实就是自己分析)……

我试着点了下 Steam 中的商店,发现可以访问。那么为什么 Steam 的商店可以访问而 Steam 社区却无法访问呢?Steam 难道不是一家公司的吗?或者说 Steam 对商店社区用了不同的服务器?

使用谷歌搜索一下:

1
steam server

很快找到了 Steam Status · Is Steam Down? 这个网页,可以知道 Steam 服务器的状态?这简直太棒了。于是得到了如下重要信息:

1
2
3
4
5
Steam Store: Normal
Steam Community: Normal
Steam Web API: Normal
Steam Connection Managers: 100.0% Online
Steam WebSocket CMs: 100.0% Online

可见 Steam 确实对商店社区用了不同的服务器。那么 Steam 对这两个服务器的访问是怎样进行的?使用了什么协议?是以 Web 的形式吗?

我仔细观察了商店社区这两个页面,然后我在商店页面中看到了浏览器中才有的地址栏!也就是说,这是个网页?使用 HTTP/HTTPS 协议?可以用浏览器打开?那社区的情况应该也是一样的?

我试着将 Steam 中的 URL 复制到浏览器中打开。

果然成功了,显示了一毛一样的界面

由此可见,Steam 中的商店社区功能确实是通过 HTTP/HTTPS 协议进行的。既然如此,那么就可以使用科学上网来尝试了(众所周知,遇到网页打不开,科学上网试试)

那么 Steam 如何设置代理呢?不慌,要知道设置代理有两种方式:一是应用内设置代理,二是系统的全局代理设置(虽然应用可能不会理会,但大多数 Web 相关的还是会理会的)。为了简单,我们先别去探索 Steam 如何设置代理,我们先在系统代理设置处设置一下试试(如果使用 shadowsocks-csharp 或 shadowsocks-windows 的话可以直接在模式处选择全局)。

设置了全局代理后,果然成功了。并且我们在社区页面也看到了 URL(https://steamcommunity.com/home),将其复制到浏览器中,以便后续进一步研究。

什么,你说既然已经可以访问了就不用浪费时间了?那怎么行,要知道我们现在还不清楚错误代码-118的含义

所以我们继续。复制到浏览器后,在不使用科学上网的前提下提示了如下错误:

1
ERR_CONNECTION_TIMED_OUT

那么问题来了,在 Steam 中提示错误代码:-118,而在 Chrome 中提示ERR_CONNECTION_TIMED_OUT,它们是不是同一个错误?

搜索一下就知道了:

1
ERR_CONNECTION_TIMED_OUT 118

点进第一个链接(How to Fix Error 118 | Windows Error Support)看看:

This is a typical Google Chrome error. It pops up when Google Chrome fails to load websites like Facebook. It is usually displayed in the following format:

‘Error Message: Error 118 (net::ERR_CONNECTION_TIMED_OUT): The operation timed out.’

果然,它们就是一个错误。那么为什么在 Chrome 中的出现的错误会出现在 Steam 中呢?我们可以猜测,Steam 使用了 Chrome 的内核——Chromium。由此也可以解释为什么 Steam 会没有包含错误代码-118的错误排查列表,因为这些错误是 Chromium 相关的。

不过为什么我的 Chrome 只提示了ERR_CONNECTION_TIMED_OUT,没有提示-118的错误代码?看了一眼这条搜索结果左下角的日期:2014年11月28日。那可能是因为我的 Chrome 太新了吧,去掉了这个对于普通用户不友好的错误代码 /笑哭

到了这里,我又发现自己对浏览器的错误代码是多么无知,如果经验丰富的话,可能早就知道 -118 在 Chrome 中的含义就是连接超时了。因此,我想知道 Chrome 中的错误列表。根据前面的推测,这个应该是有的吧?于是我这样搜索:

1
chrome error list

点进第一个链接(Chrome Fail Error Codes - Stack Overflow):

I did some digging and I must admit, it’s not easy to find a full exhaustive list of all (Chromium) networking error codes.

The full list of all Chromium error codes can be found in the file net_error_list.h: https://cs.chromium.org/chromium/src/net/base/net_error_list.h

It looks like Google Chrome prepends ERR_ to all the codes listed in the above list.

——引用自Chrome Fail Error Codes#answer1 - Stack Overflow

虽然没有得到理想的答案(理想的答案应当是官方给出的错误代码及说明,而且易搜索到),但是这也算是一个非常不错的结果了。尤其是其中有个回答:

By the way for only listing all error codes

USE :

1
chrome://network-errors/

It’s about 220 in total as of now in chrome version (69.0.3497.100)

——引用自Chrome Fail Error Codes#answer2 - Stack Overflow

正是我所需要的

好了,现在我们知道了错误代码-118表示连接超时,且对于 Steam 可能出现的错误代码已不会再有所畏惧。那么连接超时的原因是什么呢?又如何解决呢?

多次检查后确认我的网络没有问题(连上了 Internet),Steam 的服务器也没有问题(参见 Steam Status · Is Steam Down?)。既然客户端和服务器端都没有问题,那么我们有理由相信是中间链路的问题。那么问题来了,从我们这里到 Steam 的服务器,经过了哪些可能会导致网络问题的关卡呢?

首先是域名解析。众所周知,Steam 社区的域名为steamcommunity.com。我们分析一下我们使用的 DNS 服务器对于这个域名的解析是否正确。

那么问题来了,如何确保 DNS 解析是正确的呢?尤其是在steamcommunity.com还使用了 CDN (Akamai Technologies - Wikipedia,点进去使用Ctrl+F搜索steam可快速找到相关内容)的情况下

答案是没有可靠的办法确保这一点。但是,有一个简单可行的办法可以证明 DNS 解析是错误的,那就是查 IP 的 Organization。比如使用 IP Location

首先,在 Windows CMD/PS(Powershell) 中输入如下命令得到你的 DNS 服务器的结果:

1
2
3
4
5
6
7
8
9
PS C:\Users\wsxq2> nslookup steamcommunity.com 
Server:  UnKnown
Address:  192.168.43.1

Non-authoritative answer:
Name:    steamcommunity.com
Address:  31.13.69.129

PS C:\Users\wsxq2>

然后复制解析结果31.13.69.129IP Location 查询:

1
2
3
4
5
6
7
IP address	31.13.69.129
Latitude	38.6582
Longitude	-77.2497
Country	United States
Region	Virginia
City	
Organization	Facebook

可以看到,其OrganizationFacebook,不为Akamai Technologies。所以可以确定我的 DNS 服务器已经被污染了

由此,我们找到了出现这个问题的原因

那么,如何解决呢?我们可以直接修改 hosts 文件试试。使用你国外的 VPS 查询一下 Steam 社区的正确 IP 地址:

1
2
3
4
5
6
7
8
# nslookup steamcommunity.com
Server:         1.0.0.1
Address:        1.0.0.1#53

Non-authoritative answer:
Name:   steamcommunity.com
Address: 23.212.26.172
#

修改C:\Windows\System32\drivers\etc\hosts文件,添加如下行(如果因为权限问题修改后无法保存,可以将该文件复制出来修改后再复制回去覆盖):

1
23.212.26.172 steamcommunity.com

现在再访问 Steam 中的社区

1
错误代码:-101

得到了一个新的错误代码。不慌,让我们查查这个代码的含义。在 Chrome 地址栏中输入<chrome://network-errors/>然后Ctrl+F查询-101

1
ERR_CONNECTION_RESET (-101)

可知其表示链接被远程主机重置了。那么为什么我们使用了正确的 IP 地址还是无法访问而显示该错误呢?

注意,前面提到了 Steam 使用了 CDN。众所周知,CDN 解析的 IP 地址在不同的区域是不一样的。直接访问 IP 地址本身是明显不行的。而修改 hosts 文件的做法虽然不完全和直接访问 IP 地址等价,但是由于没有经过 CDN 的域名解析自然也是不行的(这里的更细节的原因有待进一步分析)

(另外,CDN 的 DNS 也能被污染?震惊了,因为那岂不是意味着 V2ray+CDN 的方法不一定可靠?)

那么科学上网后为啥就可以访问了呢?众所周知,科学上网通常使用 shadowsocks 等代理工具,它们通常都支持代理 DNS,即 DNS 不是由本地(你的电脑)的 DNS 服务器来解析的,而是由远程主机(VPS)的 DNS 服务器来解析的

如果想要了解更多关于科学上网的内容请参见 科学上网

Invalid SSL certificate?

使用 SSTap-beta 后,我每次访问社区个人资料时总是出现这个错误。最后发现原因出在C:\Windows\System32\drivers\etc\hosts文件上。

可能是因为我错误配置了 SSTap-beta,导致它修改了 hosts 文件,添加了错误的steamcommunity.com记录(由于 Steam 使用了 CDN,故不应在 hosts 文件中添加相关条目)。因此,我的解决方法便是将相关条目删除

从网上搜索的结果来看,这个错误确实和 DNS 有关,请务必确保你的 DNS 解析的各个环节都没有问题。这里附一些常用的 DNS 相关的命令(在 Powershell 或 CMD 下执行):

ipconfig /all # 显示 DNS 服务器配置
ipconfig /displaydns # 显示当前的 DNS 缓存
ipconfig /flushdns # 清空当前的 DNS 缓存
nslookup steamcommunity.com # 使用默认的 DNS 服务器查询域名
ping steamcommunity.com # 直接解析(hosts文件 > 缓存 > DNS 服务器查询)

当然,还有个最基本的需要保证的是你的系统时间。众所周知,系统时间对于很多网络服务都非常重要,如果服务器和客户端的系统时间不统一的话,就可能出现各种莫名其妙的问题

详情参见 Steam平台登陆显示Invalid SSL certificate.怎么解决? - 知乎

链接

下面总结了本文中使用的所有链接: