Metainformationen zur Seite
  •  

nmap top ports

#!/usr/bin/env python3
 
import shlex
import subprocess
import re
import argparse
import random
 
# cmdline options
parser = argparse.ArgumentParser()
group_output = parser.add_mutually_exclusive_group(required=False)
group_output.add_argument('-r', action='store_true', help="random")
group_output.add_argument('-s', action='store_true', help="sort")
group_output2 = parser.add_mutually_exclusive_group(required=False)
group_output2.add_argument('--row', action='store_true')
group_output2.add_argument('--col', action='store_true')
parser.add_argument('--ports', type=int, default=30)
abc = parser.parse_args()
 
# nmap command
cmd = "nmap -oX - --top-ports " + str(abc.ports) + " x"  # nmap top ports
args = shlex.split(cmd)  # split for popen
p = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
var = p.stdout
mo = re.search('(?<= services=").*?(?=\"/>)',str(var))  # search the ports part 
portsgrep = mo.group()
portssplit = portsgrep.split(",")  # split the output and save in list
 
for k in range(10):  # do twice...n as workaround
    for i in portssplit:
        if "-" in i:  # split at eg. 3-7
            start = (i.split("-")[0])  # 3
            end = (i.split("-")[1])  # 7 
            for j in range(int(start),int(end)+1):
                portssplit.append(str(j))  # append 3,4,5,6,7 to list
            # print(start, " ", end)  # debug
            portssplit.remove(i)  # remove "3-7" from list
 
portslist = list(map(int, portssplit))  # convert to int
 
if abc.s:
    portslist = sorted(portslist)  # sort numbers
elif abc.r:
    random.shuffle(portslist)  # shuffle numbers
 
if abc.col:
    for port in portslist:
        print(port)  # print as column
elif abc.row or not abc.col:
    for port in portslist:
        print(port, end = " ")  # print as row