位置: IT常识 - 正文

HTTP Tunneling (HTTP Proxy Socket Client)

编辑:rootadmin
HTTP Tunneling (HTTP Proxy Socket Client)HTTP TunnelingHTTP is a text-based protocol to retreive Web

推荐整理分享HTTP Tunneling (HTTP Proxy Socket Client),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

HTTP Tunneling

HTTP is a text-based protocol to retreive Web pages through a Web browser. Mostly if you are on a LAN connection, you are behind a proxy server; this proxy server has one HTTP proxy running on some defined port. In your Internet Explorer's Connection option, you specify LAN settings as required. This proxy server is definitely running on a text-based protocol and you can only get HTTP-related data from the outside network, right!! Well, there is a small loophole from which you can go through HTTP and connect to the outside world and get any data you want in binary protocol, or even your own protocol. It's through HTTPS.

HTTPS Explanation

In HTTPS, data is transferred from browser to server and server to browser in a secure manner. It's a binary protocol; when it goes through a proxy, the proxy doesn't understand anything. The proxy just allows a binary stream to open and let both server and client exchange the data. Now, we can fool the proxy server and connect to any server and exchange data. The proxy server will think that we doing some secure HTTP session.

For HTTPS, your browser connects to a proxyserver and sends a command.

CONNECT neurospeech.com:443HTTP/1.0<CR><LF>HOST neurospeech.com:443<CR><LF>[... other HTTP header lines ending with<CR><LF>if required]><CR><LF>// Last Empty Line

Then, the proxy server treats this as some HTTP Secure Session, and opens a binary stream to the required server and port as defined. If a connection established, the proxy server returns the following response:

HTTP/1.0200ConnectionEstablished<CR><LF>[.... other HTTP header lines ending with<CR><LF>..ignore all of them]<CR><LF>// Last Empty Line

Now, the browser is connected to the end server and can exchange data in both a binary and secure form.

How to Do This

Now, it's your program's turn to fool the proxy server and behave as Internet Explorer behaves for Secure HTTP.

Connect to Proxy Server first.Issue CONNECT Host:Port HTTP/1.1<CR><LF>.Issue <CR><LF>.Wait for a line of response. If it contains HTTP/1.X 200 , the connection is successful.Read further lines of response until you receive an empty line.Now, you are connected to outside world through a proxy. Do any data exchange you want.Sample Source Code// You need to connect to mail.yahoo.com on port 25// Through a proxy on 192.0.1.1, on HTTP Proxy 4480// CSocketClient is Socket wrapping class// When you apply operator << on CString, it writes CString// To Socket ending with CRLF// When you apply operator >> on CString, it receives// a Line of response from socket until CRLFtry{CStringRequest,Response;CSocketClientClient;Client.ConnectTo("192.0.1.1",4480);// Issue CONNECT CommandRequest="CONNECT mail.yahoo.com:25 HTTP/1.0";Client<<Request;// Issue empty lineRequest="";Client<<Request;// Receive Response From ServerClient>>Response;// Ignore HTTP Versionint n =Response.Find(' ');Response=Response.Mid(n+1);// Http Response Must be 200 onlyif(Response.Left(3)!="200"){// Connection refused from HTTP Proxy ServerAfxMessageBox(Response);}// Read Response Lines until you receive an empty line.do{Client>>Response;if(Response.IsEmpty())break;}while(true);// Coooooooool.... Now connected to mail.yahoo.com:25// Do further SMTP Protocol here..}catch(CSocketException* pE){ pE->ReportError();}Library Source CodeHTTP Tunneling (HTTP Proxy Socket Client)

The Dns.h file contains all DNS-related source code. It uses other libraries, as SocketEx.h, SocketClient.h, and NeuroBuffer.h.

CSocketEx

