:tocdepth: 3

base/utils/urls.zeek
====================

Functions for URL handling.


Summary
~~~~~~~
Redefinable Options
###################
============================================================== ======================================================
:zeek:id:`url_regex`: :zeek:type:`pattern` :zeek:attr:`&redef` A regular expression for matching and extracting URLs.
============================================================== ======================================================

Types
#####
===================================== =============================================
:zeek:type:`URI`: :zeek:type:`record` A URI, as parsed by :zeek:id:`decompose_uri`.
===================================== =============================================

Functions
#########
============================================================== ==================================================
:zeek:id:`decompose_uri`: :zeek:type:`function`
:zeek:id:`find_all_urls`: :zeek:type:`function`                Extracts URLs discovered in arbitrary text.
:zeek:id:`find_all_urls_without_scheme`: :zeek:type:`function` Extracts URLs discovered in arbitrary text without
                                                               the URL scheme included.
============================================================== ==================================================


Detailed Interface
~~~~~~~~~~~~~~~~~~
Redefinable Options
###################
.. zeek:id:: url_regex
   :source-code: base/utils/urls.zeek 7 7

   :Type: :zeek:type:`pattern`
   :Attributes: :zeek:attr:`&redef`
   :Default:

      ::

         /^?(^([a-zA-Z\-]{3,5}):\/\/(-\.)?([^[:blank:]\/?\.#-]+\.?)+(\/[^[:blank:]]*)?)$?/


   A regular expression for matching and extracting URLs.
   This is the @imme_emosol regex from https://mathiasbynens.be/demo/url-regex, adapted for Zeek. It's
   not perfect for all of their test cases, but it's one of the shorter ones that covers most of the
   test cases.

Types
#####
.. zeek:type:: URI
   :source-code: base/utils/urls.zeek 10 29

   :Type: :zeek:type:`record`


   .. zeek:field:: scheme :zeek:type:`string` :zeek:attr:`&optional`

      The URL's scheme..


   .. zeek:field:: netlocation :zeek:type:`string`

      The location, which could be a domain name or an IP address. Left empty if not
      specified.


   .. zeek:field:: portnum :zeek:type:`count` :zeek:attr:`&optional`

      Port number, if included in URI.


   .. zeek:field:: path :zeek:type:`string`

      Full including the file name. Will be '/' if there's not path given.


   .. zeek:field:: file_name :zeek:type:`string` :zeek:attr:`&optional`

      Full file name, including extension, if there is a file name.


   .. zeek:field:: file_base :zeek:type:`string` :zeek:attr:`&optional`

      The base filename, without extension, if there is a file name.


   .. zeek:field:: file_ext :zeek:type:`string` :zeek:attr:`&optional`

      The filename's extension, if there is a file name.


   .. zeek:field:: params :zeek:type:`table` [:zeek:type:`string`] of :zeek:type:`string` :zeek:attr:`&optional`

      A table of all query parameters, mapping their keys to values, if there's a
      query.


   A URI, as parsed by :zeek:id:`decompose_uri`.

Functions
#########
.. zeek:id:: decompose_uri
   :source-code: base/utils/urls.zeek 52 135

   :Type: :zeek:type:`function` (uri: :zeek:type:`string`) : :zeek:type:`URI`


.. zeek:id:: find_all_urls
   :source-code: base/utils/urls.zeek 32 35

   :Type: :zeek:type:`function` (s: :zeek:type:`string`) : :zeek:type:`string_set`

   Extracts URLs discovered in arbitrary text.

.. zeek:id:: find_all_urls_without_scheme
   :source-code: base/utils/urls.zeek 39 50

   :Type: :zeek:type:`function` (s: :zeek:type:`string`) : :zeek:type:`string_set`

   Extracts URLs discovered in arbitrary text without
   the URL scheme included.


