Make socket connection using SOCKS4/5 and HTTP tunnel.
| How To Compile | |
| * ============== | |
| * | |
| * On UNIX environment: | |
| * $ gcc connect.c -o connect | |
| * | |
| * On SOLARIS: | |
| * $ gcc -o connect -lresolv -lsocket -lnsl connect.c | |
| * | |
| * on Win32 environment: | |
| * $ cl connect.c wsock32.lib advapi32.lib | |
| * or | |
| * $ bcc32 connect.c wsock32.lib advapi32.lib | |
| * or | |
| * $ gcc connect.c -o connect | |
| * | |
| * on Mac OS X environment: | |
| * $ gcc connect.c -o connect -lresolv | |
| * or | |
| * $ gcc connect.c -o connect -DBIND_8_COMPAT=1 | |
| * | |
| * How To Use | |
| * ========== | |
| * | |
| * You can specify proxy method in an environment variable or in a | |
| * command line option. | |
| * | |
| * usage: connect [-dnhst45] [-R resolve] [-p local-port] [-w sec] | |
| * [-H [user@]proxy-server[:port]] | |
| * [-S [user@]socks-server[:port]] | |
| * [-T proxy-server[:port]] | |
| * [-c telnet proxy command] | |
| * host port | |
| * | |
| * "host" and "port" is for the target hostname and port-number to | |
| * connect to. | |
| * | |
| * The -H option specifys a hostname and port number of the http proxy | |
| * server to relay. If port is omitted, 80 is used. You can specify this | |
| * value in the environment variable HTTP_PROXY and pass the -h option | |
| * to use it. | |
| * | |
| * The -S option specifys the hostname and port number of the SOCKS | |
| * server to relay. Like -H, port number can be omitted and the default | |
| * is 1080. You can also specify this value pair in the environment | |
| * variable SOCKS5_SERVER and give the -s option to use it. | |
| * | |
| * The '-4' and the '-5' options are for specifying SOCKS relaying and | |
| * indicates protocol version to use. It is valid only when used with | |
| * '-s' or '-S'. Default is '-5' (protocol version 5) | |
| * | |
| * The '-R' option is for specifying method to resolve the | |
| * hostname. Three keywords ("local", "remote", "both") or dot-notation | |
| * IP address are acceptable. The keyword "both" means, "Try local | |
| * first, then remote". If a dot-notation IP address is specified, use | |
| * this host as nameserver. The default is "remote" for SOCKS5 or | |
| * "local" for others. On SOCKS4 protocol, remote resolving method | |
| * ("remote" and "both") requires protocol 4a supported server. | |
| * | |
| * The '-p' option will forward a local TCP port instead of using the | |
| * standard input and output. | |
| * | |
| * The '-P' option is same to '-p' except keep remote session. The | |
| * program repeats waiting the port with holding remote session without | |
| * disconnecting. To disconnect the remote session, send EOF to stdin or | |
| * kill the program. | |
| * | |
| * The '-w' option specifys timeout seconds for making connection with | |
| * TARGET host. | |
| * | |
| * The '-d' option is used for debug. If you fail to connect, use this | |
| * and check request to and response from server. | |
| * | |
| * You can omit the "port" argument when program name is special format | |
| * containing port number itself. For example, | |
| * $ ln -s connect connect-25 | |
| * means this connect-25 command is spcifying port number 25 already | |
| * so you need not 2nd argument (and ignored if specified). | |
| * | |
| * To use proxy, this example is for SOCKS5 connection to connect to | |
| * 'host' at port 25 via SOCKS5 server on 'firewall' host. | |
| * $ connect -S firewall host 25 | |
| * or | |
| * $ SOCKS5_SERVER=firewall; export SOCKS5_SERVER | |
| * $ connect -s host 25 | |
| * | |
| * For a HTTP-PROXY connection: | |
| * $ connect -H proxy-server:8080 host 25 | |
| * or | |
| * $ HTTP_PROXY=proxy-server:8080; export HTTP_PROXY | |
| * $ connect -h host 25 | |
| * To forward a local port, for example to use ssh: | |
| * $ connect -p 5550 -H proxy-server:8080 host 22 | |
| * ($ ssh -l user -p 5550 localhost ) | |
| * | |
| * TIPS | |
| * ==== | |
| * | |
| * Connect.c doesn't have any configuration to specify the SOCKS server. | |
| * If you are a mobile user, this limitation might bother you. However, | |
| * You can compile connect.c and link with other standard SOCKS library | |
| * like the NEC SOCKS5 library or Dante. This means connect.c is | |
| * socksified and uses a configration file like to other SOCKSified | |
| * network commands and you can switch configuration file any time | |
| * (ex. when ppp startup) that brings you switching of SOCKS server for | |
| * connect.c in same way with other commands. For this case, you can | |
| * write ~/.ssh/config like this: | |
| * | |
| * ProxyCommand connect -n %h %p | |
| * | |
| * SOCKS5 authentication | |
| * ===================== | |
| * | |
| * Only USER/PASS authentication is supported. | |
| * | |
| * Proxy authentication | |
| * ==================== | |
| * | |
| * Only BASIC scheme is supported. | |
| * | |
| * Authentication informations | |
| * =========================== | |
| * | |
| * User name for authentication is specifed by an environment variable | |
| * or system login name. And password is specified from environment | |
| * variable or external program (specified in $SSH_ASKPASS) or tty. | |
| * | |
| * Following environment variable is used for specifying user name. | |
| * SOCKS: $SOCKS5_USER, $LOGNAME, $USER | |
| * HTTP Proxy: $HTTP_PROXY_USER, $LOGNAME, $USER | |
| * | |
| * ssh-askpass support | |
| * =================== | |
| * | |
| * You can use ssh-askpass (came from OpenSSH or else) to specify | |
| * password on graphical environment (X-Window or MS Windows). To use | |
| * this, set program name to environment variable SSH_ASKPASS. On UNIX, | |
| * X-Window must be required, so $DISPLAY environment variable is also | |
| * needed. On Win32 environment, $DISPLAY is not mentioned. | |
| * | |
| * Related Informations | |
| * ==================== | |
| * | |
| * SOCKS5 -- RFC 1928, RFC 1929, RFC 1961 | |
| * NEC SOCKS Reference Implementation is available from: | |
| * http://www.socks.nec.com | |
| * DeleGate version 5 or earlier can be SOCKS4 server, | |
| * and version 6 can be SOCKS5 and SOCKS4 server. | |
| * and version 7.7.0 or later can be SOCKS5 and SOCKS4a server. | |
| * http://www.delegate.org/delegate/ | |
| * | |
| * HTTP-Proxy -- | |
| * Many http proxy servers supports this, but https should | |
| * be allowed as configuration on your host. | |
| * For example on DeleGate, you should add "https" to the | |
| * "REMITTABLE" parameter to allow HTTP-Proxy like this: | |
| * delegated -Pxxxx ...... REMITTABLE="+,https" ... | |
| * | |
| * Hypertext Transfer Protocol -- HTTP/1.1 -- RFC 2616 | |
| * HTTP Authentication: Basic and Digest Access Authentication -- RFC 2617 | |
| * For proxy authentication, refer these documents. from https://gist.github.com/skreuzer/1517867 下载地址: https://gist.github.com/skreuzer/1517867/raw/4c3c1d35c1c830ba5d43db1b982704bf888a9f4e/connect.c |