mirror of https://github.com/OISF/suricata
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
3.7 KiB
ReStructuredText
208 lines
3.7 KiB
ReStructuredText
HTTP
|
|
----
|
|
|
|
HTTP transaction details are exposes to Lua scripts with the
|
|
``suricata.http`` library, For example::
|
|
|
|
local http = require("suricata.http")
|
|
|
|
Setup
|
|
^^^^^
|
|
|
|
If your purpose is to create a logging script, initialize the buffer as:
|
|
|
|
::
|
|
|
|
function init (args)
|
|
local needs = {}
|
|
needs["protocol"] = "http"
|
|
return needs
|
|
end
|
|
|
|
If you are going to use the script for rule matching, choose one of
|
|
the available HTTP buffers listed in :ref:`lua-detection` and follow
|
|
the pattern:
|
|
|
|
::
|
|
|
|
function init (args)
|
|
local needs = {}
|
|
needs["http.request_line"] = tostring(true)
|
|
return needs
|
|
end
|
|
|
|
Transaction
|
|
~~~~~~~~~~~
|
|
|
|
HTTP is transaction based, and the current transaction must be obtained before use::
|
|
|
|
local tx, err = http.get_tx()
|
|
if tx == err then
|
|
print(err)
|
|
end
|
|
|
|
All other functions are methods on the transaction table.
|
|
|
|
Transaction Methods
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
``request_header()``
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP request header value by key.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
local ua = tx:request_header("User-Agent")
|
|
if ua ~= nil then
|
|
print(ua)
|
|
end
|
|
|
|
``response_header()``
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP response header value by key.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
local content_type = tx:response_header("Content-Type")
|
|
if content_type ~= nil then
|
|
print(content_type)
|
|
end
|
|
|
|
``request_line``
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP request line as a string.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
local http_request_line = tx:request_line();
|
|
if #http_request_line > 0 then
|
|
if http_request_line:find("^GET") then
|
|
print(http_request_line)
|
|
end
|
|
end
|
|
|
|
``response_line``
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP response line as a string.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
local http_response_line = tx:response_line();
|
|
if #http_response_line > 0 then
|
|
print(http_response_line)
|
|
end
|
|
|
|
``request_headers_raw()``
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the raw HTTP request headers.
|
|
|
|
Example::
|
|
|
|
http_request_headers_raw = tx:request_headers_raw()
|
|
|
|
if #http_request_headers_raw > 0 then
|
|
if http_request_headers_raw:find("User%-Agent: curl") then
|
|
print(http_request_headers_raw)
|
|
end
|
|
end
|
|
|
|
``response_headers_raw()``
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the raw HTTP response headers.
|
|
|
|
Example::
|
|
|
|
http_response_headers_raw = tx:response_headers_raw()
|
|
|
|
if #http_response_headers_raw > 0 then
|
|
print(http_response_headers_raw)
|
|
end
|
|
|
|
``request_uri_raw()``
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the raw HTTP request URI.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_request_uri_raw = tx:request_uri_raw()
|
|
print(http_request_uri_raw)
|
|
|
|
``request_uri_normalized()``
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the normalized HTTP request URI.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_request_uri_normalized = tx:request_uri_normalized()
|
|
print(http_request_uri_normalized)
|
|
|
|
``request_headers()``
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP request headers.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_request_headers = tx:request_headers()
|
|
print(http_request_headers)
|
|
|
|
``response_headers()``
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP response headers.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_response_headers = tx:response_headers()
|
|
print(http_response_headers)
|
|
|
|
``request_body()``
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP request body.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_request_body = tx:request_body()
|
|
print(http_request_body)
|
|
|
|
``response_body()``
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP response body.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_response_body = tx:response_body()
|
|
print(http_response_body)
|
|
|
|
``request_host()``
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
Get the HTTP request host.
|
|
|
|
Example::
|
|
|
|
local tx = http.get_tx()
|
|
http_host = tx:request_host()
|
|
print(http_host)
|
|
|