基于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操作json数据的一个简单例子
Apr 17 Python
Python入门篇之正则表达式
Oct 20 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
如何理解Python中包的引入
May 29 Python
python中np是做什么的
Jul 21 Python
提取视频中的音频 Python只需要三行代码!
May 10 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php文档更新介绍
2011/07/22 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php获取操作系统语言代码
2013/11/04 PHP
培养自己的php编码规范
2015/09/28 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python安装gdal的两种方法
2019/10/29 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
中英文求职信范文
2014/01/27 职场文书
质量负责人任命书
2014/06/06 职场文书
有限公司股东合作协议书
2014/10/29 职场文书