SOCKS
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/04/23 08:59 UTC 版)
プロトコル
SOCKS 4
標準の 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バイト,無視されなければならない
- フィールド 4: 任意の4バイト,無視されなければならない
例:
これは、66.102.7.99:80にユーザ「Fred」を接続する SOCKS 4 のリクエストである。そして、サーバは、"OK"の返事をする。
- クライアント: 0x04 | 0x01 | 0x00 0x50 | 0x42 0x66 0x07 0x63 | 0x46 0x72 0x65 0x64 0x00
- 最後のフィールドは ASCII コードの「Fred」であり、次に1バイトの null が続く
- サーバ: 0x00 | 0x5a | 0xXX 0xXX | 0xXX 0xXX 0xXX 0xXX
- 0xXX は全てのバイト値になることができる。 Socks 4 プロトコルはそれらのバイト値が無視されなければならないことを規定している。
この時点以降、 SOCKS クライアントから SOCKS サーバまで送る全てのデータは66.102.7.99に向けて中継される。そして、 SOCKS サーバから SOCKS クライアントに送る場合も同様である。
コマンドフィールドは、 "connect" で 0x01 、あるいは、 "bind" で 0x02 になることができる。 "bind" は動作中の FTP のようなプロトコルのために入ってくる接続を許可する。
SOCKS 4a
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バイト
- フィールド 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 5
より多くの認証の選択を提供する 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 でなくてはならない)
- フィールド 2: 選択された認証方法, 1バイト, もしくはアクセスできないメソッドが提供した 0xFF
次の認証は認証方法によって異なり、 RFC 1929 で記述されている。
クライアントの認証要求:
- フィールド 1: バージョン番号, 1バイト( 0x01 でなくてはならない)
- フィールド 2: ユーザ名長,1バイト
- フィールド 3: ユーザ名
- フィールド 4: パスワード長,1バイト
- フィールド 5: パスワード
認証のためのサーバの応答:
- フィールド 1: バージョン, 1バイト
- フィールド 2: 状態コード,1バイト
- 0x00 = 成功
- 他の全ての値 = 失敗, 接続は終了されなければならない
クライアントの接続要求:
- フィールド 1: SOCKS バージョン番号, 1バイト(このバージョンでは 0x05 でなくてはならない)
- フィールド 2: コマンドコード,1バイト:
- 0x01 = TCP/IP ストリーム接続を確立する
- 0x02 = TCP/IP ポートバインディングを確立する
- 0x03 = UDP ポートを結合させる
- フィールド 3: 予約されている, 0x00 でなければならない
- フィールド 4: アドレスタイプ, 1バイト:
- フィールド 5: 宛先アドレス
- IPv4 用の4バイト
- 1バイトのドメイン名長に続けて、ドメイン名
- IPv6 用の16バイト
- フィールド 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"[1] というクライアント用のプログラムがある。
- ^ RFC 1928
- ^ “Service Name and Transport Protocol Port Number Registry”. Internet Assigned Numbers Authority (2017年5月19日). 2017年5月23日閲覧。
- ^ Darmohray, Tina. "Firewalls and fairy tales". ;LOGIN:. Vol 30, no. 1.
- ^ http://www.socks.permeo.com/ (broken link as of July 2008)
- ^ News Release from Bluecoat
- ^ Article from infosecurityproductsguide.com
- ^ a b RFC 1928
- ^ CNET: Cyberspace from outer space
- ^ “2010 Circumvention Tool Usage Report”. The Berkman Center for Internet & Society at Harvard University (2010年10月). 2018年8月20日閲覧。
- ^ “Tor FAQ”. I want to run another application through Tor.. 2018年8月28日閲覧。
- ^ “OpenSSH FAQ”. 2002年2月1日時点のオリジナル[リンク切れ]よりアーカイブ。
- ^ “How to chain socks with Tor” 2017年1月23日閲覧。
- ^ Graham, James. Cyber Fraud. p. 45 .
- ^ Krebs, Brian (2016年10月16日). “IoT Devices as Proxies for Cybercrime” 2017年1月23日閲覧。
- ^ van Hardeveld, Gert Jan; Webber, Craig; O'Hara, Kieron. Discovering credit card fraud methods in online tutorials 2017年8月23日閲覧。.
- ^ Hummingbird SOCKS FAQ
ソックス
(SOCKS から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/20 13:38 UTC 版)
ソックス
- 靴下
- 硫黄酸化物 (SOx)
- SOCKS - インターネットプロトコルの1つ。RFC1928で定義されている。
- 犬と私の10の約束に登場する犬。
- ソックス (猫) - ビル・クリントン元アメリカ合衆国大統領が在任中、ホワイトハウスで飼っていた猫。
関連項目
- ハイソックス、ニーソックス
- ストッキング
- SOX
- 「ソックス」で始まるページの一覧
- タイトルに「ソックス」を含むページの一覧
- Wikipedia:索引 そつ
- en:Special:PrefixIndex/socks
- SOCKSのページへのリンク