Created
August 20, 2020 08:05
-
-
Save rootsploit/db83a6975c7c1337106950b81b6df733 to your computer and use it in GitHub Desktop.
Python Script to perform Port Knocking
This file contains hidden or 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