summaryrefslogtreecommitdiffstats
path: root/scripts/http-date.nse
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/http-date.nse')
-rw-r--r--scripts/http-date.nse58
1 files changed, 58 insertions, 0 deletions
diff --git a/scripts/http-date.nse b/scripts/http-date.nse
new file mode 100644
index 0000000..cea5d94
--- /dev/null
+++ b/scripts/http-date.nse
@@ -0,0 +1,58 @@
+local datetime = require "datetime"
+local http = require "http"
+local os = require "os"
+local shortport = require "shortport"
+local stdnse = require "stdnse"
+local string = require "string"
+local datetime = require "datetime"
+
+description = [[
+Gets the date from HTTP-like services. Also prints how much the date
+differs from local time. Local time is the time the HTTP request was
+sent, so the difference includes at least the duration of one RTT.
+]]
+
+---
+-- @output
+-- 80/tcp open http
+-- |_http-date: Thu, 02 Aug 2012 22:11:03 GMT; 0s from local time.
+-- 80/tcp open http
+-- |_http-date: Thu, 02 Aug 2012 22:07:12 GMT; -3m51s from local time.
+--
+-- @xmloutput
+-- <elem key="date">2012-08-02T23:07:12+00:00</elem>
+-- <elem key="delta">-231</elem>
+
+author = "David Fifield"
+
+license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
+
+categories = {"discovery", "safe"}
+
+
+portrule = shortport.http
+
+action = function(host, port)
+ local response = http.get(host, port, "/")
+ local request_time = os.time()
+ if not response.status or not response.header["date"] then
+ return
+ end
+
+ local response_date = http.parse_date(response.header["date"])
+ if not response_date then
+ return
+ end
+ local response_time = datetime.date_to_timestamp(response_date)
+
+ local output_tab = stdnse.output_table()
+ output_tab.date = datetime.format_timestamp(response_time, 0)
+ output_tab.delta = os.difftime(response_time, request_time)
+
+ datetime.record_skew(host, response_time, request_time)
+
+ local output_str = string.format("%s; %s from local time.",
+ response.header["date"], datetime.format_difftime(os.date("!*t", response_time), os.date("!*t", request_time)))
+
+ return output_tab, output_str
+end