TCP

Scapy基于刺激/反应模型. 此模型不适用于TCP堆栈. 另一方面,很多时候,TCP流被用作交换基于刺激/响应的消息的管道.

同样,Scapy提供了一种描述网络自动机的方法,该方法可用于创建TCP堆栈自动机.

通过Scapy使用TCP的方法有很多

Using the kernel’s TCP stack

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

>>> 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’s TCP client automaton

Scapy提供了一个简单的TCP客户端自动机(没有重新传输,没有SAck,没有时间戳等). Automata可以以超级套接字的形式提供输入和输出(请参见Automata的文档 ).

这是使用Scapy的TCP客户端自动机的方法(至少需要Scapy v2.1.1).

Note

TCP_client.tcplinkSuperSocket子类,因此其所有功能( .sniff() ,...)均可用.

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

Note

专门用于HTTP,您可以传递HTTP而不是Raw . Scapy中有关HTTP的更多信息.

Use external projects

  • muXTCP-编写自己的灵活的Userland TCP / IP堆栈-忍者风格!!!

  • Integrating pynids