Scapy之ARP询问
引言
校园网中,有同学遭受永恒之蓝攻击,但是被杀毒软件查下,并知道了攻击者的ip也是校园网。所以我想看一下,这个ip是PC,还是路由器。
在ip视角,路由器和pc没什么差别。
实现
首先是构造arp报文,进行广播
send.py
from scapy.all import *
myarp = ARP()
myarp.psrc = '172.17.132.176'
myarp.pdst = '172.17.174.73'
myarp.op = 1
while True:
send(myarp)
构造arp报文,填写我的本机ip172.17.132.176 ,释放永恒之蓝的ip 172.17.174.73 ,op 为1代表查询,为2代表回应,这里我们是查询。
攻击者终端收到arp请求后,会相应arp,里面携带有攻击者的mac
receive.py
from scapy.all import *
while True:
PTKS = sniff(store = 1,timeout = 0.1)
PTKS.show()
可以从终端看到打印的arp回应,携带有mac。如下:

查询mac为什么设备
将以上mac在 https://mac.51240.com/ 输入查询,可得到厂商,基本就知道终端为路由器或者PC
例如:

进阶
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
def scapy_arp_request(ip_address , ifname = 'eth0',queue = None):
result_raw = srp(Ether(dst = 'FF:FF:FF:FF:FF:FF')#srp 二层帧
/ARP(op = 1,hwdst = '00:00:00:00:00:00',pdst = ip_address),#ARP询问操作,op置1
timeout = 1,#等待1s
iface = ifname,#二层一定要填写接口
verbose = False)#关闭发送数据提示信息
#result_raw接收到的数据如:(<Results: TCP:0 UDP:0 ICMP:0 Other:1>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
#[0]为相应的数据,[1]为未相应的数据(等待1s,所以有可能会产生未响应的数据)
try:
result_list = result_raw[0].res #把响应的数据包对,产生为清单
#result_list数据为展开的信息,如:[(<Ether dst=FF:FF:FF:FF:FF:FF type=0x806 |<ARP op=who-has hwdst=00:00:00:00:00:00 pdst=172.17.174.73 |>>, <Ether dst=e0:3f:49:a1:99:6c src=58:69:6c:5e:70:ec type=0x806 |<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=58:69:6c:5e:70:ec psrc=172.17.174.73 hwdst=e0:3f:49:a1:99:6c pdst=172.17.171.178 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>>)]
#可以看到,result_list中只有一组数据,下标为0。在这一组里,[1]代表接收到的包,[0]代表发送的数据包
#[2]ARP头部字段的['hwsrc']字段,作为返回值返回
if queue == None:
#return result_list[0][1][1].fields['hwsrc']
return result_list[0][1].getlayer(ARP).fields['hwsrc']
else:
queue.put((ip_address,result_list[0][1].getlayer(ARP).fields['hwsrc']))
except:
return
if __name__ == "__main__":
import sys
print(scapy_arp_request(sys.argv[1],sys.argv[2]))
执行程序,后面跟着参数 需要查询mac的ip ,网口名称 ,即可打印目标mac
send()函数将会在第3层发送数据包。也就是说它会为你处理路由和第2层的数据。sendp()函数将会工作在第2层。选择合适的接口和正确的链路层协议都取决于你。
sr()函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的数据包。srp()则是使用第2层报文(以太网,802.3等)。
参考
https://zhuanlan.zhihu.com/p/34843290
https://github.com/Larryxi/Scapy_zh-cn
Scapy之ARP询问的更多相关文章
- ARP 询问之 校级路由器的猫腻
前情 我为什么选定 172.17.174.73 这个 ip 来进行测试.戳前情 Scapy之ARP询问 前言 在一般家用路由器局域网下,进行 arp 广播,说:我是192.168.1.100,你们谁的 ...
- python通过scapy编写arp扫描器
多网卡的情况下发送二层包需要配置网卡 三层包不需要配置接口发包方法: sr() 发送三层数据包,等待接收一个或者多个数据包的响应 sr1() 发送三层数据包,只会接收一个数据包的响应 srp() 发送 ...
- Python黑帽编程 3.1 ARP欺骗
Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...
- Python黑客编程ARP欺骗
Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...
- IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- 67.ARP协议
ARP是地址解析协议Address Resolution Protocol的缩写.是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析程对应的MAC地址.在局域网中,网络实际传输的是“帧” ...
- ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者
[故障原理] 要了解故障原理,我们先来了解一下ARP协议. 在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的.ARP协议对网络安全具有重要的意义.通过伪造IP地址和M ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
随机推荐
- swoft orm中的坑(针对实体类的属性名称和数据库字段不相等)
最近在用swoft的orm,发现了一些问题: 首先看下实体类的定义 它的属性名称和所映射的数据库字段名不一致,这个就会导致蛋疼的问题,首先,在我们使用orm的时候,应该使用哪个字段? 我直接说结论,在 ...
- 微信公众号开发被动回复用户消息,回复内容Content使用了"\n"换行符还是没有换行
使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...
- 用脚本js把结果转化为固定小数位的形式
function roundTo(base,precision) { var m=Math.pow(10,precision); var a=Math.round(base * m) / m; ret ...
- mypwd的实现——20155328
mypwd的实现 分析 pwd不带参数时,实现的是查看并打印当前所在位置的绝对路径功能. 如图: 所以实现mypwd时重点在于循环打印路径名,循环的终止条件是是到了根目录.判定是否到达根目录的标准为: ...
- css文字环绕
html: <div class="wrap-div-topSpacer"></div> <div class="wrap-div" ...
- 【HNOI2014】道路堵塞
题面 题解 解法一 这个思路要基于以下一个结论: 当你删掉某条边\((x,x+1)\)时,最短路路线为:\(1\to x(\leq u)\to y(>u) \to n\),并且\(x\to y\ ...
- RabbitMQ 安装 rabbitmq_delayed_message_exchange插件
rabbitmq_delayed_message_exchange插件主要是实现延迟队列 一.下载插件 下载地址:http://www.rabbitmq.com/community-plugins.h ...
- centos 中sshd莫名其妙不见了?
发现问题 遇到问题:首先莫要慌:事出有因:先检查一波: 首先呢,看一下/var/log/yum.log 是否有误删的记录: 如有被误删的操作的话:可以去看看日志:到底咋回事: 然后么 yum ins ...
- Merge语句中NULL的陷阱
NULL表示unknown,不确定值,所以任何值(包括null值)和NULL值比较都是不可知的,在on子句,where子句,Merge或case的when子句中,任何值和null比较的结果都是fals ...
- 分享一个DataTable转List强类型的类库
类库扩展自Datatable,可以直接用Datatable.ToList<T>()进行转换.为了方便把DataReader装入Datatable,开扩展了一个LoadForReader(t ...