使用 SOCKS

原文:http://briteming.blogspot.com/2012/04/socks.html

本章介绍如何配置和使用 Sun Java System Web Proxy Server 附带的 SOCKS 服务器。Proxy Server 支持 SOCKS 第 4 版和第 5 版。
本章包含以下各节:

关于 SOCKS

SOCKS 是一种联网代理协议,用于重定向来自 SOCKS 服务器相对侧主机的连接请求,通过该协议,无需直接 IP 连接能力,一侧的主机便能够获得对另一侧主机的完全访问权限。SOCKS 通常用作网络防火墙,以使 SOCKS 服务器后面的主机能够获得对 Internet 的完全访问权限,同时防止在未经授权的情况下从 Internet 访问内部主机。
SOCKS 服务器是一个通用的防火墙守护程序,它基于点对点模式通过防火墙对访问进行控制。SOCKS 服务器可以对请求进行验证和授权、建立代理连接以及转发数据。SOCKS 服务器在网络层而非应用层上运行,因此它不了解用于传输请求的协议或方法。由于 SOCKS 服务器不了解协议,因此可以使用该服务器来传送 Proxy Server 不支持的那些协议(如 Telnet)。
图 15–1 SOCKS 服务器在网络中的位置

图中说明了 SOCKS 服务器在网络中的位置。

使用捆绑的 SOCKS v5 服务器

Sun Java System Web Proxy Server 附带了自己的 SOCKS 守护程序,该守护程序识别其他 SOCKS 守护程序使用的标准 socks5.conf 文件格式。此守护程序可以由 Proxy Server 用来为请求选择路由,也可以从 Proxy Server 运行以提供附加的网络功能。有关配置 Proxy Server 以通过 SOCKS 服务器路由请求的更多信息,请参见配置路由条目
默认情况下,禁用 Proxy Server 附带的 SOCKS 守护程序。您可以通过 Server Manager 界面的 "SOCKS" 选项卡或命令行来启用该守护程序。有关更多信息,请参见启动和停止 SOCKS v5 服务器

注 – 在 Proxy Server 4 中,SOCKS 守护程序的名称已从 ns-sockd 更改为 sockd

使用 Proxy Server 附带的 SOCKS 服务器时必须采取的总体步骤如下:

Procedure使用 SOCKS

  1. 配置 SOCKS 服务器。参见配置 SOCKS v5 服务器
  2. 如果 SOCKS 服务器将在具有多个接口的计算机上运行,请创建 SOCKS 路由条目。参见配置路由条目
  3. 创建验证条目。参见配置 SOCKS v5 验证条目
  4. 创建连接条目。参见配置 SOCKS v5 连接条目
  5. 启用 SOCKS 服务器。参见启动和停止 SOCKS v5 服务器

关于 socks5.conf

Sun Java System Web Proxy Server 使用 socks5.conf 文件来控制对 SOCKS 服务器及其服务的访问。其中每个条目都定义了在收到与该条目匹配的请求时 Proxy Server 将执行的操作。在 Server Manager 中所做的选择将写入socks5.conf。此外,也可以手动编辑该文件。socks5.conf 文件位于安装根目录 server-root,如下所示:
server-root/proxy-serverid /config 目录
本节提供了有关 socks5.conf 的常规信息。有关该文件及其指令和语法的详细信息,请参见 Proxy Server 配置文件参考

验证

可以将 SOCKS 守护程序配置为使用其服务时要求验证。验证基于连接客户机的主机名和端口。如果选择要求用户名和密码,将会根据 socks5.conf 文件所引用的用户名和密码文件进行信息验证。如果提供的用户名和密码与密码文件中的列表不匹配,则拒绝访问。密码文件中用户名和密码的格式为 username password ,其中用户名和密码用空格分隔。.
您还可以禁止用户。若要求进行用户名和密码验证,必须向 socks5.conf 添加 SOCKS5_PWDFILE 指令。有关该指令及其语法的更多信息,请参见 Proxy Server 配置文件参考中的 socks5.conf 部分。
此外,还可以根据已配置的 LDAP 服务器(而不仅仅是文件)来执行用户名和密码验证。

访问控制

访问控制是使用 socks5.conf 文件中的一组有序行来执行的。每一行中都包含一条指令,用于允许或拒绝对资源的访问。指令按其在配置文件中的出现顺序进行处理。不符合任何允许指令的请求将被拒绝访问。

日志记录

SOCKS 守护程序将错误消息和访问消息都记录在 SOCKS 日志文件中。在 socks5.conf 中,可以指定日志文件位置和日志记录类型。
SOCKS 守护程序还会每小时生成一个统计条目,用于提供该守护程序的统计信息。

