Skip to content

Commit 988160c

Browse files
author
Ekultek
committed
port scanner is ready
1 parent 2f0fb77 commit 988160c

File tree

1 file changed

+75
-13
lines changed

1 file changed

+75
-13
lines changed

lib/scanner/nmap.py

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,58 @@
1-
import io
1+
"""
2+
3+
*********************************************************************************************
4+
* NOTICE FROM AUTOSPLOIT DEVELOPERS *
5+
*********************************************************************************************
6+
* this is basically an exact copy of *
7+
* `https://github.com/komand/python-nmap/blob/master/nmap/nmap.py` that has been modified *
8+
* to better fit into autosploits development. There has been very minimal changes to it *
9+
* and it still basically functions the exact same way *
10+
*********************************************************************************************
11+
12+
13+
ORIGINAL INFO:
14+
--------------
15+
nmap.py - version and date, see below
16+
Source code : https://bitbucket.org/xael/python-nmap
17+
Author :
18+
* Alexandre Norman - norman at xael.org
19+
Contributors:
20+
* Steve 'Ashcrow' Milner - steve at gnulinux.net
21+
* Brian Bustin - brian at bustin.us
22+
* old.schepperhand
23+
* Johan Lundberg
24+
* Thomas D. maaaaz
25+
* Robert Bost
26+
* David Peltier
27+
Licence: GPL v3 or any later version for python-nmap
28+
This program is free software: you can redistribute it and/or modify
29+
it under the terms of the GNU General Public License as published by
30+
the Free Software Foundation, either version 3 of the License, or
31+
any later version.
32+
This program is distributed in the hope that it will be useful,
33+
but WITHOUT ANY WARRANTY; without even the implied warranty of
34+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35+
GNU General Public License for more details.
36+
You should have received a copy of the GNU General Public License
37+
along with this program. If not, see <http://www.gnu.org/licenses/>.
38+
**************
39+
IMPORTANT NOTE
40+
**************
41+
The Nmap Security Scanner used by python-nmap is distributed
42+
under it's own licence that you can find at https://svn.nmap.org/nmap/COPYING
43+
Any redistribution of python-nmap along with the Nmap Security Scanner
44+
must conform to the Nmap Security Scanner licence
45+
46+
__author__ = 'Alexandre Norman (norman@xael.org)'
47+
__version__ = '0.6.2'
48+
__last_modification__ = '2017.01.07'
49+
"""
50+
251
import os
3-
import re
4-
import csv
5-
import sys
652
import shlex
753
import subprocess
854

955
from xml.etree import ElementTree
10-
from multiprocessing import Process
1156

1257
import lib.jsonize
1358
import lib.errors
@@ -45,7 +90,11 @@ def do_scan(host, nmap_path, ports=None, arguments=None):
4590
nmap_path, '-oX', '-', host,
4691
'-p ' + ports if ports is not None else "",
4792
] + arguments_list
48-
lib.output.info("launching nmap scan against {} ({})".format(host, " ".join(launch_arguments)))
93+
to_launch = []
94+
for item in launch_arguments:
95+
if not item == "":
96+
to_launch.append(item)
97+
lib.output.info("launching nmap scan against {} ({})".format(host, " ".join(to_launch)))
4998
process = subprocess.Popen(
5099
launch_arguments, bufsize=10000, stdin=subprocess.PIPE,
51100
stdout=subprocess.PIPE, stderr=subprocess.PIPE
@@ -127,24 +176,24 @@ def parse_xml_output(output, warnings, error):
127176
results['nmap_scan'][host]['addresses'] = addresses
128177
results['nmap_scan'][host]['vendors'] = vendors
129178

130-
print results;exit(1)
131-
132179
for status in attempted_host.findall('status'):
133-
results['nmap_scan'][attempted_host]['status'] = {
180+
results['nmap_scan'][host]['status'] = {
134181
'state': status.get('state'),
135182
'reason': status.get('reason')
136183
}
137184
for uptime in attempted_host.findall('uptime'):
138-
results['nmap_scan'][attempted_host]['uptime'] = {
185+
results['nmap_scan'][host]['uptime'] = {
139186
'seconds': uptime.get('seconds'),
140187
'lastboot': uptime.get('lastboot')
141188
}
142189
for discovered_port in attempted_host.findall('ports/port'):
143190
protocol = discovered_port.get('protocol')
144191
port_number = discovered_port.get('portid')
145-
port_state = discovered_port.find('state').get('reason')
192+
port_state = discovered_port.find('state').get('state')
193+
port_reason = discovered_port.find('state').get('reason')
146194

147-
# damn I didn't even know you could do this!
195+
# this is actually a thing!!
196+
name = discovered_config = discovered_version = extra_information = discovered_product = stuff = ""
148197
for discovered_name in discovered_port.findall('service'):
149198
name = discovered_name.get('name')
150199
if discovered_name.get('product'):
@@ -153,4 +202,17 @@ def parse_xml_output(output, warnings, error):
153202
discovered_version = discovered_name.get('version')
154203
if discovered_name.get('extrainfo'):
155204
extra_information = discovered_name.get('extrainfo')
156-
print results
205+
if discovered_name.get('conf'):
206+
discovered_config = discovered_name.get('conf')
207+
208+
for other_stuff in discovered_name.findall('cpe'):
209+
stuff = other_stuff.text
210+
if protocol not in results['nmap_scan'][host].keys():
211+
results['nmap_scan'][host][protocol] = list()
212+
results['nmap_scan'][host][protocol].append({
213+
'port': port_number, 'state': port_state, 'reason': port_reason,
214+
'name': name, 'product': discovered_product, 'version': discovered_version,
215+
'extrainfo': extra_information, 'conf': discovered_config, 'cpe': stuff
216+
})
217+
218+
return results

0 commit comments

Comments
 (0)