我有时会使用免费的 Wifi 服务来上网。
与大多数/所有此类服务提供商一样,该服务采用强制门户。因此,如果您尝试在浏览器中发出 HTTP 请求(请求网页)并且您未在网络上获得授权,您将只会看到显示“欢迎使用免费 -wifi 网络。这是我们的条款等”的页面...”
我对滥用免费 wifi 服务不感兴趣 - 我想知道当我使用此服务时哪些信息(HTTP 事务)暴露/不安全,以及他们对我的系统进行了哪些持久更改,即隐藏 cookie在我的浏览器中(通过使用匿名主机)。
所以我连接到他们的 wifi 接入点,此时他们为我的计算机分配了 IP 地址和 DNS 服务等。
$ nmcli device show wlp2s0
IP4.ADDRESS[1]: 192.168.12.199/22
IP4.GATEWAY: 192.168.12.1
IP4.ROUTE[1]: dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]: 123.123.xxx.xxx
IP4.DNS[2]: 123.123.xxx.xxx
然后我尝试一个 HTTP 请求 - 在尚未授权的情况下尝试“浏览网页”。(作为 HTTP,此请求/响应将是未加密的,处理请求的服务器上不会进行身份检查 [通过 SSL 证书颁发机构通过公钥/私钥签名等进行确认])
$ curl 'http://placeimg.com/' -H 'Host: placeimg.com'
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0'
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -v -L
* Trying 216.243.142.217...
* Connected to placeimg.com (216.243.142.217) port 80 (#0)
> GET / HTTP/1.1
> Host: placeimg.com
>
< HTTP/1.1 302 Found
< Location: http://1.1.2.1:80/reg.php?ah_goal=auth-tc.html&ah_login=true&url=E2B8F357812412D8
<
* Ignoring the response-body
* Connection #0 to host placeimg.com left intact
* Issue another request to this URL:
'http://1.1.2.1:80/reg.php?ah_goal=auth-tc.html&ah_login=true&url=E2B8F35792412D8'
* Connection 0 seems to be dead!
* Closing connection 0
* Trying 1.1.2.1...
* Connected to 1.1.2.1 (1.1.2.1) port 80 (#1)
> GET /reg.php?ah_goal=auth-tc.html&ah_login=true&url=E2B8F8 HTTP/1.1
> Host: 1.1.2.1
> User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en-US,en;q=0.5
>
< HTTP/1.1 200 OK
< Date: Mon, 08 Aug 2016 02:50:16 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
< Content-type: text/html; charset=utf-8
<
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width"/>
<title>Login</title>
<h1>WiFi - Free Internet Access</h1>
This service is provided primarily for the purposes of accessing Email and light web browsing ..
....
</div>
</body>
</html>
我已经截断并编辑了输出,但基本上看起来,当我的浏览器(curl)发出请求时,网络正在提供对真实 DNS 服务器的访问,我通过运行它进一步测试了它 - 同时连接到服务。
$dig +short google.com
203.118.141.95
203.118.141.123
... (basically real ip addresses for google.com)
因此,该服务似乎提供了有关 DNS 的真实、真实的信息,
但即使我的浏览器寻址的 IP 地址似乎有效,返回的 HTTP 响应也不是来自预期的服务器(它是由 WiFi 服务插入的服务器)。回应是
302
1.1.2.1/reg.php
告诉我的浏览器向服务器和 URL发出新请求- 来自该服务器/URL 的响应是“强制门户”页面。
发出 HTTPS 请求时
$ curl 'https://google.com/' -H 'Host: google.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -v -L
* Trying 216.58.220.142...
* connect to 216.58.220.142 port 443 failed: Connection refused
* Trying 2404:6800:4006:800::200e...
* Immediate connect fail for 2404:6800:4006:800::200e: Network is unreachable
* Trying 2404:6800:4006:800::200e...
* Immediate connect fail for 2404:6800:4006:800::200e: Network is unreachable
* Failed to connect to google.com port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to google.com port 443: Connection refused
请求完全失败-我假设是因为我的计算机不接受来自无法验证的远程主机的连接?
所以我的问题是,这是 TCP/IP 级别的“中间人”类型拦截吗?换句话说,当我的计算机上的网络堆栈尝试placeimg.com
通过启动 3 次握手来与服务器建立 TCP 连接时,Wifi 服务网关或网络节点是否使用 ACK/SYN 响应我的 SYN 并说是的m 你想与之交谈的服务器 - 让我们完成我们的 TCP 连接,然后一旦建立其预编程以自动发送 HTTP 重定向,然后,因为我的浏览器实际上正在生成下一个请求1.1.2.1
本身——所有“有趣的事情”都可以停止,并且从那时起所有正常的 HTTP/HTML 行为。(即像在任何普通网站上一样的标准表单填写和提交)
如果不是,当我是“未经身份验证”的用户时,此网关如何拦截和重新路由我的请求?