SOCKS
SOCKSは迂回のためのツールとしても使用されることがある。たとえば、政府、職場、学校、特定の国限定のウェブサービスなどで、インターネットのコンテンツへのアクセスフィルタやブロッキングが行われている場合に、それらを回避することができる。
たとえば、Tor onion proxyソフトウェアは、クライアントに対して、SOCKSインターフェイスを提供している。
OpenSSHはSOCKSプロトコルを利用した「動的ポートフォワード」の機能を持っている。SSHサーバ側で許可されていれば、クライアント側からは ssh(1) コマンドにある -D オプションで利用でき、sshコマンドのプロセスがローカルなSOCKSプロキシのようにして見えるようになる。そのプロキシへの接続はSSHサーバ側へポートフォワードされ、最終的な接続先からはSSHサーバからのアクセスとして見える。。
フィールド 6: ネットワークバイトオーダのポート番号, 2バイト
サーバの応答:
フィールド 1: SOCKS プロトコルバージョン, 1バイト(このバージョンでは 0x05 でなくてはならない)
フィールド2: 状態,1バイト 0x00 = リクエストの許可 0x01 = 一般的な失敗 0x02 = ルール設定により許可されない接続 0x03 = 到達できないネットワーク 0x04 = 到達できないホスト 0x05 = 宛先ホストにより拒否された接続 0x06 = TTL の期限切れ 0x07 = サポートされていないコマンド/ プロトコルエラー 0x08 = サポートされないアドレスタイプ
フィールド 3: 予約されている, 0x00 でなければならない
フィールド 4: アドレスの種類, 1バイト: 0x01 = IPv4 アドレス 0x03 = ドメイン名 0x04 = IPv6 アドレス
フィールド 5: サーバ側でbindされたアドレス IPv4 用の4バイト 1バイトのドメイン名長に続けて、ドメイン名 IPv6 用の16バイト
フィールド 6: ネットワークバイトオーダのポート番号, 2バイト
SOCKSによって外部ネットワークに接続する、全てのネットワーク・ソフトウェアの適合を可能にする "socksify" というクライアント用のプログラムがある。
標準の SOCKS 4 接続では、以下のような通信が行われる。
SOCKS クライアントからサーバ:
フィールド 1: SOCKS バージョン番号,1バイト,このバージョンでは 0x04 でなくてはならない
フィールド 2: コマンドコード,1バイト: 0x01 = TCP/IP ストリーム接続を確立する 0x02 = TCP/IP ポートバインディングを確立する
フィールド 3: ネットワークバイトオーダのポート番号,2バイト
フィールド 4: ネットワークバイトオーダの IP アドレス,4バイト
フィールド 5: ユーザID文字列, 可変長, null (0x00) で終了させる
SOCKS サーバからクライアント:
フィールド 1: null バイト
フィールド 2: 状態,1バイト 0x5a = リクエストの許可 0x5b = リクエストの拒絶または失敗 0x5c = リクエストはクライアントが identd を起動していなかったので失敗(もしくは、サーバから到達できなかった) 0x5d = リクエストはクライアントの identd がリクエストにユーザID文字列を確認できなかったので失敗
フィールド 3: 任意の2バイト,無視されなければならない