基于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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
有关Python的22个编程技巧
Aug 29 Python
在双python下设置python3为默认的方法
Oct 31 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
python pytest进阶之fixture详解
Jun 27 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 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模拟登陆的实现方法分析
2015/01/09 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP文件操作实例总结
2016/09/27 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
历史系毕业生自荐信
2013/10/28 职场文书
临床医学应届生求职信
2013/11/06 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
银行员工考核评语
2014/12/31 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL