zoukankan      html  css  js  c++  java
  • mac吹吹器

        起因是很想研究一下,一个人每天在外面与多少熟人擦肩而过,我觉得这个世界还是蛮小的,所以就设想当他们在我50m左右时能自动提醒就好了,那么想到的方案有如果能感应手机wifimac地址 就可以实现这些,当然关了wifi 就没辙了 可正经人谁关wifi 啊,这里需要说明的是mac属于个人信息,但不属于个人敏感信息所以收集的风险是很低的,可还是有责任保护该信息不被用于非法用途。

     

      那么开始吧

     

    1,准备:

     

    Win电脑

     

    Linux电脑(kali,很多人都用虚拟机,但我有树莓派。最好还有块屏幕

     

    usb网卡 3070L ,其实树莓派的自带网卡也可以进入monitor监听模式,实际使用时却差强人意,还是上专用的比较好。

     

    网线,当开启监听模式后是无法使用wifi上网的,虽然自带的网卡可以用,但经常性抽风,为了稳定请连网线

     

    软件方面有

    pycharm 专业版 ,xshellxftpwiresharkpython全套

     

    2,配置:

    网卡3070L不需驱动 直插即可*2

     

    网线做直连线 话说两电脑连不应该交叉吗?早就不用了

     

    Kali安装完之后配置ip

    nano  /etc/network/interfaces

    输入:

    auto eth0

    #

    iface eth0 inet static

    #

    address 192.168.222.xx   #ip地址

    #

    gateway 192.168.222.x  #网关 写不写无所谓

    #

    netmask 255.255.255.0   #掩码

    #如果想通过自带网卡上网一定要删掉路由表

     

    重启网卡

    Ifconfig eth0 down

    Ifocnfig eth0 up

    ------------------------------------

    配置ssh可用root登录

    nano /etc/ssh/sshd_config

    改写

    #PermitRootLogin prohibit-password

    PermitRootLogin yes

     

    #PasswordAuthentication yes

    PasswordAuthentication yes

     

    然后重启服务

    /etc/init.d/ssh start

    service ssh restart

    ---------------------------------------------------

    配置pycharm 使IDE可以远连树莓派

    先确认xshell可以链接上 树莓派

    然后新建项目

    接下来ctrl+shift+s,进入设置

    因为我是中文版 可能配置会有些不一样

    点击 项目:xxx  ->  python解释器 -> 点击右上齿轮 -> 添加 -> 填写好主机 用户名 确定->填写密码->完成

    -> 项目文件夹右键->部署->上传 ->启动一下main

     

    如果报错bash: cd: /tmp/pycharm_project_xxx: 没有那个文件或目录

    点击 项目:xxx  ->  python解释器 -> 点击右上齿轮 -> 全部显示 -> 右边小笔符号 ->Deployment configuration 是否配置正确  ->点右边3个小点 进入映射 ->部署路径 填入/tmp/pycharm_project_xxx  再试即可

     

    插上网卡后  ifconfig 查看wlan1 是否上线

    iw list 查看Supported interface modes下是否有monitor

    然后

    airmon-ng check kill 关闭干扰的程序

    airmon-ng  start wlan1 开启monitor

    ifconfig下有wlan1mon 上线

    airodump-ng wlan1mon 开始监听monitor

    至此如果有人进入你wifi范围你 你就能发现他的mac地址啦

    可惜 并不是这么完美 这里面有很多限制 比如对方必须有连接上wifi 连接哪个都无所谓 但必须和wifi 有数据交互,现在流量包都不限量了 还哪会有正经人连野路子的wifi,而且air的这工具包很好用,但不太自由 所以还是用python写一个吧

    那么配置的最后一步,需要给kali安装 pip 以及用它安装scapy包 这点教程略 网上有很多不再赘述。

    3,编写

     

     1 from scapy.all import *
     2 
     3 
     4 
     5 WHITELIST = ['11:15:11:61:84:5c', ]  # your phone MAC
     6 NOshow=['00:00:00:00:00:00','22:22:22:22:22:24','22:22:22:22:22:28']
     7 
     8 def Packecatch(pkt):
     9     if pkt.haslayer(Dot11):
    10         if pkt.addr2 not in NOshow:
    11 
    12             a = ''
    13             b = ''
    14             if pkt.haslayer(Dot11Beacon):
    15                 a = 'this is AP'+' APname:'+pkt.getlayer(Dot11Beacon).info
    16 
    17             try:
    18                 print (str(pkt.addr2) + " " + a + " " + b+" dbm= "+str(pkt.dBm_AntSignal))
    19             except:
    20                 print 'nodata'
    21             if pkt.addr2 in WHITELIST :
    22                 print 'yayaya,catch you'
    23 
    24 
    25 
    26 def main():
    27 
    28     facenat = 'wlan1' #network
    29     sniff(iface=facenat, prn=Packecatch)
    30 
    31 
    32 if __name__ == "__main__":
    33     main()

    启动之前将kali重启,别被airmon干扰到

    然后

    ifconfig wlan1 down #下线网卡

    iwconfig wlan1 mode montor #开启监听模式

    ifconfig wlan1 up#上线网卡

    iwconfig  #查看监听模式是否开启

    好了 可以直接在pycharm中启动上面的脚本了

     注意:这里需要再做个线程对网卡的侦测信道进行循环,否则抓不全。

     至此如果有要找的人从你周围走过就会打印yayaya catch you  注意:这里的Beacon为路由器的广播管理帧,用来通告所有手机的ssid以及密码类型等信息,所以这个肯定不是你想要的吧

    但如上文所述 对方在没连接wifi就没办法探查到mac 自安卓8以来 wifi多以被动扫描为主 只接受不发送  即便有时会主动扫描 使用的也不是真实mac

    不过也不要灰心 还是有办法的  手机里面 只要有你曾经连过wifi名都有记录 如果遇到同样名字的就会主动连接 那样mac就会暴露 

    所以下面就是伪造ap环节  如果你不知道熟人曾经连过的wifi名是多少 推荐你把他们邀进家里  诱(qiang)导(po)他们连上自家wifi

    ----------------

    以下开始 创建伪ap建立

    from scapy.all import *
    
    
    def sendp(x, inter=0, loop=0, iface=None, count=None,
              verbose=None, realtime=None,
              return_packets=False, socket=None, w_int=1, w_time=0,ssid='',mac='',go=[True] ,*args, **kargs):
        '''
        Send packets at layer 2
    
        :param x: the packets
        :param inter: time (in s) between two packets (default 0)
        :param loop: send packet indefinetly (default 0)
        :param count: number of packets to send (default None=1)
        :param verbose: verbose mode (default None=conf.verbose)
        :param realtime: check that a packet was sent before sending the next one
        :param return_packets: return the sent packets
        :param socket: the socket to use (default is conf.L3socket(kargs))
        :param iface: the interface to send the packets on
        :param monitor: (not on linux) send in monitor mode
        :param w_int: 循环发送次数
        :param w_time: 循环一次后休息的时间
        :param go:循环标记指针
        '''
        socket = socket or conf.L2socket(iface=iface, *args, **kargs)
        for ii in range(w_int):
            if not go[0]:
                return False
            scapy.sendrecv.__gen_send(socket, x, inter=inter, loop=loop,
                                                count=count, verbose=verbose,
                                                realtime=realtime, return_packets=return_packets)
            print('ssid:'+ssid+'休息中')
            if not go[0]:
                return False
            #关闭ap发送的逻辑
            # for  ap in wifi_receive.APlist:
            #     if len(ap)<=2:
            #         break
            #     if ap[1]==ssid and ap[0] != mac:
            #         print ("附近存在ssid:"+ssid+",已关闭该ssid")
            #         return False
            #
            #
            # if  ssid in wifi_config.No_scanAP_L:
            #     print ("强制关闭该ssid:"+ssid+"")
            #     return False
            time.sleep(w_time)
    
        socket.close()
        return True
    
    def scanAP_password(ssid='', mac='',go=[True]):
        mac=b'x11x22x33x44x55x66' #12位mac地址
        mac_str = mac.hex(':')
        hexdump(mac)#打印
        ssid_b = ssid.encode('utf-8')#ssid转utf-8
        lenbi = len(ssid).to_bytes(length=1, byteorder='big')#ssid的长度转bytes
        # 数据头
        mac = b"x80x00x00x00xffxffxffxffxffxff" + mac + mac
        # 以下为ap数据加密帧
        t = b"xf0x44x85x97x73x06x00x00" 
            b"x00x00x64x00x31x04x00" + lenbi + ssid_b + b"x01x08x82x84" 
                                                             b"x8bx96x0cx12x18x24x03x01x01x05x04x00x02x00x00x07" 
                                                             b"x06x43x4ex20x01x0dx14x2ax01x00x32x04x30x48x60x6c" 
                                                             b"x30x14x01x00x00x0fxacx04x01x00x00x0fxacx04x01x00" 
                                                             b"x00x0fxacx02x0cx00x2dx1axecx02x13xffxffx00x00x01" 
                                                             b"x00x00x00x00x00x00x00x07x00x00x00x00x00x00x00x00" 
                                                             b"x00x00x3dx16x01x00x00x00x00x00x00x00x00x00x00x00" 
                                                             b"x00x00x00x00x00x00x00x00x00x00x7fx08x00x00x00x00" 
                                                             b"x00x00x00x40xddx18x00x50xf2x02x01x01x00x00x03xa4" 
                                                             b"x00x00x27xa4x00x00x42x43x5ex00x62x32x2fx00"
    
    
        packet = RadioTap() / mac / t #拼接成帧
        hexdump(packet)
        return sendp(packet, iface='wlan1', inter=0.05, count=200, w_int=800, w_time=2,ssid=ssid,mac=mac_str,go=go)
        # 同网卡监听和发送就会收到两个wifi信息 其中一个有错 需屏蔽
        pass

    关于ap数据加密帧如何获取 ,可以用wireshark随便抓一个路由器的Beacon帧改写即可,这样就能模拟一个让手机主动连接的wifi了,当然这个是连不上去,手机失败两次就不再重试 但够用了。

    注意:sendp的参数设定不能过慢,否则手机需要很长时间才能发现信号,但同样发送过快会相当费电。务必是双网卡 ,一个发送创建ap的Beacon帧 ,一个负责抓包。

     

  • 相关阅读:
    基础_String
    tomcat缓存
    jquery绑定事件
    Java面试之基础题---对象Object
    Java设计模式学习三-----工厂模式
    网络基础学习---各种概念
    Java设计模式学习二
    Hibernate框架的主键生成策略
    Hibernate的Session的get()和load()方法区别
    Hibernate 框架理解
  • 原文地址:https://www.cnblogs.com/moshuixiong/p/14007834.html
Copyright © 2011-2022 走看看