---
-- IMAP functions.
--
-- @copyright Same as Nmap--See http://nmap.org/book/man-legal.html
module(... or "imap", package.seeall)
require 'stdnse'
---
-- Asks an IMAP server for capabilities.
--
-- See RFC 3501.
-- @param host Host to be queried.
-- @param port Port to connect to.
-- @return Table containing capabilities or nil on error.
-- @return nil or String error message.
function capabilities(host, port)
local socket = nmap.new_socket()
local capas = {}
socket:set_timeout(10000)
local proto = (port.version and port.version.service_tunnel == "ssl" and "ssl") or "tcp"
if not socket:connect(host, port, proto) then return nil, "Could Not Connect" end
local status, line = socket:receive_lines(1)
if not string.match(line, "^[%*] OK") then return nil, "No Response" end
socket:send("a001 CAPABILITY\r\n")
status, line = socket:receive_buf("\r\n", false)
if not status then
capas.CAPABILITY = false
else
while status do
if string.match(line, "^%*%s+CAPABILITY") then
line = string.gsub(line, "^%*%s+CAPABILITY", "")
for capability in string.gmatch(line, "[%w%+=-]+") do
capas[capability] = true
end
break
end
status, line = socket:receive_buf("\r\n", false)
end
end
socket:close()
return capas
end
Copyright 2K16 - 2K18 Indonesian Hacker Rulez