diff --git a/scripts/http-headers.nse b/scripts/http-headers.nse new file mode 100644 index 000000000..296f65381 --- /dev/null +++ b/scripts/http-headers.nse @@ -0,0 +1,73 @@ +description = [[ +Does a GET request for the root folder ("/"), and displays the HTTP headers returned. +]] + +--- +--@output +-- Interesting ports on scanme.nmap.org (64.13.134.52): +-- PORT STATE SERVICE +-- 80/tcp open http +-- | http-headers: +-- | connection: close +-- | content-type: text/html; charset=UTF-8 +-- | content-length: 739 +-- | accept-ranges: bytes +-- | date: Sun, 23 Aug 2009 01:14:30 GMT +-- | etag: "fc8c91-2e3-44d8e17edd540" +-- | last-modified: Mon, 19 May 2008 04:49:49 GMT +-- |_ server: Apache/2.2.2 (Fedora) +-- +-- + + +author = "Ron Bowes " + +license = "Same as Nmap--See http://nmap.org/book/man-legal.html" + +categories = {"discovery"} + +require "shortport" +require "http" + +portrule = function(host, port) + local svc = { std = { ["http"] = 1, ["http-alt"] = 1 }, + ssl = { ["https"] = 1, ["https-alt"] = 1 } } + if port.protocol ~= 'tcp' + or not ( svc.std[port.service] or svc.ssl[port.service] ) then + return false + end + -- Don't bother running on SSL ports if we don't have SSL. + if (svc.ssl[port.service] or port.version.service_tunnel == 'ssl') + and not nmap.have_ssl() then + return false + end + return true +end + +action = function(host, port) + local result = http.get(host, port, "/") + + if(result == nil) then + if(nmap.debugging() > 0) then + return "ERROR: GET request failed" + else + return nil + end + end + + if(result.header == nil) then + if(nmap.debugging() > 0) then + return "ERROR: GET request didn't return a proper header" + else + return nil + end + end + + local response = " \n" + for i, v in pairs(result.header) do + response = response .. string.format(" %s: %s\n", i, v) + end + + return response +end +