1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-09 14:11:29 +00:00
Files
nmap/nselib/imap.lua
2010-07-12 19:42:43 +00:00

48 lines
1.3 KiB
Lua

---
-- 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.ip, port.number, 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