SOCKS
フィールド 5: ユーザ ID 文字列, 可変長, null (0x00) で終了させる
フィールド 6: 接続先のホストのドメイン名, 可変長, null (0x00) で終了させる
SOCKS サーバからクライアント:
フィールド 1: null バイト
フィールド 2: 状態,1バイト 0x5a = リクエストの許可 0x5b = リクエストの拒絶または失敗 0x5c = リクエストはクライアントが identd を起動していなかったので失敗(もしくは、サーバから到達できなかった) 0x5d = リクエストはクライアントの identd がリクエストにユーザ ID 文字列を確認できなかったので失敗
フィールド 3: ネットワークバイトオーダのポート番号,2バイト
フィールド 4: ネットワークバイトオーダの IP アドレス,4バイト
4A プロトコルを使用するサーバはリクエストパケット内の宛先アドレスをチェックしなければならない。宛先アドレスが、 x を非零の値としてアドレス 0.0.0.x を表現するならば、サーバはクライアントがパケット内に送付するドメイン名を読み込まなければならない。サーバはドメイン名を解決すべきであり、そしてそれが可能であるならば、宛先ホストへの接続を確立しなくてはならない。
SOCKSは、ネットワーク・ファイアウォール越えやアクセス制御等を目的として、クライアントサーバ型のプロトコルが、透過的に使用できるよう設計されたプロキシ(proxy)のプロトコル、及びシステム(の一つ)である。"SOCKetS" の略。
いわゆるTCP/IPの4層モデル(インターネット・プロトコル・スイートのDARPAモデル)の観点からは、Internet Protocol(IP)の上の、TCPやUDP(ただしUDPに関しては有用性が限られる)のようなトランスポート層における通信の手続きを中継・代理するメカニズムとなっている。SOCKSサーバ自身とクライアント間の通信はストリーム指向であり、一般にはLAN内からTCPで接続する。
プロトコル上は多段にもできるが、原理の説明には1段階で十分なので、以下はそのような前提とする。またファイアウォールを設けないシステムでもユースケースは考えられるが、以下ではファイアウォールの存在を前提とする。
クラッキングされたコンピュータには、ボットネットの制御を隠したりクレジットカード詐欺等といった、マルウェア的な目的のために、SOCKS proxyソフトウェアが設定されることがある。
6.x Loadable Kernel Module である。
OpenSSH は、動的ポートフォワード機能を利用するためのインタフェースのひとつとして、SOCKS プロトコルを使うことができる。OpenSSH クライアントを仮想的な SOCKS サーバの受付側にすることができ、接続先の OpenSSH サーバが仮想的な SOCKS サーバの出口側となって、クライアントからのネット接続を代理する。
SOcat Multipurpose は (SOcket CAT) を中継する: socks4 とsocks4a の機能性を含む (Linux / Mac)
SS5 Socks Server はオープンソースの SOCKS4/SOCKS5 サーバである.
Tor
WinSocks は Proxy Labs により開発された軽量 SOCKS4/SOCKS5 サーバである。
SOCKS 4a は、 SOCKS 4 プロトコルのシンプルな拡張機能であり、宛先ホストのドメイン名を解決できないクライアントがドメイン名を指定することを可能にする。
クライアントは宛先アドレスの最初の3バイトを NULL に、そして最後のバイトを0でない値に設定すべきである(これは、x を非零の値として、 IP アドレス 0.0.0.x に対応する。この値は宛先アドレスとして使用してはならない。したがって、この値は、もしクライアントがドメイン名を解決できるならば、決して設定するべきではない。)。
ユーザ ID を終了する NULL バイトの次に、クライアントは宛先ドメイン名を送らなければならない、そして、それを別の NULL バイトで終了させなければならない。これは "connect" と "bind" の両方のリクエストに使われる。
SOCKS クライアントからサーバ:
フィールド 1: SOCKS バージョン番号,1バイト,このバージョンでは 0x04 でなくてはならない
フィールド 2: コマンドコード,1バイト: 0x01 = TCP/IP ストリーム接続を確立する 0x02 = TCP/IP ポートバインディングを確立する
フィールド 3: ネットワークバイトオーダのポート番号,2バイト
フィールド 4: ネットワークバイトオーダの IP アドレス,4バイト
より多くの認証の選択を提供する SOCKS 4 プロトコルの拡張である SOCKS 5 プロトコルは RFC 1928 内で定義されている。最初のハンドシェイクは下記の事項から成り立つ。
クライアントは接続し、サポートされた認証方法のリストを含む挨拶を送る。
サーバは一つ選ぶ(もしくは、提供されたメソッドがアクセスできないならば、失敗の応答を送る)。
いくつかのメッセージが、選択された認証方法に応じて、クライアントとサーバーの間を送受信される。
クライアントは、接続要求を SOCKS 4 と同じように送る。
サーバは SOCKS 4 と同じように応答する。
サポートされた認証方法は次の通りに番号を割り付けている:
0x00 - 認証なし
0x01 - GSSAPI
0x02 - ユーザ名/パスワード
0x03-0x7F - IANA により割り当てられたメソッド
0x80-0xFE - プライベート使用のために予約されたメソッド
クライアントからの最初の挨拶:
フィールド 1: SOCKS バージョンナンバ(このバージョンでは 0x05 でなくてはならない)
フィールド 2: サポートされた認証方法の数,1バイト
フィールド 3: 認証方法, 可変長, サポートされたメソッドにつき1バイト
サーバの選択が伝えられる:
フィールド 1: SOCKS バージョン, 1バイト(このバージョンでは 0x05 でなくてはならない)