基于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获取指定网页上所有超链接的方法
Apr 04 Python
深入理解Django中内置的用户认证
Oct 06 Python
python通过opencv实现批量剪切图片
Nov 13 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
python 数据提取及拆分的实现代码
Aug 26 Python
Python 支持向量机分类器的实现
Jan 15 Python
python3 字符串知识点学习笔记
Feb 08 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
在pycharm中实现删除bookmark
Feb 14 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 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
自己前几天写的无限分类类
2007/02/14 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
js 判断脚本加载完毕的代码
2011/07/13 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
Javascript浅谈之this
2013/12/17 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
Python2.x与Python3.x的区别
2016/01/14 Python
python Django批量导入不重复数据
2016/03/25 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
python开发游戏的前期准备
2019/05/05 Python
用python写爬虫简单吗
2020/07/28 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
python 解决函数返回return的问题
2020/12/05 Python
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
AJax面试题
2014/11/25 面试题
历史学专业推荐信
2013/11/06 职场文书
房屋改造计划书
2014/01/10 职场文书
医生进修自我鉴定
2014/01/19 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
村党组织公开承诺书
2015/04/30 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
MySQL插入数据与查询数据
2022/03/25 MySQL