在互联网环境越来越复杂的今天,很多组织选择使用HTTP Proxy或者SOCKS代理来限制未授权的访问和请求。在使用代理(proxy)的网络的网络环境中,如何使用socket编程建立与internet server的联系不是一件轻而易举的事情,本文将会详细的分析SOCKS和HTTP Proxy代理的通讯规范。

SOCKS Proxy:SOCK Proxy当前最高版本是SOCK5而且扩展支持UTP的数据发送,一个典型的SCOK Proxy代理运行在TCP 1080端口。SOCK Proxy协议最初是来自于一名Unix的系统管理员开发的,在1992年Koblas提交一篇关于SOCK Proxy的论文,从而SOCK Proxy变得公开和流行起来。一个典型的SOCK4的连接请求应该是这样:             C (Client)--------------->S(Server)           +----+----+----+----+----+----+----+----+----+----+....+----+           | VN | CD | DSTPORT |     DSTIP        | USERID       |NULL|           +----+----+----+----+----+----+----+----+----+----+....+----+# ofbytes:   1    1     2              4           variable       1VN表示的是协议版本号,值是0X04CD表示的是执行的请求动作,值0X01表示连接请求(connection request)DSTPORT andDSTIP 两个域分别是目标主机的端口和IP地址USERID表示用户的ID StringNULL表示必须以0x00结束

Server端处理客户端请求然后,应答客户端的数据包必须是以下格式回复:           C (Client) <---------------- S(Server)         +----+----+----+----+----+----+----+----+          | VN | CD | DSTPORT |      DSTIP        |         +----+----+----+----+----+----+----+----+ # of bytes:1   1      2              4VN的值是版本返回码必须是0CD域的值请求的结果码 90表示授权成功;9X表示授权失败剩下的两个域的值将被忽略

默认情况下请求连接的TCP在两分钟之内还没有建立连接,一个timeout错误将被抛出同时TCP连接被关闭。一旦请求获得成功,TCP连接将会建立,客户端可以向SOCK Proxy代理开始发送数据。

当前SOCK5 Proxy代理协议对客户端请求分成了两步来做,第一步客户端发送方法信息,格式如下:          +----+---------+---------+          | VN | NMETHOD | METHODS |          +----+---------+---------+# of bytes:1  |  1     | 1 to 255

服务器端回复的信息格式如下:                          +----+--------+                          |VER | METHOD |                          +----+--------+# of bytes: |1  |  1    |如果method域的值是0XFF则意味着没有客户端选择的方法可以支持, 0x00则表示不需要授权访问,更多的详细信息参见RFC1928。

一旦客户端收到服务器端的选择方法回复。客户端紧接着发送一个链接请求到SOCK5 Proxy Server,格式与SOCK4的请求报文类似,只是目标主机支持域名,同时多了一个保留的字节域。具体请求报文格式如下:+----+-----+-------+------+----------+----------+|VER | CMD|  RSV  | ATYP | DST.ADDR | DST.PORT|+----+-----+-------+------+----------+----------+| 1   | 1  | X’00’ |  1    | Variable |     2  |+----+-----+-------+------+----------+----------+

VER是版本号,它的值必须是0X05CMD链接方法,0X01表示链接请求,0X02表示绑定请求常被用于FTP通讯,0X03表示UDP关联RSV表示保留字节,值必须为0X00ATYP表示地址类型,0X01表示IPv4,0X03表示域名,0X04表示IPv6DST.ADDR表示目标主机IP或者域名DST.PORT表示目标主机端口号

需要注意的是如果使用域名则必须转换为ASCII码字节,所有的数据表示必须是0XFF的格式。SOCK代理协议是一个运行在OSI第五层会话层的协议,在第四层TCP层之上。

HTTP代理(HTTP PROXY)HTTP代理会自动提取用户数据包的HTTP Request数据并且把Response的数据转发给发送请求的客户端,HTTP Proxy使用的端口通常是8080.如果在组织内部发起一个socket链接到外部的internet,需要做的事情很简单,首先创建scoket链接到HTTP代理服务器         Socket s = new Socket(proxy-host,host-port)向http proxy发送一个http get请求如下:GEThttp://edinkysoft.appspot.com/Article.do HTTP/1.1\r\n + 结束标志 \r\n具体可以参见RFC2616

