SOCK/HTTP代理协议解析
在互联网环境越来越复杂的今天,很多组织选择使用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代理协议解析相关推荐
- python3异步协程爬虫_Python实现基于协程的异步爬虫
Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...
- python异步爬虫_Python实现基于协程的异步爬虫
Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...
- nginx服务+LEMP搭建
Nginx nginx的配置运行需要pcre.zlib等软件包支持.所以先搭建好环境,确保nginx安装顺利.以红冒企业版RHEL6为例,搭建Nginx. yum -y install pcre-de ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介(转)
这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...
- 015. P2P技术详解(一):NAT详解——详细原理、P2P简介
http://www.52im.net/thread-50-1-1.html 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层 ...
- Linux crash调试(一)
文章目录 前言 1.dis 2.rd 3.struct 4.mod 5.set 6.task 7.ps 8.p 总结 参考资料 前言 在这篇文章中搭建了crash的调试环境,简单的描述了crash的使 ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介
目录 1. IPv4协议和NAT的由来 2. NAT的工作模型和特点 2.1.NAT的概念模型 2.2.一对一的NAT 2.3.一对多的NAT 2.4.按照NAT端口映射方式分类 2.4.1全锥形NA ...
- http 1.php,php利用socket扩展写一个简单的单进程http服务1
废话少说,直接贴代码了. error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); date_default_timezone_s ...
- socket 本地上传视屏
服务端 import socketserver = socket.socket() # 默认就是基于网络的TCP传输协议 server.bind(('127.0.0.1',8080)) # 绑定IP和 ...
- 视频监控项目--友善之臂---阿里云---QT---mjpg-streamer
一.项目流程 1.工作流程 简言之:我们使用的是开源库mjpg-streamer.摄像头采集的数据会保存在/dev/video0目录下,然后输入进tcp服务器,在浏览器开始访问. 我们要做的就是讲tc ...
最新文章
- CSE 3100 Systems Programming
- linux nfs 配置_NFS服务器
- jQuery选择器之可见性过滤选择器Demo
- SpringBoot学习笔记(一)整合Mybatis
- SAP 电商云 Spartacus UI Proxy Facade 的一个实际例子
- 对某公司一次弱口令到存储型xss挖掘
- bzoj1051: [HAOI2006]受欢迎的牛(tarjan强连通分量)
- winform flash
- 图解 Scala 基本语法 V2018.12.17
- [机器学习] focal loss:解决样本不平衡的一种通用方案
- 操作系统复习笔记(五)
- 【讲座预告】Processing Learner Texts: from Annotation to ...
- 实验五 Linux Shell程序设计
- SPSS入门教程—日期类型的变量转换
- 2021年中国石油沥青供需及发展趋势分析[图]
- 让程序员崩溃的瞬间(非程序员勿入)
- 关于VideoQA(视频问答)的基本思路总结
- spring事务 调用同类方法,同类方法要事务不生效怎么办
- 形容等待时间长的句子_形容等待的时间很漫长的句子
- 程序员如何在面试中克服恐惧?
热门文章
- Unity 文字转语音
- Pytorch中报错RuntimeError: The size of tensor a (60) must match the size of tensor b (56)
- python收获怎么写_Python学习心得
- compositionAPI
- 《编码:隐匿在计算机软硬件背后的语言》一书勘误
- python mro文件_Python中MRO
- 周记——20150427
- 计算机网络的作用拓展图,拓扑图介绍及相关功能
- 中国拖车洒水器市场趋势报告、技术动态创新及市场预测
- 多功能雨伞项目计划书_多功能雨伞项目计划书_雨伞策划书范文