基于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之从格式化表达式到方法
Sep 28 Python
Python中使用SAX解析xml实例
Nov 21 Python
python中sleep函数用法实例分析
Apr 29 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
python代码实现备忘录案例讲解
Jul 26 Python
python之基数排序的实现
Jul 26 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页面缓存ob系列函数介绍
2012/10/18 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
JavaScript 指导方针
2007/04/05 Javascript
js tab 选项卡
2009/04/26 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Python复制文件操作实例详解
2015/11/10 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
python中rb含义理解
2020/06/18 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
秦兵马俑教学反思
2014/02/07 职场文书
入党申请自荐书范文
2014/02/11 职场文书
国际商务专业求职信
2014/07/15 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis