scapy三向握手不起作用

时间:2016-01-07 10:12:52

标签: python sockets tcp scapy

我想用scapy做tcp 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 l.t.TcpServer - in,/ 10.16.11.21:34906"

所以,我不确定我的scapy代码是否连接成功,我也想知道  如何验证tcp connect是否有效。感谢

1 个答案:

答案 0 :(得分:0)

检查在SYN + ACK到达时是否看到从您的操作系统发送的RST。如果有,请查看this answer并使用iptables删除RST:

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

如果不是这种情况,请查看this gist,这对我来说很合适。