当前位置: 首页 > news >正文

scapy框架安装和入门

为什么80%的码农都做不了架构师?>>>   hot3.png

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

转载于:https://my.oschina.net/enet01/blog/789051

相关文章:

  • python知识点记录(一):
  • jdk之jhat命令
  • 解读基于数加的大数据仓库解决方案
  • EBS_DBA_技能:常用SQL
  • angularjs中,页面部分元素是通过ng-show来控制其否显示的,页面刚加载时,会闪烁,出来一下又隐藏...
  • 第一百一十二节,JavaScript浏览器检测
  • java分享第二十天(build.xml的语法及写法)
  • 如何下载百度网盘已失效资源链接
  • opencv 2.4.9+pcl 1.6+vs2010+win7 32开发环境配置
  • win8下安装wamp3.0步骤
  • C# 最小化到托盘,托盘右击菜单显示
  • Changing Your Commit Messages
  • mybatis对java自定义注解的使用——入门篇
  • 垃圾收集器之:CMS收集器
  • JAVA8之lambda表达式详解,及stream中的lambda使用
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 10个确保微服务与容器安全的最佳实践
  • Android系统模拟器绘制实现概述
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • js 实现textarea输入字数提示
  • JS+CSS实现数字滚动
  • mongodb--安装和初步使用教程
  • Node 版本管理
  • nodejs调试方法
  • Redis 懒删除(lazy free)简史
  • vuex 笔记整理
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Yii源码解读-服务定位器(Service Locator)
  • 利用DataURL技术在网页上显示图片
  • 前言-如何学习区块链
  • 浅谈web中前端模板引擎的使用
  • 什么软件可以剪辑音乐?
  • 使用Gradle第一次构建Java程序
  • 算法---两个栈实现一个队列
  • 小程序 setData 学问多
  • Spring第一个helloWorld
  • 仓管云——企业云erp功能有哪些?
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​你们这样子,耽误我的工作进度怎么办?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (5)STL算法之复制
  • (Git) gitignore基础使用
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (四)图像的%2线性拉伸
  • (一)Linux+Windows下安装ffmpeg
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .Net 6.0 处理跨域的方式
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET MVC第三章、三种传值方式
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET处理HTTP请求
  • .net快速开发框架源码分享