Internet上的一些资源可能只能从具有特定IP地址的客户端访问。例如,假设您要在大学购买的期刊上下载一份发布的文件。在这种情况下,您必须从带有所属大学的IP地址的计算机连接到日记的网站。如果您在家工作,众所周知,您可以连接到大学的VPN,使您的IP地址将被伪装成校园的IP地址,允许您下载大学支付的纸张。但是,并不总是可以使用学校提供的VPN。例如,一些VPN需要特殊的客户端软件,这可能不支持Linux等操作系统。 VPN有什么简单的替代解决方案吗?答案是肯定的,如果您可以将使用大学IP地址运行的服务器,例如,在实验室中运行的工作站。
为了解决问题,我们可以执行以下命令,该命令在localhost的端口12345上创建一个socks服务器。
$ SSH -NTCD 12345 SSH_REMOTE_HOST_IP ========================== -N不执行远程命令-t禁用伪终端分配-c请求压缩所有数据-d< port>指定本地"动态"应用程序级端口转发。这是通过分配套接字来侦听本地端的端口的作用,可选地,无论何时对该端口进行连接时,连接都会通过安全通道转发连接,然后使用应用协议来确定连接到的位置远程机器。目前支持SOCK4和SOCKS5协议,并且SSH将充当SOCKS服务器。
下一步是设置浏览器的代理配置。以Firefox为例。该设置是偏好>网络设置>设置......
这样做后,您可以找到您需要的论文并开始下载它们!作为演示,您可以通过带有代理的浏览器在Google上搜索“我的IP是什么”,即,打开https://www.google.com/search?q=what ketis+my+ip。您应该发现它显示SSH_REMOTE_HOST_IP的IP而不是本地计算机的IP。
通常,当我们使用浏览器来打开https://www.google.com时,它将在www.google.com上创建将本地计算机上的随机端口连接到端口443(用于HTTPS)的TCP套接字对。然后,浏览器通过此套接字对发送HTTPS请求。但是,我们在这里所做的是创建袜子代理。我们请直接与www.google.com与www.google.com进行沟通,而是要求浏览器从浏览器分配的本地计算机上的随机端口向localhost的端口12345发送HTTPS,这是您刚刚由SSH命令创建的SSH服务器。 HTTPS请求将从LocalHost:12345通过SSH隧道中继,到达远程主机。然后,它将从SSH_REMOTE_HOST_IP上的随机端口发送到www.google.com上的端口443。
由于袜子代理在OSI模型的第5层执行(会话层),因此您可以使用它与许多工作在高于第5层的层中,例如FTP,Telnet,HTTP,SSH ...
例如,如果您想通过我们刚刚创建的Socks代理ssh of far_away_host。 你可以做: 登录到Far_away_host后,您可以检查您是否被视为从SSH_REMOTE_HOST_IP而不是本地计算机连接!