python 使用scapy进行帧注入

本文介绍了如何使用scapy库来构造并注入以太网帧,包括构造IP数据包、发送数据包以及在层次2和层次3上发送和接收包的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 描述

  使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的。在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识。下图为以太网帧格式和scapy对应的封装包格式。
  scy_ent


2. 示例

2.1 使用scapy构造IP数据包

  进入scapy环境,输入以下代码:
  

>>>
>>> pkt = IP()/ICMP()/”hello”
>>>
>>>
>>> pkt.show()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= icmp
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
###[ ICMP ]###
type= echo-request
code= 0
chksum= None
id= 0x0
seq= 0x0
###[ Raw ]###
load= ‘hello’
  
  

 上面代码的意思是,构造一个pkt的包,在IP层中封装了ICMP包,负载的数据位“hello”。通过pkt.show()函数显示包的详细信息。

2.2 发送packet

  • sendp——在第二层次上发送数据包。需要给定正确的网卡接口。
  • send——在第三层次上发送数据包。根据本地的路由表来进行路由发送。
    • 循环发送相同的包。
    • 间隔几秒发送一次包。
2.2.1 第三层次上发送包(layer 3)

  首先,我们在第三层次上发送packet来做测试。在这之前先另起一个终端,输入以下命令,对流量做一下监听。
  tcpdump -i eth0 -XX -vvv icmp
  然后运行send(pkt)命令发送数据包,观察结果:
send

  监听结果:
  moni_re
  从结果上看,我们发送了一个ICMP请求包,收到了百度的一个ICMP答复包,还可以看到我们发送的数据。

####2.2.2 第三层次发送包(layer 3)
  使用重构数据包,然后用sendp()函数发送。
  sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0")
  Ether()构造以太网帧,和第三层次不同的是,在第二层次上发送要指定网卡接口, 这里我使用eth0。执行代码,成功发送一个数据包。如果想要循环发送,可以使用loop选项。
  sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0",loop=1)
  代码执行后,会快速的循环发送这个数据包,使用ctrl+C结束。
  sendp
  如果想在两次发送数据包之间有一定的时间间隔,使用inter选项。
  sendp(Ether()/IP(dst= "www.baidu.com")/ICMP()/"XXX",iface="eth0",loop=1,inter=1)
  表示每隔1秒发送一个数据包。

2.3 在层次2和层次3上发送和接收包

  • 层次3
    • ——sr()。返回答复和没有答复的包。
    • ——sr1()。返回仅仅答复或者发送的包。
  • 层次2
    • ——srp()
    • ——srp1()

执行sr(IP(dst="www.baidu.com")/ICMP()/"XXX"),观察执行结果:
sr

  成功发送了一个数据包,接收到了2个数据包,其中一个为答复包。这是我要集中注意的地方。将收到的数据赋值给自定义的变量,并查看。
  res
  
  使用sr1()函数,效果:
  sr1
  

Scapy是一个强大的交互式数据包处理程序,使用Python编写。它可以伪造或解码各种网络协议的数据包,发送、捕获、匹配请求和回复包等等。它可以轻松处理一些常见操作,如端口扫描、tracerouting、探测、单元测试、攻击或网络发现。Scapy还具有一些其他优秀的特性,如发送无效数据注入修改的802.11数据、解码加密通道(VOIP)上的WEP、ARP缓存攻击(VLAN)等。它是其他工具无法完成的任务的理想选择。\[3\] 在使用Scapy之前,你需要导入相关的模块。例如,你可以使用以下代码导入Scapy的相关模块: ``` from scapy.layers.inet import * from scapy.all import * ``` 接下来,你可以使用Scapy构造数据包、发送数据包、捕获数据包等等。你可以使用`IP()`、`TCP()`等函数构造不同类型的数据包,并使用`send()`或`sendp()`方法发送数据包。你还可以使用`sniff()`函数来捕获数据包,并指定过滤条件、网卡、处理函数和捕获数量等参数。你还可以使用`wrpcap()`和`rdpcap()`函数来保存和读取数据包。\[2\] 总之,Scapy是一个功能强大的Python库,用于处理网络数据包。它提供了丰富的功能和灵活的接口,使得网络数据包的处理变得更加简单和高效。 #### 引用[.reference_title] - *1* *2* [Python-scapy库](https://blog.youkuaiyun.com/qingguaxiaoxiao/article/details/131170191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python———scapy库(数据包发送)](https://blog.youkuaiyun.com/weixin_43803070/article/details/90549701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值