【转】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方式注入在前面入门案例里有写,所以此处不多啰嗦,直接开搞,先说 ...
随机推荐
- Thymeleaf+SpringMVC,如何从模板中获取数据(转)
在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对视图进行完全的抽象,在使用Thymeleaf的情况下,它将是一 ...
- 【HDU1219】AC Me(水题)
BUPT2017 wintertraining(16) #4 A HDU1219 题意 多组样例,每组给一行,输出该行各字母个数,每组输出之间输出空行 代码 #include <cstdio&g ...
- 【刷题】AtCoder Regular Contest 001
A.センター採点 题意:给一个只包含1.2.3.4的字符串,求出现次数最多和最少的字符 做法:还能怎么做... #include<bits/stdc++.h> #define ui uns ...
- SpringCloud基础篇AOP之拦截优先级详解
前面两篇分别介绍了AOP的基本使用姿势和一些高级特性,当时还遗留了一个问题没有说明,即不同的advice,拦截同一个目标方法时,优先级是怎样的,本篇博文将进行详细分析 同一个切面中,不同类型的advi ...
- Dependency Walker使用说明[转]
在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录, ...
- 【Luogu4512】多项式除法(FFT)
题面 洛谷 题解 模板题... 我直接蒯我写的东西... 这个除法是带余除法,所以并不能直接求逆解决. 要求的就是给定两个多项式\(A(x),B(x)\),其项数为\(n,m\) 求解一个\(n-m\ ...
- 对 static const char* const str[] = {“string”} 的理解
static const char* const str[] = {“string”} 静态常量型指针变量 static const char* 常量型变量 const str[] 这样修饰的作用为 ...
- onTouchEvent方法的使用
手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件.该方法的签名如下所示. public ...
- python3之rabbitMQ
1.RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息 ...
- shell_mysql_ alias 快速启动
添加快启动即命令行 ~$ vi .bash_aliases alias mysqlxdb='mysql -uroot -p1 xdb' ~$ source .bashrc 创建脚本xdb.sh#! / ...