-
-
Save rtulke/d8fc83aa687d6f45213780561b2186d3 to your computer and use it in GitHub Desktop.
Python Script to perform Port Knocking
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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