diff options
Diffstat (limited to 'libpathod/templates/docs_pathoc.html')
| -rw-r--r-- | libpathod/templates/docs_pathoc.html | 270 | 
1 files changed, 145 insertions, 125 deletions
| diff --git a/libpathod/templates/docs_pathoc.html b/libpathod/templates/docs_pathoc.html index 76018530..d38c3a77 100644 --- a/libpathod/templates/docs_pathoc.html +++ b/libpathod/templates/docs_pathoc.html @@ -1,191 +1,211 @@ -{% extends "docframe.html" %} -{% block body %} +{% extends "docframe.html" %} {% block body %}  <div class="page-header"> -   <h1> +    <h1>          pathoc          <small>A perverse HTTP client.</small>      </h1>  </div> -<p>Pathoc is a perverse HTTP daemon designed to let you craft almost any -conceivable HTTP request, including ones that creatively violate the standards. -HTTP requests are specified using a <a href="/docs/language">small, terse -language</a>, which pathod shares with its server-side twin <a -href="/docs/pathod">pathod</a>. To view pathoc's complete range of options, use -the command-line help:</p> +<p> +    Pathoc is a perverse HTTP daemon designed to let you craft almost any conceivable +    HTTP request, including ones that creatively violate the standards. HTTP requests +    are specified using a +    <a href="/docs/language">small, terse language</a>, which pathod shares with +    its server-side twin <a href="/docs/pathod">pathod</a>. To view pathoc's complete +    range of options, use the command-line help: +</p> -    <pre class="terminal">pathoc --help</pre> +<pre class="terminal">pathoc --help</pre>  <section>      <div class="page-header"> -       <h1>Getting Started</h1> +        <h1>Getting Started</h1>      </div>      <p>The basic pattern for pathoc commands is as follows: </p>      <pre class="terminal">pathoc hostname request [request ...]</pre> -    <p>That is, we specify the hostname to connect to, followed by one or more -    requests. Lets start with a simple example:</p> - -    <pre class="terminal">> pathoc google.com get:/ -<< 301 Moved Permanently: 219 bytes</pre> - -    <p>Here, we make a GET request to the path / on port 80 of google.com. -    Pathoc's output tells us that the server responded with a 301. We can tell -    pathoc to connect using SSL, in which case the default port is changed to -    443 (you can over-ride the default port with the <b>-p</b> command-line -    option):</p> - -    <pre class="terminal">> pathoc -s google.com get:/ -<< 301 Moved Permanently: 219 bytes</pre> - +    <p> +        That is, we specify the hostname to connect to, followed by one or more requests. +        Lets start with a simple example: +    </p> + +    <pre class="terminal"> +        > pathoc google.com get:/ << 301 Moved Permanently: 219 bytes +    </pre> + +    <p> +        Here, we make a GET request to the path / on port 80 of google.com. Pathoc's output +        tells us that the server responded with a 301. We can tell pathoc to connect +        using SSL, in which case the default port is changed to 443 (you can over-ride +        the default port with the <b>-p</b> command-line option): +    </p> + +    <pre class="terminal"> +        > pathoc -s google.com get:/ << 301 Moved Permanently: 219 bytes +    </pre>  </section>  <section>      <div class="page-header"> -       <h1>Multiple Requests</h1> +        <h1>Multiple Requests</h1>      </div> -    <p>There are two ways to tell pathoc to issue multiple requests. The first -    is to specify them on the command-line, like so:</p> +    <p> +        There are two ways to tell pathoc to issue multiple requests. The first is to specify +        them on the command-line, like so: +    </p> -    <pre class="terminal">> pathoc google.com get:/ get:/ -<< 301 Moved Permanently: 219 bytes -<< 301 Moved Permanently: 219 bytes</pre> +    <pre class="terminal"> +        > pathoc google.com get:/ get:/ << 301 Moved Permanently: 219 bytes << +        301 Moved Permanently: 219 bytes +    </pre> -    <p> In this case, pathoc issues the specified requests over the same TCP -    connection - so in the above example only one connection is made to -    google.com </p> +    <p> +        In this case, pathoc issues the specified requests over the same TCP connection - +        so in the above example only one connection is made to google.com +    </p> -    <p> The other way to issue multiple requets is to use the <b>-n</b> flag:</p> +    <p>The other way to issue multiple requets is to use the <b>-n</b> flag:</p> -    <pre class="terminal">> pathoc -n 2 google.com get:/ -<< 301 Moved Permanently: 219 bytes -<< 301 Moved Permanently: 219 bytes</pre> +    <pre class="terminal"> +        > pathoc -n 2 google.com get:/ << 301 Moved Permanently: 219 bytes << 301 +        Moved Permanently: 219 bytes +    </pre> -    <p> The output is identical, but two separate TCP connections are made to -    the upstream server. These two specification styles can be combined:</p> +    <p> +        The output is identical, but two separate TCP connections are made to the upstream +        server. These two specification styles can be combined: +    </p> -    <pre class="terminal">> pathoc -n 2 google.com get:/ get:/ -<< 301 Moved Permanently: 219 bytes -<< 301 Moved Permanently: 219 bytes -<< 301 Moved Permanently: 219 bytes -<< 301 Moved Permanently: 219 bytes</pre> - -    <p> Here, two distinct TCP connections are made, with two requests issued -    over each. </p> +    <pre class="terminal"> +        > pathoc -n 2 google.com get:/ get:/ << 301 Moved Permanently: 219 bytes << +        301 Moved Permanently: 219 bytes << 301 Moved Permanently: 219 bytes << +        301 Moved Permanently: 219 bytes +    </pre> +    <p>Here, two distinct TCP connections are made, with two requests issued over each.</p>  </section>  <section>      <div class="page-header"> -       <h1>Basic Fuzzing</h1> +        <h1>Basic Fuzzing</h1>      </div> -    <p>The combination of pathoc's powerful request specification language and -    a few of its command-line options makes for quite a powerful basic fuzzer. -    Here's an example:</p> +    <p> +        The combination of pathoc's powerful request specification language and a few of +        its command-line options makes for quite a powerful basic fuzzer. Here's +        an example: +    </p> -    <pre class="terminal">> pathoc -e -I 200 -t 2 -n 1000 localhost get:/:b@10:ir,@1</pre> +    <pre class="terminal"> +        > pathoc -e -I 200 -t 2 -n 1000 localhost get:/:b@10:ir,@1 +    </pre> -    <p>The request specified here is a valid GET with a body consisting of 10 -    random bytes, but with 1 random byte inserted in a random place. This could -    be in the headers, in the initial request line, or in the body itself. -    There are a few things to note here:<p> +    <p> +        The request specified here is a valid GET with a body consisting of 10 random bytes, +        but with 1 random byte inserted in a random place. This could be in the headers, +        in the initial request line, or in the body itself. There are a few things +        to note here: +    </p>      <ul> - -        <li> Corrupting the request in this way will often make the server -        enter a state where it's awaiting more input from the client. This is -        where the <b>-t</b> option comes in, which sets a timeout that causes -        pathoc to disconnect after two seconds. </li> - -        <li> The <b>-n</b> option tells pathoc to repeat the request 1000 -        times.</li> - -        <li> The <b>-I</b> option tells pathoc to ignore HTTP 200 response -        codes. You can use this to fine-tune what pathoc considers to be an -        exceptional condition, and therefore log-worthy.</li> - -        <li> The <b>-e</b> option tells pathoc to print an explanation of each -        logged request, in the form of an expanded pathoc specification with -        all random portions and automatic header additions resolved. This lets -        you precisely replay a request that triggered an error </li> - +        <li> +            Corrupting the request in this way will often make the server enter a state where +            it's awaiting more input from the client. This is where the +            <b>-t</b> option comes in, which sets a timeout that causes pathoc to +            disconnect after two seconds. +        </li> + +        <li> +            The <b>-n</b> option tells pathoc to repeat the request 1000 times. +        </li> + +        <li> +            The <b>-I</b> option tells pathoc to ignore HTTP 200 response codes. +            You can use this to fine-tune what pathoc considers to be an exceptional +            condition, and therefore log-worthy. +        </li> + +        <li> +            The <b>-e</b> option tells pathoc to print an explanation of each logged +            request, in the form of an expanded pathoc specification with all random +            portions and automatic header additions resolved. This lets you precisely +            replay a request that triggered an error. +        </li>      </ul> -  </section>  <section> -      <div class="page-header"> -       <h1>Interacting with Proxies</h1> +        <h1>Interacting with Proxies</h1>      </div> -    <p>Pathoc has a reasonably sophisticated suite of features for interacting -    with proxies. The proxy request syntax very closely mirrors that of -    straight HTTP, which means that it is possible to make proxy-style requests -    using pathoc without any additional syntax, by simply specifying a full URL -    instead of a simple path::</p> +    <p> +        Pathoc has a reasonably sophisticated suite of features for interacting with proxies. +        The proxy request syntax very closely mirrors that of straight HTTP, which +        means that it is possible to make proxy-style requests using pathoc without +        any additional syntax, by simply specifying a full URL instead of a simple +        path: +    </p>      <pre class="terminal">> pathoc -p 8080 localhost "get:'http://google.com'"</pre> -    <p>Another common use case is to use an HTTP CONNECT request to probe -    remote servers via a proxy. This is done with the <b>-c</b> command-line -    option, which allows you to specify a remote host and port pair:</p> +    <p> +        Another common use case is to use an HTTP CONNECT request to probe remote servers +        via a proxy. This is done with the <b>-c</b> command-line option, +        which allows you to specify a remote host and port pair: +    </p>      <pre class="terminal">> pathoc -c google.com:80 -p 8080 localhost get:/</pre> -    <p>Note that pathoc does <b>not</b> negotiate SSL without being explictly -    instructed to do so. If you're making a CONNECT request to an SSL-protected -    resource, you must also pass the <b>-s</b> flag:</p> +    <p> +        Note that pathoc does <b>not</b> negotiate SSL without being explictly instructed +        to do so. If you're making a CONNECT request to an SSL-protected resource, +        you must also pass the <b>-s</b> flag: +    </p>      <pre class="terminal">> pathoc -sc google.com:443 -p 8080 localhost get:/</pre> -  </section>  <section>      <div class="page-header"> -       <h1>Embedded response specification</h1> +        <h1>Embedded response specification</h1>      </div> -    <p>One interesting feature of the Request sppecification language is that -    you can embed a response specifcation in it, which is then added to the -    request path. Here's an example:</p> - -    <pre class="terminal">> pathoc localhost:9999 "get:/p/:s'401:ir,@1'" </pre> - -    <p> This crafts a request that connects to the pathod server, and which then -    crafts a response that generates a 401, with one random byte embedded at a -    random point. The response specification is parsed and expanded by pathoc, -    so you see syntax errors immediately. This really becomes handy when -    combined with the <b>-e</b> flag to show the expanded request: - -    <pre class="terminal">> > pathoc -e localhost:9999 "get:/p/:s'401:ir,@1'" ->> Spec: get:/p/:s'401:i15,\'o\':h\'Content-Length\'=\'0\'':h'Content-Length'='0' -<< 401 Unoauthorized: 0 bytes </pre> - -    <p> Note that the embedded response has been resolved <i>before</i> being -    sent to the server, so that "ir,@1" (embed a random byte at a random -    location) has become "i15,\'o\'" (embed the character "o" at offset 15). You -    now have a pathoc request specification that is precisely reproducable, even -    with random components. This feature comes in terribly handy when testing a -    proxy, since you can now drive the server repsonse completely from the -    client, and have a complete log of reproducible requests to analyse -    afterwards.</p> - +    <p> +        One interesting feature of the Request sppecification language is that you can embed +        a response specifcation in it, which is then added to the request path. Here's +        an example: +    </p> + +    <pre class="terminal">> pathoc localhost:9999 "get:/p/:s'401:ir,@1'"</pre> + +    <p> +        This crafts a request that connects to the pathod server, and which then crafts a +        response that generates a 401, with one random byte embedded at a random +        point. The response specification is parsed and expanded by pathoc, so you +        see syntax errors immediately. This really becomes handy when combined with +        the <b>-e</b> flag to show the expanded request: +    </p> + +    <pre class="terminal"> +        > > pathoc -e localhost:9999 "get:/p/:s'401:ir,@1'" >> Spec: get:/p/:s'401:i15,\'o\':h\'Content-Length\'=\'0\'':h'Content-Length'='0' +        << 401 Unoauthorized: 0 bytes </pre> + +    <p> +        Note that the embedded response has been resolved <i>before</i> being sent +        to the server, so that "ir,@1" (embed a random byte at a random location) +        has become "i15,\'o\'" (embed the character "o" at offset 15). You now have +        a pathoc request specification that is precisely reproducable, even with +        random components. This feature comes in terribly handy when testing a proxy, +        since you can now drive the server repsonse completely from the client, and +        have a complete log of reproducible requests to analyse afterwards. +    </p>  </section> - - - - - - - -  {% endblock %} | 
