60 lines
3.3 KiB
Python
60 lines
3.3 KiB
Python
def setup_sniff_tcpdump_parser(parser_sniff):
|
|
# arguments which will be passed to tcpdump
|
|
parser_sniff_tcpdump = parser_sniff.add_argument_group('tcpdump arguments')
|
|
# TODO: tcpdump_parser.add_argument('-c', '--count', re)
|
|
parser_sniff_tcpdump.add_argument('-a', '--ip-address=', help='IP address of the device to sniff', dest='device_ip')
|
|
parser_sniff_tcpdump.add_argument('-i', '--interface=', help='Interface of the capture device.', dest='capture_interface',default='')
|
|
parser_sniff_tcpdump.add_argument('-I', '--monitor-mode', help='Put interface into monitor mode',
|
|
action='store_true')
|
|
parser_sniff_tcpdump.add_argument('-n', help='Deactivate name resolution. Option is set by default.',
|
|
action='store_true')
|
|
parser_sniff_tcpdump.add_argument('-#', '--number',
|
|
help='Print packet number at beginning of line. Set by default.',
|
|
action='store_true')
|
|
parser_sniff_tcpdump.add_argument('-e', help='Print link layer headers. Option is set by default.',
|
|
action='store_true')
|
|
parser_sniff_tcpdump.add_argument('-t', action='count', default=0,
|
|
help='Please see tcpdump manual for details. Unused by default.')
|
|
|
|
|
|
def setup_sniff_parser(subparsers):
|
|
# create parser for 'sniff' command
|
|
parser_sniff = subparsers.add_parser('sniff', help='Start tcpdump capture.')
|
|
setup_sniff_tcpdump_parser(parser_sniff)
|
|
setup_pcap_filter_parser(parser_sniff)
|
|
cap_size_group = parser_sniff.add_mutually_exclusive_group(required=True)
|
|
cap_size_group.add_argument('-c', '--count', type=int, help='Number of packets to capture.', default=0)
|
|
cap_size_group.add_argument('--mins', type=int, help='Time in minutes to capture.', default=60)
|
|
|
|
|
|
def setup_pcap_filter_parser(parser_sniff):
|
|
parser_pcap_filter = parser_sniff.add_argument_parser('pcap-filter expression')
|
|
pass
|
|
|
|
def check_iottb_env():
|
|
# This makes the option '--root-dir' obsolescent # TODO How to streamline this?\
|
|
try:
|
|
iottb_home = environ['IOTTB_HOME'] # TODO WARN implicit declaration of env var name!
|
|
except KeyError:
|
|
logger.error(f"Environment variable 'IOTTB_HOME' is not set."
|
|
f"Setting environment variable 'IOTTB_HOME' to '~/{IOTTB_HOME_ABS}'")
|
|
environ['IOTTB_HOME'] = IOTTB_HOME_ABS
|
|
finally:
|
|
if not Path(IOTTB_HOME_ABS).exists():
|
|
print(f'"{IOTTB_HOME_ABS}" does not exist.')
|
|
response = input('Do you want to create it now? [y/N]')
|
|
logger.debug(f'response: {response}')
|
|
if response.lower() != 'y':
|
|
logger.debug(f'Not setting "IOTTB_HOME"')
|
|
print('TODO')
|
|
print("Aborting execution...")
|
|
return ReturnCodes.ABORTED
|
|
else:
|
|
print(f'Setting environment variable IOTTB_HOME""')
|
|
Path(IOTTB_HOME_ABS).mkdir(parents=True,
|
|
exist_ok=False) # Should always work since in 'not exist' code path
|
|
return ReturnCodes.SUCCESS
|
|
logger.info(f'"{IOTTB_HOME_ABS}" exists.')
|
|
# TODO: Check that it is a valid iottb dir or can we say it is valid by definition if?
|
|
return ReturnCodes.SUCCESS
|