调节

可以使用 socks5.conf 文件来确定 SOCKS 服务器使用的工作线程和接受线程的数目。这些数目会影响 SOCKS 服务器的性能。
有关工作线程和接受线程设置及其对性能的影响的更多信息,请参见配置 SOCKS v5 服务器中的相关部分。

启动和停止 SOCKS v5 服务器

可以从 Server Manager 或命令行来启动和停止 SOCKS 服务器。

Procedure从 Server Manager 启动和停止 SOCKS 服务器

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Start/Stop SOCKS Server" 链接。
  3. 启动或停止 SOCKS 服务器。

从命令行启动和停止 SOCKS 服务器

运行 server-root/proxy- serverid 目录中找到的脚本,其中 server-root 为安装根目录:
  • start-sockd 用于启动 SOCKS 守护程序
  • stop-sockd 用于停止 SOCKS 守护程序
  • restart-sockd 用于重新启动 SOCKS 守护程序

配置 SOCKS v5 服务器

Procedure配置 SOCKS 服务器

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Configure SOCKS v5" 链接。
  3. 在 "SOCKS Port" 字段中,键入 SOCKS 服务器将侦听的端口号。默认值为 1080。
  4. 选择要使用的 SOCKS 选项。
    可以使用以下选项:
    • Disable Reverse DNS Lookup。 对 SOCKS 服务器禁用反向 DNS 查找。反向 DNS 可将 IP 地址转换为主机名。禁用反向 DNS 查找可节省网络资源。默认情况下将禁用 DNS 查找。如果禁用了反向 DNS 查找而使用主机名请求 URL,则服务器不会将主机名映射到 IP 地址。如果启用了反向 DNS 查找,服务器将会执行映射,并向 SOCKS 日志文件中添加一个条目,用于列出该 DNS 转换。
      • Use Client-specific Bind Port。允许客户机在 "BIND" 请求中指定端口。禁用此选项后,SOCKS 将忽略客户机请求的端口并指定一个随机端口。默认情况下禁用此选项。
      • 允许Wildcard As Bind IP Address。 允许客户机在 "BIND" 请求中指定一个全部由零组成的 IP 地址 (0.0.0.0),表示可以连接任何 IP 地址。禁用此选项后,客户机必须指定将要连接到绑定端口的 IP 地址,而 SOCKS 服务器会拒绝绑定到 0.0.0.0 的请求。默认情况下禁用此选项。
      • Quench Updates。禁用每小时自动写入一次统计文件。如果禁用,则每次请求时都会进行写入。有关更多信息,请参见日志记录
    "Quench Updates" 元素显示在用户界面中,但在本 Proxy Server 4 发行版中并未实现。
  5. 在 "Log File" 字段中,键入 SOCKS 日志文件的完整路径名。
    默认路径为 server-root/proxy- serverid/logs/socks5.log
  6. 从 "Log Level" 下拉式列表中,选择日志文件是应仅包含警告和错误,还是应包含所有请求或调试消息。
  7. 选择 RFC 1413 ident 响应。
    Ident 允许 SOCKS 服务器确定客户机的用户名。通常,仅当客户机运行某些版本的 UNIX 时,此功能才有效。可以使用以下选项:
    • Don't Ask。从不使用 ident 来确定客户机的用户名。此设置为默认设置,建议使用。
      • Ask But Don't Require。询问所有客户机的用户名,但并不需要该名称。此选项使用 ident 只是出于日志记录目的。
      • Require。询问所有客户机的用户名,并且仅允许访问做出了有效响应的客户机。
  8. 在 "SOCKS Tuning" 部分,指定 SOCKS 服务器应使用的工作线程和接受线程的数目。这些数目会影响 SOCKS 服务器的性能。单击 "OK"。
    • Number Of Worker Threads。默认值为 40。如果 SOCKS 服务器太慢,请增加工作线程数。如果服务器不稳定,则应减少该数值。更改此数目时,请从默认值开始并根据需要进行增减。典型的工作线程数介于 10 到 150 之间。绝对最大值是 512,但数量超过 150 往往会造成浪费且不稳定。
      • Number Of Posted Accepts。默认值为 1。如果 SOCKS 服务器丢弃连接,请增加接受线程数。如果服务器不稳定,则应减少该数值。更改此数目时,请从默认值开始并根据需要进行增减。典型的接受线程数介于 1 到 10 之间。绝对最大值是 512,但数量超过 60 往往会造成浪费且不稳定。如果在 SOCKS 服务器欠载且连接减少时请求失败,请调节此设置。

配置 SOCKS v5 验证条目

