场景
服务器A在内网,因为安全原因,不能直接访问外网。
服务器A能访问代理服务器B。
服务器A 通过 代理服务器B 请求百度的话,开通B到百度的访问权限后,可以怎么验证一下B到外网的权限是否开通?
解决方法0
在代理服务器上执行 ssh 命令 参考我的另一篇文章
ssh -v -p 8080 root@baike.baidu.com //域名:port
ssh -v -p 8080 root@12.19.10.135 //ip:port
解决方法1
在代理服务器B上 执行curl命令
POST请求
curl 'http://www.baidu.com' \ #加不加引号都可以,我测试过,下面GET请求我没加引号
-H "Content-Type:application/json" \
-H 'Authorization:bearer' \
-X POST \
-d '{"name":"12330245","content":"哈哈哈"}'
或者
curl -d "param1=value1¶m2=value2" "http://www.baidu.com"
或者
curl -d 'login=zhangsan&passwd=123456' -X POST http://www.baidu.com
或者
curl -d 'login=zhangsan' -d 'passwd=123456' -X POST http://www.baidu.com
--data-urlencode 参数等同于 -d ,发送 POST 请求的数据体,区别在于前者会自动将发送的数据进行 URL 编码。
例如:
curl --data-urlencode 'comment=hello world' http://www.baidu.com
#上面的命令中 hello world 之间有一个空格,需要进行 URL 编码。
读取本地文本文件的数据,向服务器发送:
curl -d '@data.txt' http://www.baidu.com #需要注意的是@后面应该是目标json文件的路径。
curl -d '@/home/data.txt' http://www.baidu.com
curl命令所有的符号都得使用英文符号,不能出现汉语符号
GET请求
curl http://www.baidu.com # 如果这里的URL指向的是一个文件或者一幅图片都可以直接下载到本地
curl -i http://www.baidu.com #显示全部信息
curl -l http://www.baidu.com #只显示头信息
curl -v http://www.baidu.com #显示GET请求全过程解析
解决方法2
在服务器A上执行curl命令
假设代理服务器B 的 ip:port 是12.32.56.44:8080
POST请求
curl --proxy http://12.32.56.44:8080 -X POST http://www.baidu.com \
-H "Content-Type:application/json" \
-H 'Authorization:bearer' \
-X POST \
-d '{"name":"12330245","content":"哈哈哈"}'
其实和上面一样,只是加了代理
GET请求
curl --proxy http://12.32.56.44:8080 http://www.baidu.com?login=a&passwd=b
补充
上面是 http 请求,如果要要通过代理验证 sftp 服务器的权限,如下:
sftp -oProxyCommand='/usr/bin/nc --proxy-type http --proxy proxyIp:proxyPort %h %p' -oPort=sftpPort sftpuser@sftpIp
例如:
sftp -oProxyCommand='/usr/bin/nc --proxy-type http --proxy 12.103.11.123:9022 %h %p' -oPort=10022 ngisa@102.15.156.11
思考
能不能用 ping命令 和 telnet 命令进行验证呢,下篇文章进行解答。