当前位置:   article > 正文

[转]使用Python scapy构造tcp三次握手,遭遇系统发送rst包解决方法_tcp第三次握手不发ack反而发rst

tcp第三次握手不发ack反而发rst

  • 连接建立
    • SYN=1, seq=x
    • SYN=1, ACK=1, seq=y, ack=x+1
    • ACK=1, seq=x+1, ack=y+1
  1. from scapy.all import *
  2. dst_ip = "192.168.1.1"
  3. dst_port = 80
  4. src_port = 20001
  5. data = "GET / HTTP/1.0/nihao \r\n\r\n"
  6. ##数据是我随意构造的,一个随便的http请求
  7. try:
  8. ##产生SYN包(FLAG = S 为SYN)
  9. spk1 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,flags="S")
  10. res1 = sr1(spk1)
  11. ack1 = res1[TCP].ack
  12. ack2 = res1[TCP].seq + 1
  13. ##发送ACK(flag = A),完成三次握手
  14. spk2 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,seq=ack1,ack=ack2,falgs="A")
  15. send(spk2)
  16. except Exception as e:
  17. print(e)
  18. ##握完手后,由你先给他发第一个数据包,需要照搬第三个包的确认号和验证号,同时flags设值为24,后面跟##数据即可
  19. da1 = IP(dst=dst_ip)/TCP(dport=dst_port,sport=src_port,seq=ack1,ack=ack2,flags=24)/data
  20. res2 = sr1(da1)

  • 释放连接(四次挥手)
    • FIN=1, seq=u
    • ACK=1, seq=v, ack=u+1
    • FIN=1, ACK=1, seq=w, ack=u+1
    • ACK=1, seq=u+1, ack=w+1

在使用Pyhon scapy库构造TCP时,遭遇到系统底层发送的rst包,导致三次握手无法建立情况。

在网上找了很多解决方案,linux相对好解决,直接使用
iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
可以干掉系统rst包干扰。

但在windows系统下,发现这个问题后,真的很伤脑经。

查了很多地方,都没有好的解决方案。
最终无意中将windows自带防火墙打开后,系统自发rst包消失了 
————————————————
 

原文链接:https://blog.csdn.net/weixin_44704374/article/details/103492578

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/730258
推荐阅读
相关标签
  

闽ICP备14008679号