【Python】构造数据包Scapy——网络扫描、攻击工具

这篇具有很好参考价值的文章主要介绍了【Python】构造数据包Scapy——网络扫描、攻击工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Scapy介绍

:是Python的一个库,独立运行的工具(在Linux中,将scapy当作一个独立的工具来使用,可以不依赖Python)

使用场景:网络扫描、攻击工具

可以在自己程序中实现对网络数据包的发送、监听、解析,构建能够进行探测、扫描、攻击的网络工具。

Scapy是可以直接操作到数据包层次的工具,可以构造符合自己的数据包(泛指帧、段、报文等)

协议:通信时参与者必须遵守的规则集合,不同协议主要体现在产生的数据包的顺序与格式不同

层次:当QQ在登录时,会产生数据包。当多个协议存在于同一个数据包时,为了解析方便,分为不同层次

举例:以TCP/IP协议族为例,是一个4层协议模型,上层协议使用下次协议提供的服务

应用层 DNS DHCP HTTP HTTPS
传输层 TCP UDP
网络层 IP ICMP
链路层 ARP RARP

分层后构造数据包会很简单。一个数据包并不是必须同时包含这四层协议,也不是同一层只能包含1个协议

在kali中,命令:scapy,可以启动Scapy编程环境

scapy实现自定义数据包构造,python,安全

scapy实现自定义数据包构造,python,安全

2、Scapy中的分层结构

使用“类+属性”的方式构造数据包,在scapy中每一个网络协议就是一个类,协议中的字段就对应着属性。只需要实例化一个协议类,就可以创建一个该协议类型的数据包

例如,构造一个IP数据包

IP()

选择"from 模块 import 类"的形式导入

from scapy.all import IP
pkt=IP()
print(pkt)

对于IP来说,最重要的属性是源地址和目标地址,这两个属性在Scapy中使用参数src和dst来设置

要构造一个发往192.168.x.x的IP数据包

ip=IP(dst="192.168.x.x")

查看数据包格式的函数ls(),不了解如何为一个IP数据包指定目标地址的时候

from scapy.all import IP,ls
pkt=IP()
ls(pkt)

scapy采用分层的方式构造数据包,通常最底层的协议是Ether--》IP--》TCP/UDP

使用Ether(),这个类可以设置发送方和接收方的MAC地址。产生一个广播数据包,命令如下

Ether(dst="ff:ff:ff:ff:ff:ff")

分层是通过"/"实现的。如果一个数据包是由多层协议组合而成,就可以用“/”分开,并按照协议由底而上的顺序从左向右排列

使用Ether()/IP()/TCP()来构造一个TCP数据包

from scapy.all import *
pkt=Ether()/IP()/TCP()
ls(pkt)

构造一个HTTP数据包

pkt=IP()/TCP()/"GET / HTTP/1.0\r\n\r\n" 

3、Scapy中的常用函数

3.1 频率高的类:

Ether:属性有 源地址、目标地址和类型

IP:属性有 源地址、目标地址、版本、长度、协议类型、校验和

TCP:源端口、目标端口

3.2 函数

ls()函数:查看一个类所拥有的属性,ls(Ether())

lsc()函数:列出所有可以使用的函数

对属性列表里对应的属性进行设置,将ttl的值设置为32

pkt=IP(src="192.168.x.x",dst="192.168.y.y",ttl=32)

raw()函数:表示以字节格式来显示数据包内容,print(raw(pkt))

hexdump()函数:表示以十六进制数据表示的数据包内容,print(hexdump(pkt))

summary()函数:使用不超过一行的摘要内容来简单描述数据包,pkt.summary()让使用者可以简单明了地知晓数据包的内容

show()函数:使用展开视图的方式显示数据包的详细信息,比较常用的方法,使用者可以快速看到每一个属性的值,pkt.show()

show2()函数:作用与show()基本相同,使用pkt.show2()会显示数据包的校验和

command()函数:看到一个数据包,不知道如何使用命令来产生相同的数据包时。显示出构造该数据包的命令。pkt.command()还原pkt的构造命令

wrpcap()函数:使用scapy会捕获到大量的数据包,这些数据包需要保存起来,例如网络取证的时候。例如数据包临时存在pkts中,wrpcap("temp.cap",pkts)就可以将pkts中的数据包写入文件temp.cap

rdpcap()函数:读取数据包文件的功能。例如pkts=rdpcap("temp.cap")读取temp.cap文件中的数据包

4、在Scapy中发送和接收数据包

4.1 发送数据包

send()函数:用来发送IP数据包。将IP地址作为目标时。只发不收

sendp()函数:用来发送Ether数据包。将MAC地址作为目标时。只发不收

构造一个目标地址为:192.168.x.x的ICMP数据包,并将其发送出去

from scapy.all import *
pkt=IP(dst="192.168.x.x")/ICMP()
send(pkt)
sendp(Ether(dst="ff:ff:ff:ff:ff:ff"))

发送成功会显示:Sent 1 packets

4.2 发送和接收数据包

sr()函数:用于IP地址。是Scapy的核心,返回值是两个列表,第一个列表收到了应答的数据包和对应的应答数据包,第二个列表包含未收到应答的数据包。可以使用两个列表来保存sr()函数的返回值。

例如,向192.168.x.x(可以ping通的地址)发送一个ICMP数据包

数据包发送出去之后,scapy会监听接收到的数据包。Reveived表示收到的数据包个数,answers表示对应此次发送数据包的应答数据包

from scapy.all import *
pkt=IP(dst="192.168.x.x")/ICMP()
ans,unans=sr(pkt)  #使用ans,unans列表来保存sr()函数返回的值。
#发送出去的是ICMP数据包,收到了一个应答数据包,发送的数据包和收到的数据包都被保存到了ans列表中
ans.summary()  #查看两个数据包的内容。uans列表空

srl()函数:用于IP地址,使用与sr()类似。只返回一个应答数据包,只需使用一个列表就可以保存这个函数的返回值

srp()函数:用于MAC地址

5、Scapy中的抓包函数

5.1 sniff()函数

在自己的程序中捕获经过本机网卡的数据包。sniff()。过滤会有局限性

5.1.1 第一个参数

filter参数对数据包过滤。指定只捕获与192.168.x.x有关的数据包:sniff(filter="192.169.x.x")

sniff(filter="",iface="any",prn=function,count=N)
 5.1.2 第二个参数iface

指定要使用的网卡,默认为第一块网卡

5.1.3 第三个参数prn

表示对捕获到的数据包进行处理的函数,可以使用Lambda表达式

例如将获取到的数据包输出

sniff(filter="icmp",prn=lambda x:x.summary())

若函数较长,可以定义成回调函数,回调函数以接收到的数据包对象作为唯一的参数,最后再调用sniff()函数

def packet_callback(pkt):
    print(pkt.summary)
sniff(prn=packet_callback)
5.1.4 第四个参数count

用来监听到数据包的数量,达到指定的数量就会停止监听。

例如只希望监听到10个数据包就停止

sniff(count=10)

设计一个综合的监听器,它会在网卡eth0上监听源地址或目标地址为192.168.1.1的ICMP数据包并输出,当收到了3个这样的数据包之后,就会停止监听。

创建的监听器如下:

sniff(filter="icmp and host 192.168.1.1",prn==lambda x:x.summary(),count=3)

5.2 伯克利包过滤(BPF)

概念:自然语言接近的语法,这种语法构成的字符串可以确定保留哪些数据包以及忽略那些数据包

5.2.1 三种限定符

Type:表示指代的对象,例如IP、子网、端口等。常见host(用来表示主机名和IP地址)、net(用来表示子网)、port(用来表示端口)。如果没有指定,默认为host

Dir:表示数据包传输的方向,常见src(源地址)和dst(目的地址)。如果没有指定,默认为src or dst。例如192.168.x.x表示的是匹配源地址或者目标地址为192.168.x.x的数据包

Proto:表示与数据包匹配的协议类型,常见的是Ether、IP、TCP、ARP

5.2.2 标识符

指的是进行测试的实际内容。例如:一个IP地址192.168.1.1 ,一个子网192.168.1.0/24或者一个端口号8080,都是常见的标识符

常见的原语:host 192.168.1.1 和port 8080

and、or、not把多个原语组成一个更复杂的过滤语句

实例:
 

scapy实现自定义数据包构造,python,安全


 

参考书籍:《Python渗透测试实战》 作者李华峰文章来源地址https://www.toymoban.com/news/detail-769540.html

到了这里,关于【Python】构造数据包Scapy——网络扫描、攻击工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kail渗透工具之网络钓鱼攻击

    一、点击social  engineering  toolkit 二、输入kail Linux的密码 三、选择1进入社工模块 四、选择第二项网络攻击模块 五、选择第3项凭证收集攻击:   六、选择第1项——Web模板  七 、接着需要设置用于钓鱼的IP地址(192.168.80.131),select  a template为2 八、在谷歌浏览器中访问kail的

    2024年04月11日
    浏览(45)
  • 【网络安全】免费DDOS攻击测试工具

    DoS(Denial Of Service)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃。然而随着网络上免费的可用DDOS工具增多,Dos攻击也日益增长,

    2024年02月03日
    浏览(52)
  • 网络协议与攻击模拟_01winshark工具简介

    网络接口层(没有特定的协议)    物理层:PPPOE宽带拨号(应用场景:宽带拨号,运营商切网过来没有固定IP就需要拨号,家庭带宽一般都采用的是拨号方式) 数据链路层 网络层:IP(v4/v6) ARP(地址解析协议) RARP 、ICMP(internet控制报文协议) IGMP 传输层:TCP(传输控制

    2024年01月22日
    浏览(37)
  • 网络安全 中间人攻击-ARP欺骗 工具:Cain

    两台虚拟机:A和B,A中有工具Cain A是攻击机, B是靶机 首先,在B中使用cmd查看IP地址,注意网关 再查看B的ARP表 都查看完之后,回带有工具的虚拟机A中,打开Cain 下面开始在Cain中进行ARP毒化: 开启监听 开始嗅探: Sniffer——先清除以前的记录——添加扫描列表——选择目标,

    2024年02月06日
    浏览(45)
  • 基于Scapy的传统网络攻击实现

    Scapy是一个由Python编写的强大工具,目前很多优秀的网络扫描攻击工具都使用了这个模块。也可以在自己的程序中使用这个模块来实现对网络数据包的发送、监听和解析。Scapy还是一个功能强大的交互式数据包操作程序。它能够伪造或解码大量协议的数据包,通过线路发送,捕

    2023年04月23日
    浏览(33)
  • DDoS攻击的工具介绍

    1.1 什么是低轨道离子加农炮(LOIC)? 低轨道离子加农炮是通常用于发起DoS和DDoS攻击的工具。它最初是由Praetox Technology作为网络压力测试应用程序而开发的,但此后成为开源软件,现在主要被用于恶意目的。它以非常易于使用且易于获取的特性而闻名,并且因为被黑客组织Ano

    2023年04月08日
    浏览(29)
  • ARP伪造使用抓包工具进行ARP欺骗arp伪造攻击

    ARP(英文全写:Address Resolution Protocol),翻译成中文的意思是“地址解析协议”。 在局域网中,网络以“帧”的形式传输数据,一个主机要和另一个主机进行直接通信,就必须要知道目标主机的MAC地址。显然,在双方通信之初,发送方是无法知道目标主机的MAC地址的。那么,

    2023年04月17日
    浏览(50)
  • 漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用

    漏洞攻击中怎么去做最全面覆盖的sql注入漏洞攻击?表信息是如何泄露的?预编译就一定安全?最受欢迎的十款SQL注入工具配置及使用。 SQL注入是因为后台SQL语句拼接了用户的输入,而且Web应用程序对用户输入数据的合法性没有判断和过滤,前端传入后端的参数是攻击者可控

    2024年01月24日
    浏览(43)
  • 基于pyqt5+scapy 根据ip 具体端口 进行扫描 的程序

    先给出代码 实现做好ui 界面 后与python相连接  导入 相应的扫描程序  下面给出:有点缝合怪的感觉

    2024年01月17日
    浏览(41)
  • Python scapy二层、三层发送接收数据包

    Linux环境:安装scapy, 执行scapy 安装scapy yum install python3-pip (安装python3 pip) pip3 install --upgrade pip yum remove python-pip(删除pip) pip3 install scapy (安装scapy) send                : Send packets at layer 3 sendp              : Send packets at layer 2 sr                     : Send and receive packets

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包