day 6 - nmap python

This commit is contained in:
Brendan McDevitt 2018-01-07 05:26:32 -05:00
parent 95d6654dca
commit c6db883a31

View file

@ -0,0 +1,88 @@
---
layout: post
title: "day 6"
date: 2018-01-06
categories: programming
---
# 100 Days of Code
### Day 6:
Today I made use of the python-nmap library and made a class that I will be
able to import into future modules. I started out making things like a ping sweeping tool and
banner grabber, as well as a ssl cipher suite checker. I made a subclass of the nmap
PortScanner class to start so I have access to all of those utilities. Subclasses are something I have been looking into recently.
It is an easy way to add existing functionality to another object. This class will end up being the base
library that I use when I make my own port scanning scripts. here is what I
have so far:
```python
class NmapUtility(nmap.PortScanner):
def __init__(self, hostname, hosts=False):
""" Initialize with hostname and optional list of hosts """
self.hostname = hostname
def scan_host(self, hostname, portrange):
""" Scan a host using nmap.scan """
return self.scan(hostname, portrange)
def scan_hosts(self, hosts):
""" Scan a list of hosts """
pass
def ping_sweep(self, hosts):
""" Ping sweep a list of hosts """
self.scan(hosts=hosts, arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, self[x]['status']['state']) for x in self.all_hosts()]
for host, status in hosts_list:
print('{0}:{1}'.format(host, status))
def nmap_version(self):
""" Get nmap version being used """
return self.nmapVersion()
def command_line(self):
""" Run nmap.command_line """
return self.command_line
def cipher_check(self, hostname, portrange):
""" Run --script ssl-enum-ciphers on hostname """
return self.scan(hostname,
portrange,
arguments='--script ssl-enum-ciphers')
def get_csv(self):
""" Run scan.csv() """
return self.csv()
def all_tcp(self, hostname=False):
""" Get all ports for tcp protocol in sorted output """
if hostname:
return self[hostname].all_tcp()
return self[self.hostname].all_tcp()
def all_udp(self, hostname=False):
""" Get all ports for udp protocol in sorted output
requires scanHost() or scan() to be run first
"""
if hostname:
return self[hostname].all_udp()
return self[self.hostname].all_udp()
def banner_grab(self, portrange, hostname=False):
""" Grab banners from ports """
if hostname:
return self.scan(hostname, portrange,
arguments='-sV --script=banner')
return self.scan(self.hostname, portrange,
arguments='-sV --script=banner')