41 lines
1.8 KiB
Plaintext
41 lines
1.8 KiB
Plaintext
SOCKS 4A: A Simple Extension to SOCKS 4 Protocol
|
|
|
|
Ying-Da Lee
|
|
yingda@best.com or yingda@esd.sgi.com
|
|
|
|
Please read SOCKS4.protocol first for an description of the version 4
|
|
protocol. This extension is intended to allow the use of SOCKS on hosts
|
|
which are not capable of resolving all domain names.
|
|
|
|
In version 4, the client sends the following packet to the SOCKS server
|
|
to request a CONNECT or a BIND operation:
|
|
|
|
+----+----+----+----+----+----+----+----+----+----+....+----+
|
|
| VN | CD | DSTPORT | DSTIP | USERID |NULL|
|
|
+----+----+----+----+----+----+----+----+----+----+....+----+
|
|
# of bytes: 1 1 2 4 variable 1
|
|
|
|
VN is the SOCKS protocol version number and should be 4. CD is the
|
|
SOCKS command code and should be 1 for CONNECT or 2 for BIND. NULL
|
|
is a byte of all zero bits.
|
|
|
|
For version 4A, if the client cannot resolve the destination host's
|
|
domain name to find its IP address, it should set the first three bytes
|
|
of DSTIP to NULL and the last byte to a non-zero value. (This corresponds
|
|
to IP address 0.0.0.x, with x nonzero. As decreed by IANA -- The
|
|
Internet Assigned Numbers Authority -- such an address is inadmissible
|
|
as a destination IP address and thus should never occur if the client
|
|
can resolve the domain name.) Following the NULL byte terminating
|
|
USERID, the client must sends the destination domain name and termiantes
|
|
it with another NULL byte. This is used for both CONNECT and BIND requests.
|
|
|
|
A server using protocol 4A must check the DSTIP in the request packet.
|
|
If it represent address 0.0.0.x with nonzero x, the server must read
|
|
in the domain name that the client sends in the packet. The server
|
|
should resolve the domain name and make connection to the destination
|
|
host if it can.
|
|
|
|
SOCKSified sockd may pass domain names that it cannot resolve to
|
|
the next-hop SOCKS server.
|
|
|