local nmap = require "nmap" local shortport = require "shortport" local sip = require "sip" local stdnse = require "stdnse" local table = require "table" description = [[ Enumerates a SIP Server's allowed methods. The script works by sending an OPTION request to the server and checking for the value of the Allow header in the response. ]] --- -- @usage -- nmap --script=sip-methods -sU -p 5060 -- --@output -- 5060/udp open sip -- | sip-methods: -- |_ INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO author = "Hani Benhabiles" license = "Same as Nmap--See http://nmap.org/book/man-legal.html" categories = {"default", "safe", "discovery"} portrule = shortport.port_or_service(5060, "sip", {"tcp", "udp"}) action = function(host, port) local status, session, response session = sip.Session:new(host, port) status = session:connect() if not status then return "ERROR: Failed to connect to the SIP server." end status, response = session:options() if status then -- If port state not set to open, set it to open. if nmap.get_port_state(host, port) ~= "open" then nmap.set_port_state(host, port, "open") end -- Check if allow header exists in response local allow = response:getHeader("allow") if allow then return stdnse.format_output(true, allow) end end end