TCP

scapy基于刺激/响应模型。对于TCP堆栈,此模型不能很好地工作。另一方面,TCP流经常被用作交换基于刺激/响应的消息的管道。

此外,scapy还提供了一种描述网络自动机的方法,可用于创建TCP堆栈自动机。

使用TCP和scapy有很多方法

使用内核的TCP堆栈

scapy提供了 StreamSocket 对象,该对象可以将简单套接字转换为适合与一起使用的scapy supersocket sr() 命令族。

>>> s=socket.socket()
>>> s.connect(("www.test.com",80))
>>> ss=StreamSocket(s,Raw)
>>> ss.sr1(Raw("GET /\r\n"))
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
<Raw  load='<html>\r\n<head> ... >

使用内核的TCP堆栈意味着您将依赖于本地防火墙的规则和内核的路由表。

scapy的TCP客户端自动化

scapy提供了一个简单的TCP客户机自动化(无重传、无SACK、无时间戳等)。automata可以以超级套接字的形式提供输入和输出(请参见 Automata's documentation

下面是如何使用scapy的tcp客户端自动化(至少需要scapy 2.1.1版)。

注解

TCP_client.tcplink 是一个 SuperSocket 子类,因此它的所有函数 (.sniff() ,…)可用。

>>> s = TCP_client.tcplink(Raw, "www.test.com", 80)
>>> s.send("GET /\r\n")
7
>>> s.recv()
<Raw  load='<html>\r\n<head> ... >

使用外部项目

  • muXTCP -编写您自己的灵活的userland tcp/ip堆栈-忍者风格!!!!

  • 集成 pynids