Socket functions as a wrapper class. (CSocket is very heavy and unreliable if you don't have the exact idea of how it works.) All the functions are of same name as CSocket. You can use this class directly.

CSocketClient

Derived from CSocketEx and throws proper exceptions with details of Winsock errors. It defines two operators, >> and <<, for easy sending and receiving; it also changes network to host and host to network order of bytes if required.

CHttpProxySocketClient

Derived from CSocketClient, you can call the SetProxySettings(ProxyServer,Port) method and set proxy settings. Then, you can connect to the desired host and port as you need. The ConnectTo method is overridden and it automatically implements an HTTP proxy protocol and gives you a connection without any hassle.

How to Use CHttpProxySocketClient// e.g. You need to connect to mail.yahoo.com on port 25// Through a proxy on 192.0.1.1, on HTTP Proxy 4480// CSocketClient is Socket wrapping class// When you apply operator << on CString, it writes CString// To Socket ending with CRLF// When you apply operator >> on CString, it receives// Line of response from socket until CRLFtry{CHttpProxySocketClientClient;Client.SetProxySettings("192.0.1.1",1979);// Connect to server mail.yahoo.com on port 25Client.ConnectTo("mail.yahoo.com",25);// You now have access to mail.yahoo.com on port 25// If you do not call SetProxySettings, then// you are connected to mail.yahoo.com directly if// you have direct access, so always use// CHttpProxySocketClient and no need to do any// extra coding.}catch(CSocketException* pE){ pE->ReportError();}

Note: I usually don't program in the form of .h and .cpp different files, because using them the next time somewhere else is a big problem because you must move both files here and there. So, I put all the code in my .h file only; I don't write to the .cpp file unless it's required. You need to copy only the SocketEx.h, SocketClient.h, and HttpProxySocket.h files into your project's directory, and add line

#include"HttpProxySocket.h"

after your

#if !defined(.....

and so forth code of your Visual Studio-generated file. If you put anything above this, you will get n number of errors.

Downloads

Download source - 17 Kb

Note: I usually don't program in the form of .h and .cpp different files, because using them the next time somewhere else is a big problem because you must move both files here and there. So, I put all the code in my .h file only; I don't write to the .cpp file unless it's required. You need to copy only the SocketEx.h, SocketClient.h, and HttpProxySocket.h files into your project's directory, and add line

#include"HttpProxySocket.h"

after your

#if !defined(.....

and so forth code of your Visual Studio-generated file. If you put anything above this, you will get n number of errors.

本文链接地址:https://www.jiuchutong.com/zhishi/304101.html 转载请保留说明!

上一篇:实现自己的http server loop_in_codes C++博客

下一篇:驱动开发:内核LDE64引擎计算汇编长度(驱动开发做得长久吗)

  • 评估报告是什么
  • 小规模纳税人月收入多少免征增值税
  • 税务师考试2023年考试时间
  • 发票专票抵扣
  • 在途物资什么科目
  • 利润表中其他业务利润是什么
  • 金融商品转让和持有至到期都需要缴纳增值税吗
  • 减免增值税款怎么算
  • 金蝶k3怎么样新增账套
  • 公司的软件服务包括哪些
  • 股权转让涉及房屋产权变更怎么办
  • 跨期发票可以申报抵扣进项税额吗?
  • 代订机票款发票可以作为机票报销差旅吗
  • 哪些费用应该计税
  • 增值税的工程服务有哪些
  • 汽油费能计入办公费吗
  • 国家税务总局2011年第25号公告
  • 集体福利支出包括
  • 可转换公司债券转股会计分录
  • 原材料总分类账怎么写
  • 长期待摊会计处理
  • 原材料入账价值合理损耗
  • 非税收入票据如何打印
  • 企业借款利息收入企业所得税
  • 加装固态后如何分盘
  • 调整bios配置设置
  • 欧拉操作系统和龙蜥哪个好用
  • 个人社保和公积金扣款公司七个人三怎么样
  • 如何给电脑文件加密并设置密码
  • php顺序查找和二分查找
  • 允许加计扣除的委托境外研发费用
  • java解析xml常用方式
  • iframe嵌套页面点击里面的按钮
  • 汽车增值税是
  • 印花税申报未扣款在哪里查询
  • 资金账簿印花税怎么算
  • 个人发票抬头是自己的名字吗
  • day15-Servlet04
  • 织梦模板官网
  • 如何利用税收经济效应实现税收的宏观调控目标
  • 办公室装修费多少钱可以一次性入账
  • 小企业资本公积的来源有
  • mysql命令行实用程序
  • 小企业会计准则适用于哪些企业
  • 多计提的个人所得税退给员工怎么处理
  • 库存商品过期了还能用吗
  • 应付利息核算的会计分录
  • 哪些进项的税可以退税
  • 收到预付款项发票怎么开
  • 交通运输业营改增
  • 异地出租房屋
  • 过期食品返厂会重新打日期吗
  • 财务会计期末总结
  • 供应商退回来的钱应走哪个科目
  • 天猫佣金是啥
  • 学校固定资产账记法
  • 哪些企业执行新的租赁政策
  • 出纳建账的基本流程
  • 储存扩展容量
  • mybatis分页插件的原理
  • win7玩游戏出现安全警报
  • 如何抛弃七情六欲
  • ubuntu启动菜单 哪个键
  • winxp怎么改壁纸
  • win7如何开启飞行模式
  • win7暗藏的超实用快捷键汇总
  • macbookpro鼠标触控板
  • win7系统怎么查看隐藏文件夹
  • centos安装命令yum
  • glib库
  • opengl画矩形函数
  • android viewpager
  • php和mysql的结合是目前web开发中的黄金组合
  • 菜鸟100例python3
  • javascript 基础篇4 window对象,DOM
  • js中tolocalestring
  • python中的类怎样理解
  • 公职律师
  • 用if函数计算个人应交所得税
  • 个体商户营业额多少万以下免税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设