基于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实现telnet服务器的方法
Jul 10 Python
简单学习Python time模块
Apr 29 Python
最大K个数问题的Python版解法总结
Jun 16 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
python爬取淘宝商品详情页数据
Feb 23 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python语法分析之字符串格式化
Jun 13 Python
Python基础之高级变量类型实例详解
Jan 03 Python
Python request中文乱码问题解决方案
Sep 17 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中ADODB类详解
2008/03/25 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
JavaScript 创建对象
2009/07/17 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python爬取哈尔滨天气信息
2018/07/14 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
python 多线程中join()的作用
2020/10/29 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
计算机网络专业求职信
2014/06/05 职场文书
基层党员对照检查材料
2014/09/24 职场文书
干部作风建设心得体会
2014/10/22 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
煤矿安全保证书
2015/02/27 职场文书
python OpenCV学习笔记
2021/03/31 Python
Python如何配置环境变量详解
2021/05/18 Python
Go gorilla/sessions库安装使用
2022/08/14 Golang