python 使用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()函数,效果:

  

  

时间: 2024-10-10 17:19:58

python 使用scapy进行帧注入的相关文章

python 使用Raw Socket进行以太网帧注入

1. 帧注入 对于以太网帧和Raw Socket的介绍可参考之前的一篇博文利用Raw Socket进行以太网帧嗅探.帧注入的特点: 可以将原数据格式的包注入到网络中. 在模拟网络应答方面很强大. 原始套接字包结构具有不可延展性. 随机注入 如果你可以随机注入数据到网络上的话,你就可以向网络上发送任何数据.^_^ 2. 代码实验 进入python运行环境,需要加上root权限.(sudo python). >>> >>> import socket >>>

python 使用scapy库进行ARP欺骗

1. 说明 ARP欺骗(ARP spoofing),又称ARP病毒(ARP poisoning)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术.此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定电脑或所有电脑无法正常连接.最早探讨ARP欺骗的文章是由Yuri Volobue所写的<ARP与ICMP转向游戏>(ARP and ICMP redirection games). 由于局域网的网络流通不是根据IP地址进行,而是根据MAC地址进行传输.所以,MAC地

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本。

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本.

python 使用scapy进行ARP扫描

一. 描述 使用scapy第三方库,编写一个可以对一个网段进行ARP扫描,获得该往段内活跃主机的IP地址和MAC地址. 二. 分析与方案 首先,从scapy导入相关的模块. Ether()/ARP()构造ARP包. srp1()发送与接收ARP包. 代码示例如下: #!/usr/bin/env python # _*_ coding=utf-8 _*_ from scapy.all import * import sys,getopt def usage(): print "Usage: sud

Python使用scapy生产动态路由图

scapy模块安装 yum install   tcpdump  graphviz   ImageMagick 打开 https://pypi.org/project/scapy/2.3.3/#files 下载scapy-2.3.3.tar.gz wget https://files.pythonhosted.org/packages/ac/14/c792a14b9f8bc4bb9c74c0594c167a2da36e31964098d9e27202142cbd7d/scapy-2.3.3.tg

exist 存在 Python操作mysql pymysql sql注入问题 # 39

0.补充 exist 存在 了解.py 1 """""" 2 """ 3 '''exist''' 4 EXIST 关键字表示存在 5 在使用EXIST 关键字时 , 6 7 内层查询语句不返回 查询的记录, 8 而是返回一个真假值 ,True|False 9 10 当返回True时,外层语句将进行查询, 11 当返回值为False 外层查询语句不进行查询 12 13 select * from emp where e

python SSTI tornado render模板注入

原理tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式.简单的理解例子如下:------------------------------------------------------------------------------------import tornado.ioloopimport tornado.web cla

Python 使用Scapy模块编写ARP主机存活扫描

代码 1 import sys 2 if len(sys.argv) != 2: 3 print("Usage:aprPing <IP>\n eg:arpPing 192.168.1.1") 4 sys.exit(1) 5 from scapy.all import srp,Ether,ARP 6 ans,unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=sys.argv[1]),timeout=3)

python 使用scapy编写DNS Fuzzer

1. 描述 使用scapy库,编写一个DNS Fuzzer工具,并测试.在这之前,先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中,且UDP的端口为53.进入scapy,查看一下UDP和DNS包的封装情况. 2. 代码示例 代码中,我们需要对输入的IP地址做合法性校验.这需要用到netaddr中的valid_ipv4,可以执行sudo pip install netaddr进行安装,如果系统上没有安装pip,可以先安装pip,Ubuntu上运行sudo apt-g