2016-01-07 19 views
0

我想用Scapy的做TCP 3路握手,我的代碼如下:Scapy的3路握手不行

from scapy.all import * 
# VARIABLES 
src = sys.argv[1] 
dst = sys.argv[2] 
sport = random.randint(20000,65535) 
dport = int(sys.argv[3]) 
print src 
print dst 
print sport 
print dport 
# SYN 
ip=IP(src=src,dst=dst) 
SYN=TCP(sport=sport,dport=dport,flags='S',seq=1000) 
SYNACK=sr1(ip/SYN) 
SYN.show() 
SYNACK.show() 
# ACK 
seq=SYNACK.ack + 1 
ack=SYNACK.seq + 1 
print seq 
print ack 
ACK=TCP(sport=sport, dport=dport, flags='A', seq=seq, ack=ack) 
sr1(ip/ACK) 
ACK.show() 

exec命令:

python 3WSK.py 10.16.11.21 10.11.157.130 26789 

而且SYNACK結果如下:

###[ IP ]### 
version = 4L 
ihl  = 5L 
tos  = 0x0 
len  = 44 
id  = 0 
flags  = DF 
frag  = 0L 
ttl  = 60 
proto  = tcp 
chksum = 0x821a 
src  = 10.11.157.130 
dst  = 10.16.11.21 
\options \ 
###[ TCP ]### 
sport  = 26789 
dport  = 35067 
seq  = 1918207620 
ack  = 1001 
dataofs = 6L 
reserved = 0L 
flags  = SA 
window = 5840 
chksum = 0xd630 
urgptr = 0 
options = [('MSS', 1460)] 
###[ Padding ]### 
load  = '\x00\x00' 

但我的tcp服務器沒有記錄任何東西。

測試: 我用telnet 10.11.157.130 26789連接我的TCP服務器,那麼我的TCP服務器可以記錄是這樣的: 「INFO ltTcpServer - 中,/10.16.11.21:34906」

所以,我真的不確定我的scapy代碼連接成功與否,我也想知道
如何驗證tcp connect是否工作。謝謝

回答

0

檢查當SYN + ACK到達時是否看到從OS發送的RST。如果是的話看看this answer和使用iptables降RST:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -s <your_ip> -j DROP

如果那不是這樣看看this gist這對我來說工作正常。