参照的文档
<br />
构造数据包
在 Scapy 中可以用特别简单的方法来构造一个数据包,比如构造一个 IP 包,并传入一些参数:
使用 / 可以将不同的包进行组合:
除了一个数据包一个数据包地构造,Scapy 还支持同时构造多个数据包:
此外,使用 fuzz 函数可以快速构造随机模板,同时保证其它参数是正确的,如:
在此构造中,IP 层是普通的,而 UDP 和 NTP 层是 fuzz 的。因此,除了 UDP 和校验和必须正确和 UDP 的目标端口必须是 123(NTP 协议要求)之外,其他的都是随机的
<br />
发送数据包
构造好了数据包之后,是时候把它们发出去了。Scapy 提供了基于第三层即网络层的 send 函数,和基于第二层即数据链路层的 sendp 函数,这意味着,使用 sen
![Uploading Screenshot from 2016-05-13 20-27-49_682712.png . . .]
d 函数不需要我们考虑路由和第二层的细节,而使用 sendp 函数需要我们指定发送数据包的网卡和链路层的协议。
接受数据包
在 Scapy 中使用 sr 函数、sr1 函数来发送和接收第三层的数据包(IP, ARP等),而 srp 函数用于发送和接受第二层的数据包(Ethernet,802.3等)
例如,我们向 bing.com 发送一个 ICMP 包:
sr 函数是 Scapy 的核心,这个函数返回两个列表,第一个列表是收到应答的包和其对应的应答,第二个列表是未收到应答的包,通常,我们需要调用别的函数来使得这两个返回值更易于阅读,如:
如果远程主机对于应答的速率有限制,我们可以通过设置 inter 参数来设置发送相邻两个包直接的时间间隔,此外,我们可以通过设置 timeout 参数来设置等待应答的超时时间,还可以设置 retry 参数来设置重试次数。在 Scapy 中,如果 retry = 3,那么 Scapy 会尝试发送未应答的包 3 次,如果 retry = -3 ,Scapy 会一直发送未应答的包直到没有更多的答案是相同的包 3 次(表示没有理解这句话,原文是:If retry is -3, scapy will resend unanswered packets until no more answer is given for the same set of unanswered packets 3 times in a row.)