Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ A Python-based network vulnerability scanner developed for educational purposes.
## Usage

```bash
python3 scanner.py
python3 portscanner.py --targets 127.0.0.1 --ports 100
```

You can still run interactively by omitting flags.
![Port Scan](Screenshots/run_Command)

Sample Output
Expand Down
74 changes: 54 additions & 20 deletions portscanner.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,64 @@
# Network Vulnerability Scanner

import argparse
import socket

import termcolor


def scan(target, ports):
print('\n' + ' Starting Scan For ' + str(target))
for port in range(1,ports):
scan_port(target,port)
def scan(target: str, port_count: int, timeout: float = 1.0) -> None:
print("\n" + " Starting Scan For " + str(target))
# Inclusive upper bound: scanning N ports means 1..N
for port in range(1, port_count + 1):
scan_port(target, port, timeout)


def scan_port(ipaddress: str, port: int, timeout: float) -> None:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
try:
if sock.connect_ex((ipaddress, port)) == 0:
print("[+] Port Opened " + str(port))
except OSError:
pass
finally:
sock.close()


def main() -> None:
parser = argparse.ArgumentParser(description="Simple TCP port scanner")
parser.add_argument(
"--targets",
help="Comma-separated IPs/hostnames (prompted if omitted)",
)
parser.add_argument(
"--ports",
type=int,
help="Number of ports to scan from 1 (prompted if omitted)",
)
parser.add_argument(
"--timeout",
type=float,
default=1.0,
help="Per-port connect timeout in seconds (default: 1.0)",
)
args = parser.parse_args()

targets = args.targets or input("[*] Enter Targets To Scan (split them by ,): ")
port_count = args.ports or int(
input("[*] Enter How Many Ports You Want To Scan: ")
)

if port_count < 1 or port_count > 65535:
raise SystemExit("Port count must be between 1 and 65535.")

def scan_port(ipaddress, port):
try:
sock = socket.socket()
sock.connect((ipaddress, port))
print("[+] Port Opened " + str(port))
sock.close()
except:
pass
if "," in targets:
print(termcolor.colored("[*] Scanning Multiple Targets", "green"))
for ip_addr in targets.split(","):
scan(ip_addr.strip(), port_count, args.timeout)
else:
scan(targets.strip(), port_count, args.timeout)


targets = input("[*] Enter Targets To Scan(split them by ,): ")
ports = int(input("[*] Enter How Many Ports You Want To Scan: "))
if ',' in targets:
print(termcolor.colored(("[*] Scanning Multiple Targets"), 'green'))
for ip_addr in targets.split(','):
scan(ip_addr.strip(' '), ports)
else:
scan(targets,ports)
if __name__ == "__main__":
main()
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
# No external dependencies required.
termcolor>=2.4.0,<3