summaryrefslogtreecommitdiffstats
path: root/scripts/tn3270-screen.nse
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/tn3270-screen.nse')
-rw-r--r--scripts/tn3270-screen.nse122
1 files changed, 122 insertions, 0 deletions
diff --git a/scripts/tn3270-screen.nse b/scripts/tn3270-screen.nse
new file mode 100644
index 0000000..59d8319
--- /dev/null
+++ b/scripts/tn3270-screen.nse
@@ -0,0 +1,122 @@
+local stdnse = require "stdnse"
+local shortport = require "shortport"
+local tn3270 = require "tn3270"
+
+description = [[
+Connects to a tn3270 'server' and returns the screen.
+
+Hidden fields will be listed below the screen with (row, col) coordinates.
+]]
+
+---
+-- @usage
+-- nmap --script tn3270-info,tn3270_screen <host>
+--
+-- @output
+-- PORT STATE SERVICE VERSION
+-- 23/tcp open tn3270 Telnet TN3270
+-- | tn3270-screen:
+-- | screen:
+-- | Mainframe Operating System z/OS V1.6
+-- | FFFFF AAA N N DDDD EEEEE ZZZZZ H H III
+-- | F A A NN N D D E Z H H I
+-- | FFFF AAAAA N N N D D EEEE Z HHHHH I
+-- | F A A N NN D D E Z H H I
+-- | F A A N N DDDD EEEEE ZZZZZ H H III
+-- |
+-- | ZZZZZ / OOOOO SSSS
+-- | Z / O O S
+-- | Z / O O SSS
+-- | Z / O O S
+-- | ZZZZZ / OOOOO SSSS
+-- |
+-- | Welcome to Fan DeZhi Mainframe System!
+-- |
+-- | Support: http://zos.efglobe.com
+-- | TSO - Logon to TSO/ISPF NETVIEW - Netview System
+-- | CICS - CICS System NVAS - Netview Access
+-- | IMS - IMS System AOF - Netview Automation
+-- |
+-- | Enter your choice==>
+-- | Hi! Enter one of above commands in red.
+-- |
+-- |_Your IP(10.10.10.375 :64199), SNA LU( ) 05/30/15 13:33:37
+--
+-- @args tn3270-screen.commands a semi-colon separated list of commands you want to
+-- issue before printing the screen
+-- tn3270-screen.lu specify a logical unit you with to use, fails if can't connect
+-- tn3270-screen.disable_tn3270e disables TN3270 Enhanced mode
+--
+--
+-- @changelog
+-- 2015-05-30 - v0.1 - created by Soldier of Fortran
+-- 2015-11-14 - v0.2 - added commands argument
+-- 2018-09-07 - v0.3 - added support for Logical Units
+-- 2019-02-01 - v0.4 - Added ability to disable TN3270E mode
+--
+
+author = "Philip Young aka Soldier of Fortran"
+license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
+categories = {"safe", "discovery"}
+
+portrule = shortport.port_or_service({23,992}, {"tn3270"})
+
+local hidden_field_mt = {
+ __tostring = function(t)
+ return ("(%d, %d): %s"):format(t.row, t.col, t.field)
+ end,
+}
+
+action = function(host, port)
+ local commands = stdnse.get_script_args(SCRIPT_NAME .. '.commands')
+ local disable_tn3270e = stdnse.get_script_args(SCRIPT_NAME .. '.disable_tn3270e') or false
+ local lu = stdnse.get_script_args(SCRIPT_NAME .. '.lu')
+ local t = tn3270.Telnet:new()
+ if lu and not disable_tn3270e then
+ stdnse.debug("Setting LU: %s", lu)
+ t:set_lu(lu)
+ end
+
+ if disable_tn3270e then
+ t:disable_tn3270e()
+ end
+ local status, err = t:initiate(host,port)
+ if not status then
+ stdnse.debug("Could not initiate TN3270: %s", err )
+ return
+ else
+ if commands then
+ local run = stdnse.strsplit(";%s*", commands)
+ for i = 1, #run do
+ stdnse.debug(1,"Issuing Command (#%s of %s): %s", i, #run ,run[i])
+ t:send_cursor(run[i])
+ t:get_all_data()
+ t:get_screen_debug(2)
+ end
+ end
+ status = t:get_all_data()
+ local hidden
+ if t:any_hidden() then
+ hidden = {}
+ local hidden_buggers = t:hidden_fields()
+ local hidden_locs = t:hidden_fields_location()
+ for i = 1, #hidden_buggers do
+ local j = i*2 - 1
+ local field = {
+ field = hidden_buggers[i],
+ row = t:BA_TO_ROW(hidden_locs[j]),
+ col = t:BA_TO_COL(hidden_locs[j]),
+ }
+ setmetatable(field, hidden_field_mt)
+ hidden[i] = field
+ end
+ end
+ local out = stdnse.output_table()
+ out.screen = t:get_screen()
+ out["hidden fields"] = hidden
+ if not disable_tn3270e then
+ out["logical unit"]= t:get_lu()
+ end
+ return out
+ end
+end