基于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实现在控制台输入密码不显示的方法
Jul 02 Python
在Python中使用正则表达式的方法
Aug 13 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
如何利用python发送邮件
Sep 26 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 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
全文搜索和替换
2006/10/09 PHP
PHP Google的translate API代码
2008/12/10 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
在视频前插入广告
2006/11/20 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
原生js实现轮播图
2017/02/27 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
微信小程序实现菜单左右联动
2020/05/19 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
Python数据结构之单链表详解
2017/09/12 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
银行求职信模板
2015/03/20 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL