【转】scapy 构造以太网注入帧
1. 描述
使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的。在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识。下图为以太网帧格式和scapy对应的封装包格式。
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)命令发送数据包,观察结果:
监听结果:
从结果上看,我们发送了一个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结束。
如果想在两次发送数据包之间有一定的时间间隔,使用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"),观察执行结果:
成功发送了一个数据包,接收到了2个数据包,其中一个为答复包。这是我要集中注意的地方。将收到的数据赋值给自定义的变量,并查看。
使用sr1()函数,效果:
【转】scapy 构造以太网注入帧的更多相关文章
- WCF+Autofac 实现构造函数依赖注入
1.新建一个项目 2.要对WCF服务实现Autofac注入,需要实现2个接口,IInstanceProvider与IServiceBehavior,并让实现IServiceBehavior的类成为一个 ...
- 【转】以太网最大帧和最小帧、MTU
根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步码 + ...
- 以太网最大帧和最小帧、MTU
根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步码 + ...
- scapy构造打印ARP数据包
ARP格式: 用于以太网的ARP请求/应答分组格式 各字段含义: 帧类型:表示数据部分用什么协议封装(0800表示IP,0806表示ARP,8035表示RARP). 硬件类型:表示硬件地址的类型(其中 ...
- HCNA(二)以太网的帧结构
一.网络通讯协议 一般地,关注于逻辑数据关系的协议通常被称为上层协议,而关注于物理数据流的协议通常被称为低层协议. IEEE802就是一套用来管理物理数据流在局域网中传输的标准,包括在局域网中传输物理 ...
- scapy构造数据包
一.进入scapy交互界面 在终端下输入:scapy ,进入交互界面: 二.查看scapy已经实现的网络协议 ls() 列出scapy中已实现的网络协议 ls(协议类型) 查看某个协议头部字段格式 l ...
- laravel中的构造函数依赖注入理解
laravel中的自动依赖注入是非常强大的,刚开始会疑惑为什么只要在构造函数中传入一个强制类型的变量(就是参数有类型限制)过去就行了? 通过查看源码即查阅资料发现其实这其中有一个php技术,就是反射技 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议之以太网帧
摘要: 本文摘抄并整理了以太网相关理论知识,包括CSMA/CD协议机制及工作.LAN互连,详细分析了Ethernet II帧格式,最后给出Ethernet II帧实例. 一.以太网[1] 1. ...
- SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- DI和IOC相比,DI更偏向于实现 DI的set方式注入在前面入门案例里有写,所以此处不多啰嗦,直接开搞,先说 ...
随机推荐
- Redis之发布订阅
一 什么是发布订阅 发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知 Redis 发布订阅(pub/sub)是一种消息通信模式: ...
- Minimum Cost POJ - 2516 (模板题 spfa最小费用最大流)
题意: 人回家,一步一块钱,有x个人,y个房子,求能回家的最大人数且使之费用最小 解析: 就是....套模板,,,, 建图(⊙﹏⊙)...要仔细观察呐 对于人拆不拆都可以 都能过,,,,这里贴上拆开 ...
- servlet表单的get和post方法的实现
几经周折,这个简单的小程序终于实现了,全新的编译环境和领域,适应起来有点慢,学习能力还是有待提高 使用IDEA2017.3.3创建简单的servlet程序: 1.创建一个项目 file - new p ...
- 【BZOJ1802】[AHOI2009]checker(动态规划)
[BZOJ1802][AHOI2009]checker(动态规划) 题面 BZOJ 洛谷 题解 首先自己观察一波,发现如果有相邻两个格子都是红色的话,那么显然可以在任意位置都存在一个跳棋.可以让两个位 ...
- bzoj5280/luogu4376 MilkingOrder (二分答案+拓扑序)
二分答案建图,然后判环,就可以了. 字典序输出的话,只要做拓扑序的时候用优先队列来维护就可以了. (其实判环也可以用拓扑序...) #include<cstdio> #include< ...
- Bean和Spirng模块
容纳Bean 在Spring中,应用对象生存于Spring容器中,如图所示,Spring容器可以创建.装载.配置这些Bean,并且可以管理它们的生命周期. Spring的容器实现 Bean工厂(org ...
- Java NIO -- DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道.操作步骤:打开 DatagramChannel接收/发送数据 代码举例: package com.soyoungboy.n ...
- 几个面试经典算法题Java解答
题目一: public class testClockwiseOutput { //顺时针打印一个矩阵 @Test public void test(){ int[][] num = new int[ ...
- A1022. Digital Library
A Digital Library contains millions of books, stored according to their titles, authors, key words o ...
- git中如何切换分支,拉取分支,合并分支
idea中如何使用git来做分支的切换合并: https://blog.csdn.net/autfish/article/details/52513465 本地分支与远程分支: https://seg ...