Back at university I was facing a horrible network restriction - HTTP proxy. I was unable to use any services that required direct connection to the server. I overcame this problem with a tiny proxy tuneller that started a local server on my machine and sent HTTP CONNECT request to the proxy server to attach the external server to the other end of the pipe. A week ago a friend of mine asked me for this app again because he's got this headache on his campus.

There are tons of commercial tunnellers that allow you to monitor the traffic, create schedules, set permissions and plenty of other useless stuff when all you need is a tunnell itself. The app I wrote has 5 small classes and does it's job very good. It's time to reveal this software to the world. Feel free to download:

If you know what XML is and know how to deal with app.config files you may skip the following chapter. I'd like to take a minute to explain to the newbies how to modify the application configuration.

This is the configuration file ScottlessTunneller.exe.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
  <configSections>
    <section name="Tunnels" type="ScottlessTunneller.Config.ConfigurationSectionHandler, ScottlessTunneller" />
  </configSections>
  <Tunnels>
    <TunnelConfig>
      <Name>Give this tunnel a distinct name (e.g. Gmail POP3)</Name>
      <InternalPort>A port on your machine you'd like to be the front-end of the tunnell</InternalPort>
      <ExternalHost>Host name of the server in the world you wish to create a tunnell to</ExternalHost>
      <ExternalPort>The port on the server</ExternalPort>
      <ProxyHost>Host name of your proxy server</ProxyHost>
      <ProxyPort>Port your proxy server is listening at</ProxyPort>
      <ProxyUsername>(optional)Username you use for authentication</ProxyUsername>
      <ProxyPassword>(optional)Your password</ProxyPassword>
    </TunnelConfig>
  </Tunnels>
</configuration>

 

When you feel like one service is not enough you may add another service like this:

   <Tunnels>
    <TunnelConfig>
      <Name>Service 1</Name>
      <InternalPort>10021</InternalPort>
      <ExternalHost>yahoo.com</ExternalHost>
      <ExternalPort>21</ExternalPort>
      <ProxyHost>proxy.com</ProxyHost>
      <ProxyPort>3128</ProxyPort>
      <ProxyUsername></ProxyUsername>
      <ProxyPassword></ProxyPassword>
    </TunnelConfig>
    <TunnelConfig>
      <Name>Service 2</Name>
      <InternalPort>10022</InternalPort>
      <ExternalHost>google.com</ExternalHost>
      <ExternalPort>22</ExternalPort>
      <ProxyHost>proxy.com</ProxyHost>
      <ProxyPort>3128</ProxyPort>
      <ProxyUsername></ProxyUsername>
      <ProxyPassword></ProxyPassword>
    </TunnelConfig>
  </Tunnels>

NOTE: All InternalPort-s of the TunnelConfig-s must be different. If you specify the same internal port the app will fail to create two listening sockets at the same port.

Enjoy your free tunneller!