mirror of
https://github.com/nmap/nmap.git
synced 2025-12-06 04:31:29 +00:00
for lib in nselib/*.lua*; do l=${lib#*/}; l=${l%.lua*}; find . -name \
\*.lua -o -name \*.nse | xargs grep -l "require .$l\>" | xargs grep \
-c "\<$l\." | grep ':0$' | awk -F: '{print "'$l'", $1}'; done
Did not remove calls to stdnse.silent_require since these can be used to
abort script execution if OpenSSL is not included, even if the script
does not directly call openssl.* (perhaps it uses comm.tryssl instead,
for instance).
Also did not remove require "strict", since that library is special and
modifies the environment.
70 lines
2.4 KiB
Lua
70 lines
2.4 KiB
Lua
local comm = require "comm"
|
|
local shortport = require "shortport"
|
|
local nmap = require "nmap"
|
|
local bin = require "bin"
|
|
local string = require "string"
|
|
|
|
description = [[
|
|
Detects the TeamSpeak 2 voice communication server and attempts to determine
|
|
version and configuration information.
|
|
|
|
A single UDP packet (a login request) is sent. If the server does not have a
|
|
password set, the exact version, name, and OS type will also be reported on.
|
|
]]
|
|
|
|
-- @output
|
|
-- PORT STATE SERVICE REASON VERSION
|
|
-- 8767/udp open teamspeak2 script-set TeamSpeak 2.0.23.19 (name: COWCLANS; no password)
|
|
-- Service Info: OS: Win32
|
|
|
|
author = "Marin Maržić"
|
|
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
|
|
categories = { "version" }
|
|
|
|
local payload = "\xf4\xbe\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\z
|
|
\x00\x002x\xba\x85\tTeamSpeak\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x00\x00\x00\x00\nWindows XP\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00 \x00<\x00\z
|
|
\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x08nickname\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\z
|
|
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
|
|
portrule = shortport.version_port_or_service({8767}, "teamspeak2", "udp")
|
|
|
|
action = function(host, port)
|
|
local status, result = comm.exchange(
|
|
host, port.number, payload, { proto = "udp", timeout = 3000 })
|
|
if not status then
|
|
return
|
|
end
|
|
nmap.set_port_state(host, port, "open")
|
|
|
|
local name, platform, version = string.match(result,
|
|
"^\xf4\xbe\x04\0\0\0\0\0.............([^\0]*)%G+([^\0]*)\0*(........)")
|
|
if not name then
|
|
return
|
|
end
|
|
|
|
port.version.name = "teamspeak2"
|
|
port.version.name_confidence = 10
|
|
port.version.product = "TeamSpeak"
|
|
if name == "" then
|
|
port.version.version = "2"
|
|
else
|
|
local _, v_a, v_b, v_c, v_d = bin.unpack("<SSSS", version)
|
|
port.version.version = v_a .. "." .. v_b .. "." .. v_c .. "." .. v_d
|
|
port.version.extrainfo = "name: " .. name .. "; no password"
|
|
if platform == "Win32" then
|
|
port.version.ostype = "Windows"
|
|
elseif platform == "Linux" then
|
|
port.version.ostype = "Linux"
|
|
end
|
|
end
|
|
|
|
nmap.set_port_version(host, port, "hardmatched")
|
|
|
|
return
|
|
end
|