我一直在探索 ssh 隧道,但没有得到我想要的结果。
首先,我尝试在本地机器上使用本地端口转发,效果很好。
1) ssh -L 8080:localhost:8081 localhost
2) nc -l 8081
3) echo "Super User" | nc localhost 8080
现在,8080 流量被转发到 8081,结果从“数控-L 8081“ 命令。
很公平。
现在,我尝试转发到网络服务器。
ssh -L 8080:www.techgig.com:80 localhost
效果很好。但是,当我尝试
ssh -L 8080:www.medium.com:80 localhost
我收到以下错误:
Error 1003 Direct IP access not allowed
问题:
所以,我的问题是,是什么因素导致一些网站可以工作,而另一些网站无法工作。归根结底,这都只是转发数据,对吧?请澄清一下
答案1
是的,它只是转发数据。问题是,你给它不同的数据与直接连接相比,进行转发。
在 Wireshark 中查看任何 HTTP 请求。你会发现几乎所有请求都有一个Host:
标头,说明它们想要访问哪个域名。这是必要的,因为 TCP/IP 连接不要自动转发使用的主机名——Medium 网络服务器不知道您使用什么www.medium.com
来访问它除非HTTP 请求告诉它这一点。
http://www.medium.com
因此,当您在浏览器中访问时,它会发送一个 HTTP 请求Host: www.medium.com
,因为这就是您输入的内容。
但是,当您设置转发并尝试访问时http://localhost:8080
,浏览器也会发送,Host: localhost
因为这就是您输入的内容。Web 服务器不知道您的转发 - 它只知道您的 IP 地址和 HTTP 标头 - 因此它正确地抱怨其配置未列出此类域。
至于 http_proxy 建议:如果你在 Web 服务器上创建转发,并尝试将其用作 HTTP 代理,它只会让你访问那网络服务器。
虽然从技术上讲,它可以工作,但几乎所有的网络服务器都拒绝代理安全原因。(试想一下,如果允许这样做,不仅 Web 服务器会让您进入数据中心的专用网络,您还可以向全世界发送垃圾邮件,并假装是 Web 服务器做的。)