<强> 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的核心了,他会返回两个列表数据,一个是回答列表另一个是回答