SOCKS 验证条目用于确定 SOCKS 守护程序应接受来自哪些主机的连接,以及 SOCKS 守护程序应使用何种类型的验证来验证这些主机。

Procedure创建 SOCKS 验证条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Authentication" 链接。
  3. 单击 "Add" 按钮。
  4. 在 "Host Mask" 字段中,键入 SOCKS 服务器将要验证的主机的 IP 地址或主机名。
    如果键入的是 IP 地址,地址后面应跟一个正斜杠以及要应用于传入 IP 地址的掩码。SOCKS 服务器会将此掩码应用于 IP 地址,以确定其是否为有效主机。请勿在主机掩码条目中使用空格。如果不键入主机掩码,验证条目将适用于所有主机。
    例如,可在 "Host Mask" 字段中键入 155.25.0.0/255.255.0.0。如果主机的 IP 地址是 155.25.3.5,则 SOCKS 服务器会将该掩码应用于此 IP 地址,并确定主机的 IP 地址是否与验证记录所请求的 IP 地址 (155.25.0.0) 匹配。
  5. 在 "Port Range" 字段中,键入 SOCKS 服务器将要验证的主机的端口。
    请勿在端口范围条目中使用空格。如果不提供端口范围,验证条目将适用于所有端口。
    可以使用方括号 [ ] 包括范围两端的端口,也可使用圆括号 ( ) 将它们排除在外。例如,[1000-1010] 表示 1000 和 1010 之间包括 1000 和 1010 在内的所有端口号,而 (1000-1010) 表示 1000 和 1010 之间不包括 1000 和 1010 在内的所有端口号。另外,也可以混合使用方括号和圆括号。例如,(1000-1010] 表示 1000 和 1010 之间不包括 1000 但包括 1010 在内的所有端口号。
  6. 从 "Authentication Type" 下拉式列表中选择验证类型。
    可以使用以下选项:
    • Require user-password。访问 SOCKS 服务器时需要用户名和密码。
    • User-password, if available。如果存在用户名和密码,则应使用它们来访问 SOCKS 服务器,但它们并不是访问所必需的。
    • Ban。禁止访问 SOCKS 服务器。
    • None。访问 SOCKS 服务器时不需要验证。
  7. 从 "Insert" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。
    由于可以采用多种验证方法,因此必须指定对这些方法的评估顺序。这样,如果客户机不支持所列的第一种验证方法,便会改用第二种方法。如果客户机不支持所列的任何验证方法,SOCKS 服务器将断开连接而不接受请求。

Procedure编辑验证条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Authentication" 链接。
  3. 选择要编辑的验证条目,然后单击 "Edit" 按钮。
  4. 根据需要进行更改。
  5. 单击 "OK"。

Procedure删除验证条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Authentication" 链接。
  3. 选择要删除的验证条目。
  4. 单击 "Delete" 按钮。

Procedure移动验证条目

条目按其在 socks5.conf 文件中出现的顺序进行评估。可以通过移动来更改其顺序。
  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Authentication" 链接。
  3. 选择要移动的验证条目,然后单击 "Move" 按钮。
  4. 从 "Move" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置。
  5. 单击 "OK"。

配置 SOCKS v5 连接条目

SOCKS 连接条目用于指定 SOCKS 守护程序是应允许请求,还是应拒绝请求。

