Click here to Skip to main content
12,635,441 members (25,854 online)
Click here to Skip to main content
Add your own
alternative version

Stats

269K views
5.5K downloads
78 bookmarked
Posted

HTTP Tunneling (HTTP Proxy Socket Client)

, 14 Aug 2004
Rate this:
Please Sign up or sign in to vote.
An easy way to pass through HTTP Proxy to connect to outside world, in a LAN.

Introduction

HTTP Tunneling

HTTP is a text-based protocol to retrieve 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 lets 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 are doing some secure HTTP session.

For HTTPS, your browser connects to a proxy server and sends a command:

<FONT color=#000080><FONT color=#ff0000>CONNECT</FONT>

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 is established, the proxy server returns the following response:

<FONT color=#ff0000>HTTP/1.0</FONT>

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.

  1. Connect to Proxy Server first.
  2. Issue CONNECT Host:Port HTTP/1.1<CR><LF>.
  3. Issue <CR><LF>.
  4. Wait for a line of response. If it contains HTTP/1.X 200, the connection is successful.
  5. Read further lines of response until you receive an empty line.
  6. Now, you are connected to the 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 CRLF


try
{
  CString Request,Response;
  CSocketClient Client;

  Client.ConnectTo(<FONT color=#ff0000>"192.0.1.1"</FONT>

Library Source Code

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 the 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 CRLF
try
{
  CHttpProxySocketClient Client;

  Client.SetProxySettings(<FONT color=#ff0000>"192.0.1.1"</FONT>

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 "<FONT color=#ff0000>HttpProxySocket.h</FONT>"

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.

More about me.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Akash Kava
Web Developer
United States United States
Programmer with WILL

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 4 Pin
anderbill8-Nov-10 17:10
memberanderbill8-Nov-10 17:10 
Generaldosen't seem to work Pin
Member 72127922-Jun-09 3:46
memberMember 72127922-Jun-09 3:46 
QuestionC# Solution for this? Pin
uliderknecht28-Jun-07 3:15
memberuliderknecht28-Jun-07 3:15 
AnswerRe: C# Solution for this? Pin
mcldev13-Jul-07 8:59
membermcldev13-Jul-07 8:59 
QuestionBlacklist VS Whitelist firewalls? Pin
evilnoodle1-Mar-07 21:01
memberevilnoodle1-Mar-07 21:01 
AnswerRe: Blacklist VS Whitelist firewalls? Pin
Akash Kava1-Mar-07 22:16
memberAkash Kava1-Mar-07 22:16 
GeneralProxy problem Pin
ryb198321-Nov-06 18:28
memberryb198321-Nov-06 18:28 
QuestionProxy authentification Pin
Ice_2k9-Oct-06 0:02
memberIce_2k9-Oct-06 0:02 
AnswerRe: Proxy authentification Pin
Akash Kava9-Oct-06 16:41
memberAkash Kava9-Oct-06 16:41 
GeneralRe: Proxy authentification Pin
tankSanju22-May-08 20:00
membertankSanju22-May-08 20:00 
GeneralRe: Proxy authentification Pin
tankSanju22-May-08 22:02
membertankSanju22-May-08 22:02 
GeneralRe: Proxy authentification Pin
tankSanju22-May-08 22:06
membertankSanju22-May-08 22:06 
GeneralRe: Proxy authentification Pin
dugga19-Oct-10 21:10
memberdugga19-Oct-10 21:10 
GeneralIf the serve need name and password,how can I do it Pin
yuluzju22-Aug-05 23:36
memberyuluzju22-Aug-05 23:36 
Generalapplication spectrum Pin
avi-wildthing15-Aug-05 8:19
memberavi-wildthing15-Aug-05 8:19 
QuestionWhat if I wanna connect to more proxies? Pin
Hoornet936-Jun-05 4:10
memberHoornet936-Jun-05 4:10 
Generalwell, cool article... but Pin
MMs_xH24-May-05 4:18
memberMMs_xH24-May-05 4:18 
GeneralRe: well, cool article... but Pin
Akash Kava24-May-05 9:08
memberAkash Kava24-May-05 9:08 
GeneralRe: well, cool article... but Pin
MMs_xH9-Jun-05 0:18
memberMMs_xH9-Jun-05 0:18 
GeneralRe: well, cool article... but Pin
paijwar5-Sep-06 0:07
memberpaijwar5-Sep-06 0:07 
Generalreally urgent Pin
Merin Ann Alexander2-Mar-05 18:24
memberMerin Ann Alexander2-Mar-05 18:24 
General403 forbidden why Pin
liuliu21-Nov-04 23:00
memberliuliu21-Nov-04 23:00 
GeneralRe: 403 forbidden why Pin
Akash Kava22-Nov-04 4:11
memberAkash Kava22-Nov-04 4:11 
GeneralRe: 403 forbidden why Pin
liuliu22-Nov-04 15:11
memberliuliu22-Nov-04 15:11 
GeneralRe: 403 forbidden why Pin
Akash Kava22-Nov-04 20:29
memberAkash Kava22-Nov-04 20:29 
GeneralRe: 403 forbidden why Pin
liuliu23-Nov-04 16:30
memberliuliu23-Nov-04 16:30 
GeneralSensible proxy Pin
Jabes16-Aug-04 1:36
memberJabes16-Aug-04 1:36 
GeneralRe: Sensible proxy Pin
Gerard Nicol26-Aug-04 20:30
memberGerard Nicol26-Aug-04 20:30 
GeneralI'll waiting more articles about Inet protocols from you ! Pin
Stanislav Panasik15-Aug-04 20:07
sussStanislav Panasik15-Aug-04 20:07 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161208.2 | Last Updated 15 Aug 2004
Article Copyright 2004 by Akash Kava
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid