#!/usr/bin/python3 import socket import itertools import sys import time import argparse class Knockit(object): def __init__(self, args: list): self._parse_args(args) def _parse_args(self, args: list): parser = argparse.ArgumentParser() parser.add_argument('-d', '--delay', type=int, default=200, help='Delay between each knock. Default is 200 ms.') parser.add_argument('-b', '--bruteforce', help='Try all possible combinations.', action='store_true') parser.add_argument('host', help='Hostname or IP address of the host.') parser.add_argument('ports', type=int, help='Port(s) to knock on', nargs='+') args = parser.parse_args(args) self.delay = args.delay / 1000 self.ports = args.ports self.bruteforce = args.bruteforce self.host= args.host def knockit(self): self.ports = list(map(int, self.ports)) if (self.bruteforce): print("[+] Knockit started attacking with all the possible combinations\n") print("******************************************************") for port_list in itertools.permutations(self.ports): print("[+] Knocking with sequence: %s" % (port_list,)) for port in port_list: print("[+] Knocking on port %s:%s" % (self.host,port)) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(self.delay) sock.connect_ex((self.host, port)) sock.close() print("******************************************************") else: for port in self.ports: print("[+] Knocking on port %s:%s" % (self.host,port)) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(self.delay) sock.connect_ex((self.host, port)) sock.close() if __name__ == '__main__': Knockit(sys.argv[1:]).knockit()