<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-vance-socks-v4-04" 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 Specification</title>
    <seriesInfo name="Internet-Draft" value="draft-vance-socks-v4-04"/>
    <author fullname="Daniel James Vance">
      <organization>Independent</organization>
      <address>
        <email>djvanc@outlook.com</email>
      </address>
    </author>
    <date year="2025" month="November" day="15"/>
    <abstract>
      <?line 35?>

<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 40?>

<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>MUST</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-socket-assignment">
        <name>BIND First Reply (Socket Assignment)</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>
        <t>1. The SOCKS server <bcp14>MUST</bcp14> obtain a local socket and begin listening for an incoming connection.
2. The SOCKS server <bcp14>MUST</bcp14> send a first reply packet where the DSTPORT and DSTIP fields are meaningful:
    - DSTPORT <bcp14>MUST</bcp14> contain the port number of the newly listening socket (network byte order).
    - DSTIP <bcp14>MUST</bcp14> contain the IP address of the SOCKS server's listening interface (network byte order).
3.  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.
4.  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>
      </section>
      <section anchor="bind-second-reply-connection-established">
        <name>BIND Second Reply (Connection Established)</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">
          <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="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>
      </references>
    </references>
    <?line 214?>

<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 (Section 4.1) 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-dos-vector">
        <name>Denial of Service (DoS) 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-vn">
        <name>SOCKS Protocol Version Number (VN)</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-cd">
        <name>SOCKS Command Code (CD)</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-cd">
        <name>SOCKS Reply Code (CD)</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-auther">
      <name>Original Auther</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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
AAA=

-->

</rfc>
