<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-vance-socks-v4-07" category="historic" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="SOCKS4">SOCKS Protocol Version 4</title>
    <seriesInfo name="Internet-Draft" value="draft-vance-socks-v4-07"/>
    <author fullname="Daniel James Vance">
      <organization>Independent</organization>
      <address>
        <email>djvanc@outlook.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="15"/>
    <abstract>
      <?line 48?>

<t>This document describes SOCKS version 4, a protocol designed to facilitate TCP proxy services across a network firewall. SOCKS operates at the session layer, providing application users with transparent access to network services on the other side of the firewall. It is application-protocol independent, allowing it to support a wide range of services, including those utilizing encryption, while maintaining minimum processing overhead by simply relaying data after initial access control checks. The protocol defines two primary operations: CONNECT for establishing outbound connections to an application server, and BIND for preparing for and accepting inbound connections initiated by an application server.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/4socks/socks4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The SOCKS protocol, Version 4 (SOCKSv4), <bcp14>SHALL</bcp14> be used to relay TCP sessions between an application client and an an application server via a SOCKS server, often positioned at a firewall host. The protocol <bcp14>MUST</bcp14> provide transparent access across the firewall for application users.</t>
      <t>The protocol <bcp14>MUST</bcp14> be application-protocol independent, allowing it to be used for various services, including, but not limited to, telnet, ftp, finger, whois, gopher, and WWW (World Wide Web).</t>
      <t>The SOCKS server <bcp14>MUST</bcp14> apply access control mechanisms at the beginning of each TCP session. Following successful establishment, the SOCKS server <bcp14>MUST</bcp14> simply relay data between the client and the application server, incurring minimum processing overhead. The protocol inherently supports applications utilizing encryption, as the SOCKS server is not required to interpret the application protocol's payload.</t>
      <t>Two primary operations are defined: CONNECT and BIND.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This specification uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>Client (Application Client): The program requesting a connection to an application server through the SOCKS server.</t>
        </li>
        <li>
          <t>SOCKS Server: The host, typically at a firewall, that intermediates the connection between the Client and the Application Server.</t>
        </li>
        <li>
          <t>Application Server: The host to which the Client ultimately wishes to connect (e.g., a Telnet daemon, an HTTP server).</t>
        </li>
        <li>
          <t>TCP Session: A connection established using the Transmission Control Protocol (TCP). SOCKSv4 only supports TCP sessions.</t>
        </li>
        <li>
          <t>DSTIP (Destination IP): The IP address of the Application Server, as specified in the SOCKS request.</t>
        </li>
        <li>
          <t>DSTPORT (Destination Port): The port number of the Application Server, as specified in the SOCKS request.</t>
        </li>
        <li>
          <t>USERID: A variable-length, NULL-terminated string identifying the client's user on the local system.</t>
        </li>
        <li>
          <t>NULL: A byte of all zero bits, used to terminate the USERID field.</t>
        </li>
        <li>
          <t>IDENT: A protocol (as described in RFC 1413) used by the SOCKS server to verify the user identity of the client.</t>
        </li>
      </ul>
    </section>
    <section anchor="connect-operation">
      <name>CONNECT Operation</name>
      <t>The client <bcp14>MUST</bcp14> initiate a CONNECT request when it desires to establish an outbound TCP connection to an application server.</t>
      <section anchor="connect-request-packet-format">
        <name>CONNECT Request Packet Format</name>
        <t>The client <bcp14>MUST</bcp14> send a request packet with the following structure:</t>
        <table>
          <name>CONNECT Request Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="left">USERID</td>
              <td align="left">User ID</td>
              <td align="center">variable</td>
            </tr>
            <tr>
              <td align="left">NULL</td>
              <td align="left">Null Terminator</td>
              <td align="center">1</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN (Version Number): <bcp14>MUST</bcp14> be 4, representing the SOCKS protocol version.</t>
          </li>
          <li>
            <t>CD (Command Code): <bcp14>MUST</bcp14> be 1, indicating a CONNECT request.</t>
          </li>
          <li>
            <t>DSTPORT (Destination Port): The port number of the application server (network byte order).</t>
          </li>
          <li>
            <t>DSTIP (Destination IP): The IP address of the application server (network byte order).</t>
          </li>
          <li>
            <t>USERID (User Identifier): A string of characters representing the client's user ID.</t>
          </li>
          <li>
            <t>NULL: A single byte with a value of all zero bits, terminating the USERID field.</t>
          </li>
        </ul>
      </section>
      <section anchor="connect-processing-and-reply">
        <name>CONNECT Processing and Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> determine whether to grant the request based on criteria such as the source IP address, DSTIP, DSTPORT, USERID, and information obtained via IDENT (cf. RFC 1413).</t>
        <t>If the request is granted, the SOCKS server <bcp14>MUST</bcp14> attempt to establish a TCP connection to the specified DSTPORT on the DSTIP.</t>
        <t>A reply packet <bcp14>MUST</bcp14> be sent to the client upon the establishment of the connection, rejection of the request, or operational failure.</t>
        <section anchor="interpretation-of-special-dstip-values">
          <name>Interpretation of Special DSTIP Values</name>
          <t>To ensure compatibility with widespread protocol extensions (notably SOCKSv4a), implementations <bcp14>MUST</bcp14> adhere to the following logic regarding the DSTIP field:</t>
          <ul spacing="normal">
            <li>
              <t>If the first three octets of the DSTIP are zero and the fourth octet is non-zero (the range 0.0.0.x), the SOCKS server <bcp14>MUST NOT</bcp14> attempt to establish a TCP connection to this literal IP address.</t>
            </li>
            <li>
              <t>A SOCKSv4 server without SOCKSv4a support <bcp14>MUST</bcp14> treat such a DSTIP as an unreachable destination and return a reply with CD = 91. An implementation conforming to this protocol <bcp14>MUST NOT</bcp14> process any octets encountered after the initial NULL octet that terminates the USERID field.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="connect-reply-packet-format">
        <name>CONNECT Reply Packet Format</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> send a reply packet with the following structure:</t>
        <table>
          <name>CONNECT Reply Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN: <bcp14>MUST</bcp14> be 0, representing the reply version code.</t>
          </li>
          <li>
            <t>CD (Result Code): The SOCKS server <bcp14>MUST</bcp14> use one of the following values:</t>
          </li>
        </ul>
        <table anchor="socks-version-4-reply-codes">
          <name>Result Codes</name>
          <thead>
            <tr>
              <th align="left">Reply Code</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">90</td>
              <td align="left">Request granted (Connection successful).</td>
            </tr>
            <tr>
              <td align="left">91</td>
              <td align="left">Request rejected or failed.</td>
            </tr>
            <tr>
              <td align="left">92</td>
              <td align="left">Request rejected due to inability to connect to <tt>identd</tt> on the client.</td>
            </tr>
            <tr>
              <td align="left">93</td>
              <td align="left">Request rejected because the client program and <tt>identd</tt> report different user-IDs.</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>DSTPORT and DSTIP: These fields <bcp14>MUST</bcp14> be ignored by the client in a CONNECT reply.</t>
          </li>
        </ul>
        <t>If the request is rejected or failed (CD != 90), the SOCKS server <bcp14>MUST</bcp14> close its connection to the client immediately after sending the reply.</t>
        <t>If the request is successful (CD = 90), the SOCKS server <bcp14>MUST</bcp14> immediately begin relaying traffic in both directions between the client connection and the established application server connection. The client <bcp14>MUST</bcp14> then treat its connection to the SOCKS server as if it were a direct connection to the application server.</t>
      </section>
    </section>
    <section anchor="bind-operation">
      <name>BIND Operation</name>
      <t>The client <bcp14>MUST</bcp14> initiate a BIND request when it requires the SOCKS server to prepare for an inbound connection from an application server. This operation is typically used for protocols that involve a secondary data connection originating from the server (e.g., FTP's active mode). A BIND request <bcp14>SHOULD</bcp14> only be sent after a primary connection to the application server has been successfully established using a CONNECT request.</t>
      <section anchor="bind-request-packet-format">
        <name>BIND Request Packet Format</name>
        <t>The client <bcp14>MUST</bcp14> send a request packet identical in format to the CONNECT request:</t>
        <table anchor="socks-version-4-request-format">
          <name>BIND Request Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number (must be 4)</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code (1 for CONNECT, 2 for BIND)</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port (Network Byte Order)</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="left">USERID</td>
              <td align="left">User ID (String of Octets)</td>
              <td align="center">variable</td>
            </tr>
            <tr>
              <td align="left">NULL</td>
              <td align="left">Null Terminator (0x00)</td>
              <td align="center">1</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN: <bcp14>MUST</bcp14> be 4.</t>
          </li>
          <li>
            <t>CD: <bcp14>MUST</bcp14> be 2, indicating a BIND request.</t>
          </li>
          <li>
            <t>DSTPORT: The port number of the primary connection to the application server.</t>
          </li>
          <li>
            <t>DSTIP: The IP address of the application server.</t>
          </li>
          <li>
            <t>USERID and NULL: As defined for the CONNECT request.</t>
          </li>
        </ul>
      </section>
      <section anchor="bind-first-reply">
        <name>BIND First Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> first decide whether to grant the BIND request. The reply format <bcp14>MUST</bcp14> be the same as the CONNECT reply format.</t>
        <t>If the request is rejected (CD != 90), the SOCKS server <bcp14>MUST</bcp14> close its connection to the client immediately.</t>
        <t>If the request is granted (CD = 90):</t>
        <ul spacing="normal">
          <li>
            <t>The SOCKS server <bcp14>MUST</bcp14> obtain a local socket and begin listening for an incoming connection.</t>
          </li>
          <li>
            <t>The SOCKS server <bcp14>MUST</bcp14> send a first reply packet in which the DSTPORT and DSTIP fields are meaningful: DSTPORT <bcp14>MUST</bcp14> contain, in network byte order, the port number of the newly listening socket, and DSTIP <bcp14>MUST</bcp14> contain, in network byte order, the IP address of the SOCKS server's listening interface.</t>
          </li>
          <li>
            <t>If the SOCKS server returns a DSTIP of 0 (the value of constant 'INADDR_ANY'), the client <bcp14>MUST</bcp14> replace this value with the IP address of the SOCKS server to which the client is currently connected.</t>
          </li>
          <li>
            <t>The client <bcp14>MUST</bcp14> use this IP address and port to inform the application server via the primary connection, enabling the application server to initiate the anticipated inbound connection to the SOCKS server.</t>
          </li>
        </ul>
      </section>
      <section anchor="bind-second-reply">
        <name>BIND Second Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> send a second reply packet to the client once the anticipated inbound connection from the application server is established. The reply format <bcp14>MUST</bcp14> be the same as the first reply.</t>
        <t>The SOCKS server <bcp14>MUST</bcp14> check the IP address of the newly connected application server host against the DSTIP value specified in the client's original BIND request.</t>
        <ul spacing="normal">
          <li>
            <t>If the IP addresses match: The CD field in the second reply <bcp14>MUST</bcp14> be set to 90. The SOCKS server <bcp14>MUST</bcp14> then prepare to relay traffic between the client connection and the new application server connection.</t>
          </li>
          <li>
            <t>If a mismatch is found: The CD field in the second reply <bcp14>MUST</bcp14> be set to 91. The SOCKS server <bcp14>MUST</bcp14> immediately close both the client connection and the connection from the application server.</t>
          </li>
        </ul>
        <t>Upon a successful second reply, the client <bcp14>MUST</bcp14> perform I/O on its connection to the SOCKS server as if it were directly connected to the application server.</t>
      </section>
    </section>
    <section anchor="timeout-mechanism">
      <name>Timeout Mechanism</name>
      <t>For both CONNECT and BIND operations, the SOCKS server <bcp14>MUST</bcp14> employ a time limit for the establishment of its connection with the application server (e.g., 2 minutes). If the connection is not established before the time limit expires, the SOCKS server <bcp14>MUST</bcp14> close its connection to the client and abort the operation.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>See <xref target="security-analysis"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>No IANA actions required.</t>
      <t>See <xref target="existing-values"/> for the existing values used within the protocol.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1413">
          <front>
            <title>Identification Protocol</title>
            <author fullname="M. St. Johns" initials="M." surname="St. Johns"/>
            <date month="February" year="1993"/>
            <abstract>
              <t>The Identification Protocol was formerly called the Authentication Server Protocol. It has been renamed to better reflect its function. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1413"/>
          <seriesInfo name="DOI" value="10.17487/RFC1413"/>
        </reference>
        <reference anchor="SOCKS4" target="https://www.openssh.org/txt/socks4.protocol">
          <front>
            <title>SOCKS: A protocol for TCP proxy across firewalls</title>
            <author initials="Y.-D." surname="Lee" fullname="Ying-Da Lee">
              <organization>NEC Systems Laboratory, CSTC</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SOCKS">
          <front>
            <title>SOCKS</title>
            <author initials="D." surname="Koblas" fullname="David Koblas">
              <organization>Netskope</organization>
            </author>
            <date year="1992"/>
          </front>
          <seriesInfo name="1992 Usenix Security Symposium" value=""/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC791">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="RFC1928">
          <front>
            <title>SOCKS Protocol Version 5</title>
            <author fullname="M. Leech" initials="M." surname="Leech"/>
            <author fullname="M. Ganis" initials="M." surname="Ganis"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="R. Kuris" initials="R." surname="Kuris"/>
            <author fullname="D. Koblas" initials="D." surname="Koblas"/>
            <author fullname="L. Jones" initials="L." surname="Jones"/>
            <date month="March" year="1996"/>
            <abstract>
              <t>This memo describes a protocol that is an evolution of the previous version of the protocol, version 4 [1]. This new protocol stems from active discussions and prototype implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1928"/>
          <seriesInfo name="DOI" value="10.17487/RFC1928"/>
        </reference>
        <reference anchor="RFC1929">
          <front>
            <title>Username/Password Authentication for SOCKS V5</title>
            <author fullname="M. Leech" initials="M." surname="Leech"/>
            <date month="March" year="1996"/>
            <abstract>
              <t>The protocol specification for SOCKS Version 5 specifies a generalized framework for the use of arbitrary authentication protocols in the initial socks connection setup. This document describes one of those protocols, as it fits into the SOCKS Version 5 authentication "subnegotiation". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1929"/>
          <seriesInfo name="DOI" value="10.17487/RFC1929"/>
        </reference>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC3365">
          <front>
            <title>Strong Security Requirements for Internet Engineering Task Force Standard Protocols</title>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <date month="August" year="2002"/>
          </front>
          <seriesInfo name="BCP" value="61"/>
          <seriesInfo name="RFC" value="3365"/>
          <seriesInfo name="DOI" value="10.17487/RFC3365"/>
        </reference>
        <reference anchor="SOCKS4a" target="https://www.openssh.org/txt/socks4a.protocol">
          <front>
            <title>SOCKS 4A: A  Simple Extension to SOCKS 4 Protocol</title>
            <author initials="Y.-D." surname="Lee" fullname="Ying-Da Lee">
              <organization>NEC Systems Laboratory, CSTC</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 231?>

<section anchor="common-operational-extensions">
      <name>Common Operational Extensions</name>
      <t>The content of this appendix is Informative, not Normative. It describes extensions and interpretations of the SOCKSv4 protocol that have been widely adopted in practical deployments and client implementations to enhance functionality and compatibility.</t>
      <section anchor="socks-protocol-version-4a">
        <name>SOCKS Protocol Version 4A</name>
        <t>The SOCKSv4 protocol originally required the client to resolve the target domain name before sending the request. As this is impractical in many environments, the SOCKSv4a protocol was widely adopted to allow the SOCKS server to perform domain name resolution.</t>
        <t>SOCKSv4a, though share a same version number with SOCKSv4, is treated as a complete independent protocol here. The specification will be published elsewhere. The content below is just a simple summary of SOCKSv4a, and it should never be treated as a Normative standard.</t>
        <t>Clients using this protocol must follow these rules:</t>
        <section anchor="socksv4a-request-format">
          <name>SOCKSv4a Request Format</name>
          <t>When a client wishes to connect using a domain name instead of an IP address, the request format follows the CONNECT/BIND format, but with modifications to DSTIP and the end of the request:</t>
          <table>
            <name>SOCKSv4a Request Format</name>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Description</th>
                <th align="left">Size (bytes)</th>
                <th align="left">SOCKSv4a Usage</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">VN</td>
                <td align="left">Version Number (4)</td>
                <td align="left">1</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">CD</td>
                <td align="left">Command Code (1 or 2)</td>
                <td align="left">1</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">DSTPORT</td>
                <td align="left">Destination Port</td>
                <td align="left">2</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">DSTIP</td>
                <td align="left">Destination IP Address</td>
                <td align="left">4</td>
                <td align="left">
                  <bcp14>MUST</bcp14> be set to 0.0.0.1 (0x00000001).</td>
              </tr>
              <tr>
                <td align="left">USERID</td>
                <td align="left">User ID</td>
                <td align="left">variable</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">NULL</td>
                <td align="left">Null Terminator (0x00)</td>
                <td align="left">1</td>
                <td align="left">Terminates USERID.</td>
              </tr>
              <tr>
                <td align="left">DOMAIN</td>
                <td align="left">Target Domain Name</td>
                <td align="left">variable</td>
                <td align="left">New field: Null-terminated string.</td>
              </tr>
              <tr>
                <td align="left">NULL</td>
                <td align="left">Final Null Terminator</td>
                <td align="left">1</td>
                <td align="left">New field: Terminates DOMAIN.</td>
              </tr>
            </tbody>
          </table>
          <t>A SOCKSv4a client, when sending a request, must append the target domain name string after the NULL terminator of USERID, and terminate the entire request with a second NULL byte.</t>
        </section>
        <section anchor="socksv4a-server-processing">
          <name>SOCKSv4a Server Processing</name>
          <t>When a SOCKSv4a server receives a request where the DSTIP field is 0.0.0.1, it <bcp14>MUST</bcp14> perform the following actions:</t>
          <ol spacing="normal" type="1"><li>
              <t>Treat 0.0.0.1 as a special signal and <bcp14>MUST NOT</bcp14> attempt to connect to this IP address.</t>
            </li>
            <li>
              <t>Start reading data after the USERID's NULL terminator, interpreting it as the target domain name string (DOMAIN), until the next NULL terminator is encountered.</t>
            </li>
            <li>
              <t>The server <bcp14>MUST</bcp14> attempt to resolve this domain name.</t>
            </li>
            <li>
              <t>If resolution is successful, the server attempts to connect to the obtained IP address. If the connection succeeds, it replies 90. If the connection fails, it replies 91.</t>
            </li>
            <li>
              <t>If resolution fails, the server <bcp14>MUST</bcp14> reply 91 and close the connection.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="use-of-dstipdstport-in-bind-requests-for-access-control">
        <name>Use of DSTIP/DSTPORT in BIND Requests for Access Control</name>
        <t>Although DSTIP and DSTPORT in the BIND request are intended to identify the application server, many SOCKS server and firewall implementations use them as an Access Control List (ACL) for the inbound connection.</t>
        <ul spacing="normal">
          <li>
            <t>DSTIP as Source Address Restriction: The server strictly requires the IP address of the inbound connection to <bcp14>MUST</bcp14> match the DSTIP specified in the BIND request.</t>
          </li>
          <li>
            <t>DSTPORT as Source Port Restriction (less common): Some implementations may attempt to verify that the source port of the inbound connection matches the DSTPORT in the BIND request. Since the source port of an application server is usually randomly allocated by the operating system, this usage is generally considered unreliable or misleading and is ignored in most implementations.</t>
          </li>
        </ul>
        <t>When initiating a BIND request, a client <bcp14>SHOULD</bcp14> ensure that DSTIP is the address of the application server it expects to receive the connection from, to improve compatibility.</t>
      </section>
      <section anchor="explanation-of-timeout-mechanism">
        <name>Explanation of Timeout Mechanism</name>
        <t>As mandated by Section 5, the SOCKS server <bcp14>MUST</bcp14> employ time limits. In common implementations, timeouts usually trigger under the following circumstances:</t>
        <ul spacing="normal">
          <li>
            <t>CONNECT Timeout: The server is unable to establish a connection with DSTIP:DSTPORT within the specified time.</t>
          </li>
          <li>
            <t>Timeout after the first BIND reply: After the SOCKS server successfully binds the listening socket (sent the first 90 reply), but fails to receive an inbound connection from the application server within the specified time.</t>
          </li>
        </ul>
        <t>When a timeout occurs, the server <bcp14>MUST</bcp14> immediately close the connection with the client and abort all pending network operations.</t>
      </section>
    </section>
    <section anchor="security-analysis">
      <name>Security Analysis</name>
      <t>The SOCKS Version 4 (SOCKSv4) protocol, designed exclusively for TCP proxy traversal across network firewalls, is fundamentally weak from a security perspective as it operates solely at the session layer and lacks intrinsic security mechanisms. Any deployment of SOCKSv4 must be critically assessed against its inherent deficiencies.</t>
      <section anchor="authentication-and-authorization-deficiencies">
        <name>Authentication and Authorization Deficiencies</name>
        <t>SOCKSv4's client identification relies on the USERID field, often intended for use with the IDENT protocol (specified in RFC 1413). This reliance constitutes a major security risk because the IDENT protocol depends on an untrusted daemon on the client host, making the identification process susceptible to trivial spoofing or malicious disabling. Crucially, SOCKSv4 entirely lacks integrated provisions for strong client-to-server or server-to-client authentication, offering no mechanisms for verifying user credentials, passwords, or employing cryptographic challenge-response methods. Consequently, access control (authorization) is managed exclusively by the SOCKS server's local configuration and security policy. A failure in the server's policy or configuration directly risks granting unauthorized network access across the protective boundary of the firewall.</t>
      </section>
      <section anchor="data-integrity-and-transport-limitations">
        <name>Data Integrity and Transport Limitations</name>
        <t>SOCKSv4 does not incorporate any encryption capabilities for the application data stream. As a session layer relay, it forwards all application traffic, including sensitive data, in plaintext. This inherent vulnerability exposes all transmitted data to passive network eavesdropping and interception, resulting in a total absence of confidentiality. Furthermore, the protocol’s operational scope is strictly confined to proxying Transmission Control Protocol (TCP) connections. It provides no native support for the relay of User Datagram Protocol (UDP) traffic or other IP-layer protocols, limiting its utility and scope of protection.</t>
      </section>
      <section anchor="vulnerabilities-associated-with-the-bind-operation">
        <name>Vulnerabilities Associated with the BIND Operation</name>
        <t>The BIND command, used for establishing a socket for an anticipated inbound connection (a callback) from an application server, introduces distinct security challenges. The SOCKS server attempts a rudimentary security check by comparing the source IP address of the incoming connection with the target address (DSTIP) specified in the client's request. However, a malicious actor can easily forge the source IP address of the inbound connection, potentially bypassing this basic server check and facilitating an unauthorized session. Moreover, in network topologies employing Network Address Translation (NAT) or Port Address Translation (PAT), the source IP address is structurally altered, rendering the BIND source address verification mechanism unreliable, ineffectual, or operationally complex to maintain.</t>
      </section>
      <section anchor="denial-of-service-vector">
        <name>Denial of Service Vector</name>
        <t>Every successful SOCKS connection consumes finite server resources, including active sockets, allocated memory, and network bandwidth. A direct vector for a Denial of Service attack exists where a malicious client can exploit this resource consumption by initiating a large volume of connection attempts, particularly through the resource-intensive BIND operation, to rapidly exhaust the SOCKS server’s capacity. Although the protocol specifies a basic connection establishment timeout mechanism (2 minutes), this measure is entirely insufficient in scope and rigor to fully mitigate the risks associated with sophisticated DoS attacks.</t>
      </section>
      <section anchor="recommended-mitigation-and-deployment-practices">
        <name>Recommended Mitigation and Deployment Practices</name>
        <t>Given SOCKSv4's security deficiencies, its deployment should be strictly limited to environments designated as highly trusted and subject to stringent local policy control. Where SOCKSv4 must transport sensitive application traffic, the protocol must be encapsulated within an existing secure transport layer, such as a Transport Layer Security (TLS/SSL) or IPsec tunnel, to establish the essential confidentiality and integrity mechanisms that SOCKSv4 lacks. Operators should actively plan for migration to SOCKS Version 5 (RFC 1928), which incorporates native, robust authentication methods.</t>
      </section>
    </section>
    <section anchor="existing-values">
      <name>Existing Values</name>
      <t>The existing values used within the protocol are summarized below:</t>
      <section anchor="socks-protocol-version-number">
        <name>SOCKS Protocol Version Number</name>
        <ul spacing="normal">
          <li>
            <t>The SOCKS protocol version number <tt>VN</tt> in requests is 4 (0x04).</t>
          </li>
          <li>
            <t>The SOCKS protocol version number <tt>VN</tt> in replies is 0 (0x00).</t>
          </li>
        </ul>
      </section>
      <section anchor="socks-command-code">
        <name>SOCKS Command Code</name>
        <t>The SOCKS command code <tt>CD</tt> in requests defines two values:</t>
        <ul spacing="normal">
          <li>
            <t>1 (0x01): CONNECT</t>
          </li>
          <li>
            <t>2 (0x02): BIND</t>
          </li>
        </ul>
      </section>
      <section anchor="socks-reply-code">
        <name>SOCKS Reply Code</name>
        <t>The SOCKS reply code <tt>CD</tt> in replies defines four values:</t>
        <ul spacing="normal">
          <li>
            <t>90 (0x5A): Request granted</t>
          </li>
          <li>
            <t>91 (0x5B): Request rejected or failed</t>
          </li>
          <li>
            <t>92 (0x5C): Request rejected because SOCKS server cannot connect to <tt>identd</tt> on the client</t>
          </li>
          <li>
            <t>93 (0x5D): Request rejected because the client program and <tt>identd</tt> report different user-ids</t>
          </li>
        </ul>
      </section>
      <section anchor="port-number">
        <name>Port Number</name>
        <t>The SOCKS protocol is conventionally known to use TCP port 1080 for its service. This port number has already been registered in the IANA Service Name and Transport Protocol Port Number Registry for the <tt>socks</tt> service.</t>
      </section>
    </section>
    <section numbered="false" anchor="original-author">
      <name>Original Author</name>
      <artwork><![CDATA[
      Ying-Da Lee
      Principal Member Technical Staff
      NEC Systems Laboratory, CSTC
      ylee@syl.dl.nec.com

      David Koblas
      Netskope
]]></artwork>
      <t>We sincerely apologize that, due to the document's long history and the passage of time, many early contributors may not have been formally included in this list. We extend our deepest gratitude to all who have contributed to this work. If you believe your name should be added to the acknowledgments, please contact the draft maintainers.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
7wT1qJdfVva/pp2yhHtUAAA=

-->

</rfc>
