Python Scapy随心所欲研究TCP协议栈

  

<强> 1。前言

  

如果只需要研究Linux的tcp协议栈行为,只需要使用packetdrill就能够满足我的所有需求.packetdrill才是让我随心所欲地撩tcp协议栈.packetdrill的简单使用手册。

  

然而悲剧的是,除了要研究Linux的TCP协议栈行为,还需要研究Windows的TCP协议栈的行为,窗户不开源,感觉里面应该有挺多未知的坑。

  

为了能够重现窗户的tcp协议栈的一些网络行为,这里使用python的scapy进行包构造撩撩Windows的tcp协议栈.scapy在tcp数据报文注入会有一点的时延,这个工具在要求时延严格的场景无法使用(还是packetdrill好用,囧)。针对目前遇到的场景,勉强能用,再则已经撸惯了python,上手起来比较容易。

  

<强> 2。基本语法

  
      <李>安装scapy李   
  

在Centos 7.2中直接使用yum安装来安装。

        yum安装scapy。noarch      
      <李>帮助能解决大部分问题   
        # scapy root@localhost ~   python gnuplot包装信息:不能进口。不能阴谋。   信息:不能进口检验。无法使用psdump()或pdfdump ()。   警告:没有为IPv6路由发现目的地::(没有默认路由# 63,)   欢迎来到Scapy (2.2.0)   在在在帮助(发送)      

在大部分时候,如果看到不明白的地方,请用帮助。其次是官方的参考手册

  
      <李>基本语法   
  

http/tcp/ip数据包操纵

        在在在IP ()   & lt; IP |比;   在在在在TCP/IP () ()   & lt; tcp IP碎片弹=0原型=| & lt; tcp |祝辞祝辞   在在在在IP(原型=55)/TCP ()   & lt; IP碎片弹=0原型=55 | & lt; TCP在祝辞   在在在在醚()TCP/IP ()/()   & lt;醚类型=IPv4 | & lt; tcp IP碎片弹=0原型=| & lt; tcp |祝辞祝辞祝辞   在在在在TCP/IP () ()/?HTTP/1.0 \ r \ n \ r \ n”数据部分可以直接使用字符串   & lt; tcp IP碎片弹=0原型=| & lt; tcp | & lt;原始负荷='得到/HTTP/1.0 \ r \ n \ r \ n”|祝辞祝辞祝辞   在在在在醚()()/IP/UDP ()   & lt;醚类型=IPv4 | & lt; IP碎片弹=0原型=udp | & lt; udp |祝辞祝辞祝辞   在在在在醚()/IP () ()/IP/UDP ()   & lt;醚类型=IPv4 | & lt; IP碎片弹=0原型=ipencap | & lt; IP碎片弹=0原型=udp | & lt; udp |在在在在   在在在str (IP ())   “E \ x00 \ x00 \ x14 \ x00 \ x01 \ x00 \ x00@ \ x00 | \ xe7 \ x7f \ x00 \ x00 \ x01 \ x7f \ x00 \ x00 \ x01”   在在在IP (_)   & lt; IP版本=4 l ihl=5 l tos=0 x0 len=20 id=1标志==0 l ttl=干掉64原型=hopopt   chksum=0 x7ce7 src=https://www.yisu.com/zixun/127.0.0.1 dst=127.0.0.1 |>>=醚()/IP (dst=" www.baidu.com ")/TCP()/?索引。html HTTP/1.0 \ n \ n”   在在在hexdump (a)   0000 00 03年6 0 f 19 49 08年00 27日菲D8 12 08年45 00 00 ....霁..... E . .”。   06 0010 00 43 00 00 00 70 78 C0 A8 73 C6 B4 61 c .... @.px . . s . .   0020年21日6 c 14 50 00 00 00 00 00 00 00 00 00 00 50 02 ! l P ........ P。   0030 75 00 00 00 B3 47 45 54 20 f 69 6 e 64 65 78 . .你. .GET/索引   0040 68 74 6 d 6 c e 20 48 54 54 50 2 f 31 2 e 20 30 0 . html的HTTP/1.0。   0050 0。   在在在b=str (a)   在在在b   “\ x00 \ x03 \ x0f \ x19jI \ (\ x00以“\ xfe \ xd8 \ x12 \ (\ x00E \ x00 \ x00C \ x00 \ x01 \ x00 \ x00@ \ x06px   \ xc0 \ xa8s \ . xc6 \ xb4a !l \ x00 \ x14 \ x00P \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00P \ x02 \ x00 \ xb3u   \ x00 \ x00GET/索引。html HTTP/1.0 \ n \ n”      

1。数据包发送
  

  

数据包的发送主要包括以下函数发送/sendp/sr/sr1/srp主要区别是:

  

发送函数工作在第三层

        发送(IP (dst=?92.168.115.188”)/ICMP ())      

sendp函数工作在第二层,你可以选择网卡和协议

        sendp(醚()/IP (dst=?92.168.115.188 ttl=(1、4)), iface=癳th0”)      

模糊函数的作用,可以更改一些默认的不可以被计算的值(比如校验和校验和),更改的值是随机的,但是类型是符合字段的值的。

        发送(IP (dst=" www.baidu.com ")/UDP()/国家结核控制规划(version=4),循环=2)#未使用模糊()   发送(IP (dst=" www.baidu.com ")/模糊(UDP()/国家结核控制规划(version=4)),循环=2)#使用模糊()      

SR()函数用来来发送数据包和接收响应。该函数返回有回应的数据包和没有回应的数据包;该函数也算得上是scapy的核心了,他会返回两个列表数据,一个是回答列表另一个是回答

Python Scapy随心所欲研究TCP协议栈