SOCKS を HTTPプロトコルでラップできるのか調べてみました。
以下のようなページが見つかったのでどうもできるようです。

  Socks via HTTP
  http://lightbox.ath.cx/socks/

プロトコルの詳細についても一応調べてみました。

  SOCKS4プロトコル
  http://hp.vector.co.jp/authors/VA017085/text/socks4.html


SOCKS を HTTPでラップするクライアントと
HTTP中のSOCKSプロトコルを取り出す サーバ
の2つがあれば何とかなりそうです。

ということで作り始めてみました。
手始めに 通信データに対して何の加工もせずに Socksサーバにデータ中継できるサーバプログラムを作ってみます

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpSocks {

    public static void main(String[] args) {
        proxy();
    }

    public static void proxy() {
        int port = 55110;                  //サーバーポート
        String socks_host = "192.168.1.6"; //Dante が動いているホスト名
        int socks_port = 49153;            //Socksサービスポート

        try {
            ServerSocket server = new ServerSocket(port);

            while (true) {
                Socket in_socket = server.accept();
                Socket out_socket = new Socket(socks_host, socks_port);

                createThread(in_socket, out_socket).start();
                createThread(out_socket, in_socket).start();
            }

        } catch (Exception err) {
            err.printStackTrace();
        }

    }

    public static Thread createThread(final Socket input_socket, final Socket output_socket) throws IOException {
        Runnable r = new Runnable() {
            public void run() {
                try (InputStream in = new BufferedInputStream(input_socket.getInputStream());
                        OutputStream out = new BufferedOutputStream(output_socket.getOutputStream());) {

                    int cnt = -1;
                    byte[] buffer = new byte[1024];
                    while ((cnt = in.read(buffer, 0, buffer.length)) != -1) {
                        debugLog(buffer, cnt);
                        out.write(buffer, 0, cnt);
                        out.flush();
                    }
                } catch (Exception err) {
                    //err.printStackTrace();
                }
            }
        };
        return new Thread(r);
    }

    public static void debugLog(byte[] data, int cnt) {
        //DEBUG LOG
        for (int i = 0; i < cnt; i++) {
            System.out.print("0x" + Integer.toHexString(data[i] & 0xff));
        }
        System.out.println();
    }
}


ブラウザの Socks に localhost:55110
Dante を 192.168.1.6:49153 で動作させて
WebブラウザとSocksサーバ間にProxy動作させることに成功。

ちょっと苦労しましたが、出来ました。
Httpでラップするのも行けそうな予感。

ソースはここ
https://github.com/moremagic/HttpSocks