基于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下如何查询CS反恐精英的服务器信息
Jan 17 Python
python 生成图形验证码的方法示例
Nov 11 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
实时获取Python的print输出流方法
Jan 07 Python
python中web框架的自定义创建
Sep 08 Python
python3 pathlib库Path类方法总结
Dec 26 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
Python 生成VOC格式的标签实例
Mar 10 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python 下载文件的几种方式分享
Apr 07 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 创建标签云函数代码
2010/05/26 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
JS中Iframe之间传值的方法
2013/03/11 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
JavaScript模块详解
2017/12/18 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
python集合用法实例分析
2015/05/30 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
python退出循环的方法
2020/06/18 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
公司董事长职责
2013/12/12 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android
spring 项目实现限流方法示例
2022/07/15 Java/Android