工具(SmartSniff)refer to http://www.nirsoft.net/utils/smsniff.html一个免费的数据包截获工具,可以用来研究各种代理与客户端之间是如何建立TCP链接,smartsniff捕获以太网数据包和第三层(IP)数据包,要求用户安装WinPcap Capture驱动。

SOCK/HTTP代理协议解析相关推荐

  1. python3异步协程爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  2. python异步爬虫_Python实现基于协程的异步爬虫

    Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...

  3. nginx服务+LEMP搭建

    Nginx nginx的配置运行需要pcre.zlib等软件包支持.所以先搭建好环境,确保nginx安装顺利.以红冒企业版RHEL6为例,搭建Nginx. yum -y install pcre-de ...

  4. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...

  5. 015. P2P技术详解(一):NAT详解——详细原理、P2P简介

    http://www.52im.net/thread-50-1-1.html 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层 ...

  6. Linux crash调试(一)

    文章目录 前言 1.dis 2.rd 3.struct 4.mod 5.set 6.task 7.ps 8.p 总结 参考资料 前言 在这篇文章中搭建了crash的调试环境,简单的描述了crash的使 ...

  7. P2P技术详解(一):NAT详解——详细原理、P2P简介

    目录 1. IPv4协议和NAT的由来 2. NAT的工作模型和特点 2.1.NAT的概念模型 2.2.一对一的NAT 2.3.一对多的NAT 2.4.按照NAT端口映射方式分类 2.4.1全锥形NA ...

  8. http 1.php,php利用socket扩展写一个简单的单进程http服务1

    废话少说,直接贴代码了. error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); date_default_timezone_s ...

  9. socket 本地上传视屏

    服务端 import socketserver = socket.socket() # 默认就是基于网络的TCP传输协议 server.bind(('127.0.0.1',8080)) # 绑定IP和 ...

  10. 视频监控项目--友善之臂---阿里云---QT---mjpg-streamer

    一.项目流程 1.工作流程 简言之:我们使用的是开源库mjpg-streamer.摄像头采集的数据会保存在/dev/video0目录下,然后输入进tcp服务器,在浏览器开始访问. 我们要做的就是讲tc ...

最新文章

  1. CSE 3100 Systems Programming
  2. linux nfs 配置_NFS服务器
  3. jQuery选择器之可见性过滤选择器Demo
  4. SpringBoot学习笔记(一)整合Mybatis
  5. SAP 电商云 Spartacus UI Proxy Facade 的一个实际例子
  6. 对某公司一次弱口令到存储型xss挖掘
  7. bzoj1051: [HAOI2006]受欢迎的牛(tarjan强连通分量)
  8. winform flash
  9. 图解 Scala 基本语法 V2018.12.17
  10. [机器学习] focal loss:解决样本不平衡的一种通用方案
  11. 操作系统复习笔记(五)
  12. 【讲座预告】Processing Learner Texts: from Annotation to ...
  13. 实验五 Linux Shell程序设计
  14. SPSS入门教程—日期类型的变量转换
  15. 2021年中国石油沥青供需及发展趋势分析[图]
  16. 让程序员崩溃的瞬间(非程序员勿入)
  17. 关于VideoQA(视频问答)的基本思路总结
  18. spring事务 调用同类方法,同类方法要事务不生效怎么办
  19. 形容等待时间长的句子_形容等待的时间很漫长的句子
  20. 程序员如何在面试中克服恐惧?

热门文章

  1. Unity 文字转语音
  2. Pytorch中报错RuntimeError: The size of tensor a (60) must match the size of tensor b (56)
  3. python收获怎么写_Python学习心得
  4. compositionAPI
  5. 《编码:隐匿在计算机软硬件背后的语言》一书勘误
  6. python mro文件_Python中MRO
  7. 周记——20150427
  8. 计算机网络的作用拓展图,拓扑图介绍及相关功能
  9. 中国拖车洒水器市场趋势报告、技术动态创新及市场预测
  10. 多功能雨伞项目计划书_多功能雨伞项目计划书_雨伞策划书范文