TCP是基于会话的。要进行通信的计算机必须首先彼此同步(设置会话)。在
这个过程被称为三方握手,使用以下步骤:SYN、SYN-ACK、ACK。在1.) Machine A ====SYN====> Machine B (Machines A, running scapy, tries to synch with B, running netcat)
2.) Machine B ==SYN-ACK==> Machine A (Machine B ACKs and SYNs with Machine A)
3.) Machine A ====ACK====> Machine B (Machine A ACKs the SYN-ACK from Machine B)
这些机器现在有一个会话(连接),可以互相发送数据。在
在监听机器上运行netcat并尝试从scapy向其发送单个包失败,因为您的机器(a)无法与运行netcat的机器(B)同步。在
^{pr2}$
如您所见,机器B(netcat)尝试与您的机器进行syn ack,但是由于您刚刚向它发送了一个单独的数据包,并且没有监听返回的syn-ack,您的机器会生成一个RST(重置),并且尝试的连接在三方握手完成之前关闭。在
有两种选择。请使用无连接且不需要此连接设置的UDP,或者执行完整的TCP握手。如果您选择后者,Scapy有几种方法可以帮助您管理TCP会话的创建:http://trac.secdev.org/scapy/wiki/TCP