<?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-06" category="historic" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="SOCKS4 SPEC">SOCKS Protocol Version 4</title>
    <seriesInfo name="Internet-Draft" value="draft-vance-socks-v4-06"/>
    <author fullname="Daniel James Vance">
      <organization>Independent</organization>
      <address>
        <email>djvanc@outlook.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="11"/>
    <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>
        <t>When the DSTIP field is 0.0.0.1, which the protocol SOCKSv4a (See <xref target="socks-protocol-version-4a"/>) uses for a client wishes to connect using a domain name instead of an IP address, SOCKSv4 implementations <bcp14>SHOULD</bcp14> treat the the DSTIP field 0.0.0.1 as a normal DSTIP value and treat the following messages as the specification.</t>
      </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 225?>

<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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
Tmh2MhtTAAA=

-->

</rfc>
