基于python模拟TCP3次握手连接及发送数据


Posted in Python onNovember 06, 2020

源码如下

from scapy.all import *
import logging
logging.getLogger('scapy.runtime').setLevel(logging.ERROR)

target_ip    = '192.168.1.1'
target_port   = 80
data      = 'GET / HTTP/1.0 \r\n\r\n'

def start_tcp(target_ip,target_port):
  global sport,s_seq,d_seq  #主要是用于TCP3此握手建立连接后继续发送数据
  try:
    #第一次握手,发送SYN包
    ans = sr1(IP(dst=target_ip)/TCP(dport=target_port,sport=RandShort(),seq=RandInt(),flags='S'),verbose=False)
    sport = ans[TCP].dport  #源随机端口
    s_seq = ans[TCP].ack   #源序列号(其实初始值已经被服务端加1)
    d_seq = ans[TCP].seq + 1 #确认号,需要把服务端的序列号加1
    #第三次握手,发送ACK确认包
    send(IP(dst=target_ip)/TCP(dport=target_port,sport=sport,ack=d_seq,seq=s_seq,flags='A'),verbose=False)
  except Exception,e:
    print '[-]有错误,请注意检查!'
    print e

def trans_data(target_ip,target_port,data):
  #先建立TCP连接
  start_tcp(target_ip=target_ip,target_port=target_port)
  #print sport,s_seq,d_seq
  #发起GET请求
  ans = sr1(IP(dst=target_ip)/TCP(dport=target_port,sport=sport,seq=s_seq,ack=d_seq,flags=24)/data,verbose=False)
  #ans.show()
  #读取服务端发来的数据
  rcv = ans[Raw]
  print rcv

if __name__ == '__main__':
  #start_tcp(target_ip,target_port)
  trans_data(target_ip,target_port,data)

运行结果如下

# python exp3.py
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="wed, 26 Feb 1997 08:21:57 GMT">
<html><head><title>505 HTTP Version not supported</title></head><body><center><h1>505 HTTP Version not supported</h1></center></body></html>�p�-1���-1��2��2��D��o�p�-1��`��D

wireshark抓包截图如下:

基于python模拟TCP3次握手连接及发送数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中文编码那些事
Jun 25 Python
python中redis的安装和使用
Dec 04 Python
Python模块WSGI使用详解
Feb 02 Python
详解Python3的TFTP文件传输
Jun 26 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
Python实现京东秒杀功能代码
May 16 Python
基于python的Paxos算法实现
Jul 03 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
详解Flask前后端分离项目案例
Jul 24 Python
如何使用Django Admin管理后台导入CSV
Nov 06 #Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 #Python
python两种获取剪贴板内容的方法
Nov 06 #Python
用python写一个带有gui界面的密码生成器
Nov 06 #Python
python如何编写类似nmap的扫描工具
Nov 06 #Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 #Python
基于Python模拟浏览器发送http请求
Nov 06 #Python
You might like
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
JS中数组重排序方法
2016/11/11 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python放大图片和画方格实现算法
2018/03/30 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python绘制雪景图
2019/12/16 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
自我评价正确写法范文
2013/12/10 职场文书
清洁工个人工作总结
2015/03/05 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
综治目标管理责任书
2015/05/11 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
解析Java中的static关键字
2021/06/14 Java/Android
如何通过cmd 连接阿里云服务器
2022/04/18 Servers