summaryrefslogtreecommitdiffstats
path: root/scripts/pop3-capabilities.nse
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/pop3-capabilities.nse')
-rw-r--r--scripts/pop3-capabilities.nse47
1 files changed, 47 insertions, 0 deletions
diff --git a/scripts/pop3-capabilities.nse b/scripts/pop3-capabilities.nse
new file mode 100644
index 0000000..322bc1a
--- /dev/null
+++ b/scripts/pop3-capabilities.nse
@@ -0,0 +1,47 @@
+local pop3 = require "pop3"
+local shortport = require "shortport"
+local stdnse = require "stdnse"
+local table = require "table"
+
+description = [[
+Retrieves POP3 email server capabilities.
+
+POP3 capabilities are defined in RFC 2449. The CAPA command allows a client to
+ask a server what commands it supports and possibly any site-specific policy.
+Besides the list of supported commands, the IMPLEMENTATION string giving the
+server version may be available.
+]]
+
+---
+-- @output
+-- 110/tcp open pop3
+-- |_ pop3-capabilities: USER CAPA RESP-CODES UIDL PIPELINING STLS TOP SASL(PLAIN)
+
+author = "Philip Pickering"
+license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
+
+categories = {"default","discovery","safe"}
+
+
+portrule = shortport.port_or_service({110,995},{"pop3","pop3s"})
+
+action = function(host, port)
+ local capa, err = pop3.capabilities(host, port)
+ if type(capa) == "table" then
+ -- Convert the capabilities table into an array of strings.
+ local capstrings = {}
+ for cap, args in pairs(capa) do
+ if ( #args > 0 ) then
+ table.insert(capstrings, ("%s(%s)"):format(cap, table.concat(args, " ")))
+ else
+ table.insert(capstrings, cap)
+ end
+ end
+ return table.concat(capstrings, " ")
+ elseif type(err) == "string" then
+ stdnse.debug1("'%s' for %s", err, host.ip)
+ return
+ else
+ return "server doesn't support CAPA"
+ end
+end