-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfast.py
83 lines (76 loc) · 2.05 KB
/
fast.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
#! -*- coding:utf-8 -*-
from scapy.all import *
import sys
import threading
dip='192.168.0.113'
startp=1
endp=100
t_num=4 #线程数
open=set([])
close=set([])
filter=set([])
filter_temp=set([])
ip=IP(dst=dip)
tcp = TCP(dport=85, flags="S")
pkt = ip / tcp
# pkt=IP(raw(pkt))
times=int((endp-startp+1)/t_num)
t = []
lock = threading.Lock()
def one_tcp_open(pkt,port):
pkt['TCP'].dport = port
pkt['TCP'].sport = random.randint(1000, 10000)
recv = sr1(pkt, verbose=0, timeout=1)
if recv is None:
lock.acquire()
filter.add(port)
lock.release()
elif recv['TCP'].flags == 'SA':
lock.acquire()
open.add(port)
lock.release()
pktR = copy.deepcopy(pkt)
pktR['TCP'].flags = 'R'
sr1(pktR, verbose=0, timeout=0.1)
elif recv['TCP'].flags == 'RA':
lock.acquire()
close.add(port)
lock.release()
def is_tcp_open(pkt,startp,endp):
l=list(range(startp,endp))
random.shuffle(l)
for p in l:
one_tcp_open(pkt, p)
for i in range(t_num):
pkt1=copy.deepcopy(pkt)
t1=threading.Thread(target=is_tcp_open,args=(pkt1,startp+i*times,startp+(i+1)*times))
t1.start()
t.append(t1)
for i in range(t_num):
t[i].join()
is_tcp_open(pkt,startp+t_num*times,endp)
for i in range(2):
if len(close)<len(filter) or len(open)<len(filter):
break
if filter is not None:
for p in filter:
pkt['TCP'].dport = p
pkt['TCP'].sport = random.randint(1000, 10000)
recv = sr1(pkt, verbose=0, timeout=1)
if recv is None:
pass
elif recv['TCP'].flags=='SA':
filter_temp.add(p)
open.add(p)
pktR = copy.deepcopy(pkt)
pktR['TCP'].flags = 'R'
sr1(pktR, verbose=0, timeout=0.1)
elif recv['TCP'].flags=='RA':
filter_temp.add(p)
close.add(p)
for i in filter_temp:
filter.remove(i)
filter_temp = set([])
print(open)
print(close)
print(filter)