Procedure创建连接条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Connections" 链接。
  3. 单击 "Add" 按钮。
  4. 从 "Authentication Type" 下拉式列表中,选择此访问控制行所请求的验证方法。
  5. 从 "Connection Type" 下拉式列表中,选择此行所匹配的命令类型。命令类型可能包括:
    • Connect 
      • Bind 
      • UDP 
      • All 
  6. 在 "Source Host Mask" 字段中,键入连接控制条目所请求的主机的 IP 地址或主机名。
    如果键入的是 IP 地址,地址后面应跟一个正斜杠以及要应用于源 IP 地址的掩码。SOCKS 服务器会将此掩码应用于源 IP 地址,以确定其是否为有效主机。请勿在主机掩码条目中使用空格。如果不键入主机掩码,连接条目将适用于所有主机。
    例如,可在 "Host Mask" 字段中键入 155.25.0.0/255.255.0.0。如果主机的 IP 地址是 155.25.3.5,则 SOCKS 服务器会将该掩码应用于此 IP 地址,并确定主机的 IP 地址是否与连接控制条目所请求的 IP 地址 (155.25.0.0) 匹配。
  7. 在 "Port Range" 字段中,键入连接控制条目所请求的源计算机的端口。
    请勿在端口范围条目中使用空格。如果不指定端口范围,连接条目将适用于所有端口。
    可以使用方括号 [ ] 包括范围两端的端口,也可使用圆括号 ( ) 将它们排除在外。例如,[1000-1010] 表示 1000 和 1010 之间包括 1000 和 1010 在内的所有端口号,而 (1000-1010) 表示 1000 和 1010 之间不包括 1000 和 1010 在内的所有端口号。另外,也可以混合使用方括号和圆括号。例如,(1000-1010] 表示 1000 和 1010 之间不包括 1000 但包括 1010 在内的所有端口号。
  8. 在 "Destination Host Mask" 字段中,键入连接条目所请求的 IP 地址或主机名。
    如果键入的是 IP 地址,地址后面应跟一个正斜杠以及要应用于传入 IP 地址的掩码。SOCKS 服务器会将此掩码应用于目标计算机的 IP 地址,以确定其是否为有效的目标主机。请勿在主机掩码条目中使用空格。如果不键入目标主机掩码,连接条目将适用于所有主机。
    例如,可在 "Destination Host Mask" 字段中键入 155.25.0.0/255.255.0.0。如果目标主机的 IP 地址是 155.25.3.5,则 SOCKS 服务器会将该掩码应用于此 IP 地址,并确定目标主机的 IP 地址是否与代理条目所请求的 IP 地址 (155.25.0.0) 匹配。
  9. 在 "Port Range" 字段中,键入连接控制条目所请求的目标主机的端口。
    请勿在端口范围条目中使用空格。如果不键入端口范围,连接条目将适用于所有端口。

    注 – 大多数 SOCKS 应用程序均会请求端口 0 来执行绑定请求,这表示它们没有端口首选项。因此,用于绑定的目标端口范围应始终包括端口 0。

    可以使用方括号 [ ] 包括范围两端的端口,也可使用圆括号 ( ) 将它们排除在外。例如,[1000-1010] 表示 1000 和 1010 之间包括 1000 和 1010 在内的所有端口号,而 (1000-1010) 表示 1000 和 1010 之间不包括 1000 和 1010 在内的所有端口号。另外,也可以混合使用方括号和圆括号。例如,(1000-1010] 表示 1000 和 1010 之间不包括 1000 但包括 1010 在内的所有端口号。
  10. 在 "User Group" 字段中,键入要允许或拒绝访问的组。
    如果不指定组,连接条目将适用于所有用户。
  11. 从 "Action" 下拉式列表中,为所创建的连接选择允许或拒绝访问。
  12. 从 "Insert" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。
    由于可以采用多个连接指令,因此必须指定对这些指令的评估顺序。

Procedure编辑连接条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Connections" 链接。
  3. 选择要编辑的连接条目,然后单击 "Edit" 按钮。
  4. 根据需要进行更改。
  5. 单击 "OK"。

Procedure删除连接条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Connections" 链接。
  3. 选择要删除的连接条目。
  4. 单击 "Delete" 按钮。

Procedure移动连接条目

条目按其在 socks5.conf 文件中出现的顺序进行评估。可以通过移动来更改其顺序。
  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Connections" 链接。
  3. 选择要移动的连接条目。
  4. 单击 "Move" 按钮。
  5. 从 "Move" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。

配置 SOCKS v5 服务器链接

可以采用与 Proxy Server 相同的方式将 SOCKS 服务器链接在一起,这表示一个 SOCKS 服务器可以通过另一个 SOCKS 服务器进行路由。

Procedure配置 SOCKS 服务器链接

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 如果代理链中的下游代理要求验证才能为任何请求提供服务,请在 "Server Chaining" 部分中,键入用于向链接的 Proxy Server 进行验证的用户名和口令。单击 "OK"。

配置路由条目

可以使用路由条目来配置 Proxy Server,使其通过 SOCKS 服务器对请求进行路由。 路由条目有两种类型,即 SOCKS v5 路由和 SOCKS v5 代理路由。
  • SOCKS v5 路由用于确定 SOCKS 守护程序应对特定的 IP 地址使用哪个接口。
  • SOCKS v5 代理路由用于确定可通过其他 SOCKS 服务器访问的 IP 地址,以及该 SOCKS 服务器是否与主机直接相连。通过 SOCKS 服务器进行路由时,代理路由很重要。

