基于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中的zipfile模块使用详解
Jun 25 Python
python 日志增量抓取实现方法
Apr 28 Python
python实现决策树ID3算法的示例代码
May 30 Python
使用Python更换外网IP的方法
Jul 09 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python读取ini配置文件过程示范
Dec 23 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
详解python内置模块urllib
Sep 09 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python机器学习之PCA降维算法详解
May 19 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+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP时间处理类操作示例
2018/09/05 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
python socket网络编程之粘包问题详解
2018/04/28 Python
python机器学习之KNN分类算法
2018/08/29 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
年终总结会主持词
2014/03/25 职场文书
关于安全演讲稿
2014/05/09 职场文书
购房个人委托书范本
2014/10/11 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
六年级情感作文之500字
2019/10/23 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server