如何让Netcat显示数据包的有效负载

时间:2012-08-21 20:46:46

标签: python scapy netcat

我不知道这是否可行,但我在想?

我正在进行一些内部测试并使用Scapy和Netcat,我创建了一个带有“有效负载”的TCP数据包。我希望使用以下示例代码将有效负载内容传送到Netcat的侦听端口:

test = IP(src="192.168.4.134")/TCP(dport=1234)/"testing"
send(test)

但所有打印的都是:

.
Sent 1 packets

Scapy发送数据包后吐出的是什么。我一直试图弄清楚我需要在我的代码中使用什么才能显示出来。我知道Netcat使用stdin和stdout,但我还不知道如何在Python中编码,我只是在练习!

有人可以帮忙吗?的问候,

1 个答案:

答案 0 :(得分:2)

TCP是基于会话的。想要通信的机器必须首先彼此同步(设置会话)。

这个过程是什么称为3次握手,使用步骤: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)同步。

IP 10.22.4.45.20 > 10.1.2.3:1234: Flags [S], seq 0:7, win 8192, length 7
IP 10.1.2.3:1234 > 10.22.4.45:20: Flags [S.], seq 2668993358, ack 1, win 14600, options [mss 1460], length 0
IP 10.22.4.45:20 > 10.1.2.3:1234: Flags [R], seq 1, win 0, length 0

如您所见,计算机B(netcat)尝试与您的计算机进行同步,但由于您只是发送了一个数据包并且没有侦听返回的SYN-ACK,因此您的计算机会生成一个RST(重置并且在3次握手完成之前关闭尝试的连接。

有两种选择。使用无连接的UDP并且不需要此连接设置,或者执行完整的TCP握手。如果您选择后者,Scapy有几种方法可以帮助您管理TCP会话:http://trac.secdev.org/scapy/wiki/TCP