Procedure创建路由条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 在 "Routing" 部分中,单击 "Add" 按钮。
  4. 在 "Host Mask" 字段中,键入与传入和传出连接必须经过的指定接口相对应的 IP 地址或主机名。
    如果键入的是 IP 地址,地址后面应跟一个正斜杠以及要应用于传入 IP 地址的掩码。SOCKS 服务器会将此掩码应用于 IP 地址,以确定其是否为有效主机。请勿在主机掩码条目中使用空格。如果不提供主机掩码,SOCKS v5 条目将适用于所有主机。
    例如,可在 "Host Mask" 字段中键入 155.25.0.0/255.255.0.0。如果主机的 IP 地址是 155.25.3.5,则 SOCKS 服务器会将该掩码应用于此 IP 地址,并确定主机的 IP 地址是否与路由条目所请求的 IP 地址 (155.25.0.0) 匹配。
  5. 在 "Port Range" 字段中,键入与传入和传出连接必须经过的指定接口相对应的端口。端口范围中不应包含任何空格。
    如果不指定端口范围,SOCKS v5 条目将适用于所有端口。
    可以使用方括号 [ ] 包括范围两端的端口,也可使用圆括号 ( ) 将它们排除在外。例如,[1000-1010] 表示 1000 和 1010 之间包括 1000 和 1010 在内的所有端口号,而 (1000-1010) 表示 1000 和 1010 之间不包括 1000 和 1010 在内的所有端口号。另外,也可以混合使用方括号和圆括号。例如,(1000-1010] 表示 1000 和 1010 之间不包括 1000 但包括 1010 在内的所有端口号。
  6. 在 "Interface/Address" 字段中,键入传入和传出连接必须经过的接口的 IP 地址或名称。
  7. 从 "Insert" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。
    由于可以采用多种路由方法,因此必须指定对这些方法的评估顺序。

    注 – 传入和传出连接都应使用指定的接口,否则,传入路由将不同于所配置的接口并会收到错误消息。

Procedure创建代理路由条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 在 "Proxy Routing" 部分中,单击 "Add" 按钮。
  4. 从 "Proxy Type" 下拉式列表中,选择通过其进行路由的 Proxy Server 的类型。可以使用以下选项:
    • SOCKS v5 
      • SOCKS v4 
      • Direct connection 
  5. 在 "Destination Host Mask" 字段中,键入连接条目所请求的 IP 地址或主机名。
    如果键入的是 IP 地址,地址后面应跟一个正斜杠以及要应用于传入 IP 地址的掩码。SOCKS 服务器会将此掩码应用于目标计算机的 IP 地址,以确定其是否为有效的目标主机。请勿在主机掩码条目中使用空格。如果不提供目标主机掩码,连接条目将适用于所有主机。
    例如,可在 "Destination Host Mask" 字段中键入 155.25.0.0/255.255.0.0。如果目标主机的 IP 地址是 155.25.3.5,则 SOCKS 服务器会将该掩码应用于此 IP 地址,并确定目标主机的 IP 地址是否与代理条目所请求的 IP 地址 (155.25.0.0) 匹配。
  6. 在 "Destination Port Range" 字段中,键入代理条目所请求的目标主机的端口。
    请勿在端口范围条目中使用空格。如果不指定端口范围,代理条目将适用于所有端口。
    可以使用方括号 [ ] 包括范围两端的端口,也可使用圆括号 ( ) 将它们排除在外。例如,[1000-1010] 表示 1000 和 1010 之间包括 1000 和 1010 在内的所有端口号,而 (1000-1010) 表示 1000 和 1010 之间不包括 1000 和 1010 在内的所有端口号。另外,也可以混合使用方括号和圆括号。例如,(1000-1010] 表示 1000 和 1010 之间不包括 1000 但包括 1010 在内的所有端口号。
  7. 在 "Destination Proxy Address" 字段中,键入要使用的 Proxy Server 的主机名或 IP 地址。
  8. 在 "Destination Proxy Port" 字段中,键入 Proxy Server 对于 SOCKS 请求将要侦听的端口号。
  9. 从 "Insert" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。
    由于可以采用多种路由方法,因此必须指定对这些方法的评估顺序。

Procedure编辑路由条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 选择要编辑的条目。
  4. 单击 "Edit" 按钮。
  5. 根据需要进行更改。
  6. 单击 "OK"。

Procedure删除路由条目

  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 选择要删除的条目。
  4. 单击 "Delete" 按钮。

Procedure移动路由条目

条目按其在 socks5.conf 文件中出现的顺序进行评估。可以通过移动来更改其顺序。
  1. 访问服务器实例的 Server Manager 并单击 "SOCKS" 选项卡。
  2. 单击 "Set SOCKS v5 Routing" 链接。
  3. 选择要移动的条目。
  4. 单击 "Move" 按钮。
  5. 从 "Move" 下拉式列表中,选择此条目在 socks5.conf 文件中的位置,然后单击 "OK"。

    from http://docs.oracle.com/cd/E19438-01/820-6317/adyqa/index.html 
发表评论