Skip to content

Instantly share code, notes, and snippets.

@rootsploit
Created August 20, 2020 08:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rootsploit/db83a6975c7c1337106950b81b6df733 to your computer and use it in GitHub Desktop.
Save rootsploit/db83a6975c7c1337106950b81b6df733 to your computer and use it in GitHub Desktop.
Python Script to perform Port Knocking
#!/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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment