Skip to content

Instantly share code, notes, and snippets.

@rootsploit
Created August 20, 2020 08:05
Show Gist options
  • Select an option

  • Save rootsploit/db83a6975c7c1337106950b81b6df733 to your computer and use it in GitHub Desktop.

Select an option

Save rootsploit/db83a6975c7c1337106950b81b6df733 to your computer and use it in GitHub Desktop.

Revisions

  1. rootsploit created this gist Aug 20, 2020.
    55 changes: 55 additions & 0 deletions port-knock.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    #!/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()