4.3. Accessing values¶
When the engine functions are executed, you may want to access some execution time values that are being handled by the NmapScanner object at that point. For that purpose you can use the following PyNSEEngine instance properties:
current_target: Returns the target being processed when the function is executedcurrent_port*: Returns the port being processed when the function is executed.current_proto*: Returns the transport layer protocol being processed when the function is executed.current_state*: Returns the state of the port being processed when the function is executed.
* These properties are only suitable if the function is decorated as a ``@port_script``.
Important
Any of the above properties will return None if they are not handled by the appropriate decorator. i.e. current_port returns None if the function is decorated by host_script.
4.3.1. Example¶
import nmapthon as nm
import socket
engine = nm.engine.PyNSEEngine()
@engine.port_script('smtp_banner', 25, states=['open', 'filtered'])
def get_smtp_banner():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Each time the port script executes, it will execute with the current target and port
s.connect((engine.current_target, engine.current_port))
banner = s.recv(1024)[4:]
s.close()
return banner
sc = nm.NmapScanner('127.0.0.1', arguments='-sV', engine=engine)
smtp_service = sc.service('127.0.0.1', 'tcp', 25)
if smtp_service is not None:
print('Here is your SMTP banner: {}'.format(smtp_service['smtp_banner']))