-
Notifications
You must be signed in to change notification settings - Fork 0
/
scan.py
116 lines (86 loc) · 4.15 KB
/
scan.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import socket
import threading
from scapy.all import *
import argparse
class portScan():
def __init__(self,target,sp=1,ep=1000,spoof=0,time=1,dlen=200,flag="S",msg=""):
self.ip = socket.gethostbyname(target)
self.sp = sp
self.ep = ep
self.spoof = spoof
self.time = time
self.dlen = dlen
self.flag = flag
self.msg = msg
self.__stats__()
def __stats__(self):
print(f"{'\033[94m'}\nTarget: {self.ip} Port:{self.sp}-{self.ep} Spoofing:{self.spoof} Timeout:{self.time} Length:{self.dlen} Flag:{self.flag} Msg:{self.msg}\n")
def __connect__(self,port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(self.time)
if(self.s.connect_ex((self.ip,port)) == 0):
try:
self.s.send(b"GET / HTTP/1.1\r\nHost: www.b00m.haHA\r\nConnection: close\r\n\r\n")
data = self.s.recv(self.dlen)
except:
data = b""
print(f"{'\033[31m'}\r[+] Port {port} {socket.getservbyport(port)}",end="")
print(f" |__ {data}")
def scan(self):
for i in range(self.sp,self.ep+1):
if self.spoof:
self.Spoof(i)
print(f"{'\033[92m'}[°] Scanning Port {i}",end="\r")
self.__connect__(i)
self.s.close()
def Fscan(self):
for i in range(self.sp,self.ep+1):
if self.spoof:
threading.Thread(target=self.Spoof,args=(i,)).start()
print(f"{'\033[92m'}[°] Scanning Port {i}",end="\r")
threading.Thread(target=self.__connect__,args=(i,)).start()
self.s.close()
def Spoof(self,port):
for _ in range(self.spoof):
sendp(Ether(src=str(RandMAC()))/IP(src=str(RandIP()),dst=self.ip,flags="DF")/TCP(sport=int(RandShort()),dport=port,flags=self.flag)/Raw(load=self.msg),verbose=0)
def Cscan(self):
for i in range(self.sp,self.ep+1):
if self.spoof:
self.Spoof(i)
d=srp(Ether()/IP(dst=self.ip,flags="DF")/TCP(sport=int(RandShort()),dport=i,flags=self.flag)/Raw(load=self.msg),verbose=0, timeout=self.time)
try:
if str(d[0][0][1][2].flags) == "SA":
print(f"{'\033[92m'}[???] Port {i} Service:{socket.getservbyport(i)} Response:{str(d[0][0][1][2].flags)}")
else:
print(f"{'\033[31m'}[???] Port {i} Service:{socket.getservbyport(i)} Response:{str(d[0][0][1][2].flags)}")
except:
pass
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-ip", help="Target IP", type=str)
parser.add_argument("-p", help="Port -p 1,100 or -p 100", type=str, default="1,1000")
parser.add_argument("-F", help="Activate FastScan", type=int, default=0)
parser.add_argument("-S", help="Activate Spoofing", type=int, default=0)
parser.add_argument("-C", help="Activate CustomScan", type=int, default=0)
parser.add_argument("-t", help="Set Timeout", type=float, default=1)
parser.add_argument("-flag", help="Set Flag ,S,SA,R,F... ", type=str, default="S")
parser.add_argument("-msg", help="Raw Load", type=str, default="")
parser.add_argument("-dlen", help="Receive length", type=int, default=200)
parser.parse_args()
args = parser.parse_args()
if len(args.p.split(",")) == 2:
sp = int(args.p.split(",")[0])
ep = int(args.p.split(",")[1])
else:
sp = 1
ep = int(args.p.split(",")[0])
if args.F == 0 and args.C == 0:
portScan(args.ip,sp,ep,args.S,args.t,args.dlen,args.flag,args.msg).scan()
elif args.F == 1 and args.C ==0:
portScan(args.ip,sp,ep,args.S,args.t,args.dlen,args.flag,args.msg).Fscan()
elif args.F == 0 and args.C == 1:
portScan(args.ip,sp,ep,args.S,args.t,args.dlen,args.flag,args.msg).Cscan()
try:
main()
except Exception as e:
print(f"[-] {'\033[33m'} {e}")