// This file is asciidoc source code.
// To generate manpages, use the a2x command i.e.
// a2x --no-xmllint -d manpage -f manpage meek-client.1.txt
// see http://www.methods.co.nz/asciidoc/userguide.html#X1
MEEK-CLIENT(1)
==============

NAME
----
meek-client - The meek client transport plugin

SYNOPSIS
--------
**meek-client** [__OPTIONS__]

DESCRIPTION
-----------
meek-client is a transport plugin for Tor that encodes a stream as a
sequence of HTTP requests and responses. It has a **url** option to
control what destination server requests are directed to, and a
**front** option for domain name camouflage: The domain name in the
URL is replaced by the front domain before the request is made, but the
Host header inside the HTTP request still points to the original domain.
The idea is to front through a domain that is not blocked to a domain
that is blocked.

CONFIGURATION
-------------

Configuration for meek-client usually happens in a torrc file.

Per-bridge options are configured with SOCKS args
(key=value pairs in a Bridge line).
The possible SOCKS args are:

**url**=__URL__ (required)::
    The URL of a meek-server instance.
    The domain name component will typically be hidden
    by the value in the **front** arg.
**front**=__DOMAIN__::
    Front domain name.
    If provided, this domain name will replace the domain name
    of **url** in the DNS request and TLS SNI field.
    The URL's true domain name will still appear in the Host header
    of HTTP requests.
**utls**=__CLIENTHELLOID__::
+
--
Use the https://github.com/refraction-networking/utls[uTLS library]
with the named TLS fingerprint for TLS camouflage.
This arg is incompatible with the **--helper** command line option.
The possible values of __CLIENTHELLOID__ are:

- HelloRandomizedALPN
- HelloRandomizedNoALPN
- HelloFirefox_55
- HelloFirefox_56
- HelloFirefox_63
- HelloFirefox_65
- HelloFirefox_99
- HelloFirefox_102
- HelloFirefox_105
- HelloFirefox_Auto = HelloFirefox_105
- HelloChrome_58
- HelloChrome_62
- HelloChrome_70
- HelloChrome_72
- HelloChrome_83
- HelloChrome_87
- HelloChrome_96
- HelloChrome_100
- HelloChrome_102
- HelloChrome_Auto = HelloChrome_102
- HelloIOS_11_1
- HelloIOS_12_1
- HelloIOS_13
- HelloIOS_14
- HelloIOS_Auto = HelloIOS_14
- HelloEdge_85
- HelloEdge_Auto = HelloEdge_85
- HelloSafari_16_0
- HelloSafari_Auto = HelloSafari_16_0
- Hello360_7_5
- Hello360_Auto = Hello360_7_5
- HelloQQ_11_1
- HelloQQ_Auto = HelloQQ_11_1

As a special case, the values "none" and "HelloGolang"
are recognized as aliases for
omitting the **utls** SOCKS arg; i.e., use native Go TLS.
--

For backward compatibility, each SOCKS arg also has an equivalent
command line option.
For example, this configuration using SOCKS args:
----
Bridge meek 0.0.2.0:1 url=https://forbidden.example/ front=allowed.example
ClientTransportPlugin meek exec ./meek-client
----
is the same as this one using command line options:
----
Bridge meek 0.0.2.0:1
ClientTransportPlugin meek exec ./meek-client --url=https://forbidden.example/ --front=allowed.example
----
SOCKS args are preferred over command line options because they
allow you to have multiple Bridge lines with different settings.
If a SOCKS arg and a command line option are both given for the same setting,
the SOCKS arg takes precedence.

The global **--helper** option prevents meek-client from doing any network
operations itself. Rather, it will send all requests through a browser
extension, which must be set up separately.

A global proxy (applies to all Bridge lines)
can be configured using special torrc options:
----
Socks4Proxy localhost:1080
Socks5Proxy localhost:1080
Socks5ProxyUsername username
Socks5ProxyPassword password
HTTPSProxy localhost:8080
HTTPSProxyAuthenticator username:password
----
or, equivalently, using the **--proxy** command line option.
The command line option takes precedence.

When the **--helper** option is used, you can use proxies of type
http, socks4a, or socks5, but you cannot use a username or password with the proxy.
Without **--helper**, you can use proxies of type
http, https, or socks5, and you can optionally use a username and password.

OPTIONS
-------
**--front**=__DOMAIN__::
    Front domain name. Prefer using the **front** SOCKS arg
    on a bridge line over using this command line option.

**--helper**=__ADDRESS__::
    Address of HTTP helper browser extension. For example,
    **--helper=127.0.0.1:7000**.

**--proxy**=__URL__::
    URL of upstream proxy. For example,
    **--proxy=http://localhost:8080/**,
    **--proxy=socks4a://localhost:1080**, or
    **--proxy=socks5://localhost:1080**.
    Can also be configured using the
    **HTTPSProxy**, **Socks4Proxy**, or **Socks5Proxy**
    options in a torrc file.

**--log**=__FILENAME__::
    Name of a file to write log messages to (default stderr).

**--url**=__URL__::
    URL to correspond with. Prefer using the **url** SOCKS arg
    on a bridge line over using this command line option.

**--utls**=__CLIENTHELLOID__::
    Use uTLS with the given TLS fingerprint for TLS camouflage.
    This option is incompatible with **--helper**.
    Prefer using the **utls** SOCKS arg over using this command line option.

**-h**, **--help**::
    Display a help message and exit.

SEE ALSO
--------
**https://trac.torproject.org/projects/tor/wiki/doc/meek**

BUGS
----
Please report at **https://trac.torproject.org/projects/tor**.
