0
点赞
收藏
分享

微信扫一扫

【软件测试】设计测试用例的万能公式

一叶轻舟okok 2024-11-18 阅读 14

公司里绝大多数主机已经禁止外网访问,仅保留一台主机设置socks作为代理服务器。如下为对socks这一概念的学习整理

什么是socks

OSI模型下会话层的协议,位于表示层与传输层之间,作用是:

出现原因

RFC 1928 这里解释的已经很清楚

由于工作在会话层,传输层在它下面,所以它的适应场景就要比HTTP 代理灵活,可以代理更多类型的应用数据,日常开发最常用的那些工作在应用层的协议就不在话下了

配置

socks的配置比较简单,可以简单(这是最简单的情况)分为不能访问外网的客户端服务器和可以访问外网代理服务器(这两者之间内网可联通)

代理服务器设置

通过SSH 在本地启动一个 SOCKS 代理服务器

ssh -f -N -D 0.0.0.0:1080 localhost 

在这种设置下,客户端通过这个代理发送的请求,都会通过本地机器的网络接口转发出去。启动后可以验证

netstat -tuln | grep 1080
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN
客户端设置

对于大多数的企业软件来说,其本身自带proxy设置,此时填入我们代理服务器的IP和开启的端口(一般是1080)即可(当然,如果做的更加精细些,可以加用户密码认证,这里自行查找命令参数),如idea
在这里插入图片描述
亦或是Dbvisualizer
在这里插入图片描述

一个curl的例子

之前使用如下命令一直无法运行curl(192.168.1.36是代理服务器IP)

curl --socks5 192.168.1.36:1080 http://www.baidu.com

查找原因是curl默认走的当前机器DNS解析,当前机器无法访问外网,自然行不通。需要额外增加--socks5-hostname,通过 SOCKS 代理服务器处理 DNS 解析,确保即使本地网络无法访问,依然能够成功解析目标网站的域名

curl --socks5-hostname 192.168.1.36:1080 http://www.baidu.com

当时在验证代理服务器的可用性时,这个问题让我卡了很久。若遇到类似的情况,比如其他命令需要通过代理访问外部网络,可以参考这个方法(其他命令可能有专属的参数表示)来解决 DNS 解析的问题

参考

  • https://zh.wikipedia.org/zh-sg/SOCKS
  • https://datatracker.ietf.org/doc/html/rfc1928
  • https://www.freecodecamp.org/chinese/news/osi-model-networking-layers/
举报

相关推荐

0 条评论