基于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脚本操作文件的小示例分享
Aug 27 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
对python程序内存泄漏调试的记录
Jun 11 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python实现名片管理器的示例代码
Dec 17 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Python 制作自动化翻译工具
Apr 25 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
PHP生成HTML静态页面实例代码
2008/08/31 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
JavaScript获取某一天所在的星期
2019/09/05 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现汉诺塔方法汇总
2016/07/25 Python
替换python字典中的key值方法
2018/07/06 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
尊师重教演讲稿
2014/09/04 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
MySQL 条件查询的常用操作
2022/04/28 MySQL