zoukankan      html  css  js  c++  java
  • python信息收集(二)

        在第二层主机发现中,除了使用arping命令外,还可以使用Kali下自带的一个工具————netdiscover。
         netdiscover是一个专门用于二层主机发现的工具,它有两种扫描方式:主动扫描和被动扫描。其中,主动扫描的原理就是对外发送ARP广播,操作也很简单。例如,我本机的IP所在的网段为192.168.80.0/24,我要扫描我这个网段的存活主机,指令为netdiscover -r 192.168.80.0/24 这里的扫描参数为r。被动扫描的原理是将我们自己机器的网卡设置为混杂模式,接受网络中的ARP广播,被动扫描相比主动扫描的好处是被动扫描可以隐蔽自己。操作指令为netdiscover -p,如下所示:

        介绍完工具之后,我们来用python实现一下这个功能,与之前利用python模块subprocess发送arping命令不同是,这次我们使用python下的另外一个模块————scapy。
        scapy模块的优势在于可以自由的去构造一系列的报文,并通过scapy发送出去,再接收回应。另外scapy模块对接收到的回应只做解码,而不做解释,它只会如实显示响应的报文,不会去提供分析的结论,至于判断和利用都由我们自己来决定。,并且scapy可以在二、三、四层工作。
        先上代码

    import os
    import time
    from scapy.all import * 
    from threading import Thread
    from optparse import OptionParser
    
    def sweep(ip):
        try:
            pakt=Ether(dst="ff:ff:ff:ff:ff:ff",src="")/ARP(
            hwsrc="",psrc="",hwdst="00:00:00:00:00:00",pst=ip
            )
            #src源mac,hwsrc源mac,psrc写源ip
            if result:
                time.sleep(0.1)
                print ip,'在线'
                return
        except:
            return
            
    def main():
        usage="Usage: %prog -f <filename> -i <ip address>"
        parser=OptionParser(usage=usage)
        parser.add_option("-f","--file",type="string",dest="filename",help=
        "specify the IP address file")
        parser.add_option("-i","--ip",type="string",dest="address",help=
        "specify the IP address")
        (options,args)=parser.parse_args()
        filename=options.filename
        address=options.address
        
        if(filename == None and address == None):
            print "请指定IP列表文件或者IP地址"
            sys.exit()
            
        if filename:
            if not os.path.exists(filename):
                print "指定文件不存在,请重新输入"
                sys.exit()
            f=open(filename,"r")
            for i in f.readlines():
                ip = i.strip("
    ")
                t=Thread(target=sweep,args=(ip,))
                t.start()
            
        if address:
            prefix=address.split(".")[0]+"."+address.split(".")[1]+"."+address.split(".")[2]+"."
            for i in range(1,255):
                ip=prefix+str(i)
                t=Thread(target=sweep,args=(ip,))
                t.start()
            
    if __name__=='__main__':
        main()
    
    

    代码的一些解释

    1.sweep()函数中是这个脚本的主要功能,我们通过scapy构造一个ARP广播包。dst为目的mac地址,这里由于我们要发现主机,所以填写广播地址ff:ff:ff:ff:ff:ff ,src为本机的mac地址,可以不填写。hwsrc同样为本机的mac地址,psrc为本机的ip地址,hwdst为被攻击的mac地址,这里保持默认就好。
    2.verbose=0的作用是不反馈各种信息,如果不加这条,会返回很多影响我们判断的信息,建议写上。
    3.-f选项是读取文件,-i选项是选择ip地址
    4.readlines()方法是一次性把内容都读取到内存中,当文件很大时,可能会导致内存不够用。要读取大文件的话,一般是一行一行的读,
    如  f=open('password.txt')
         for i in f:
              print i.strip()
    ...

  • 相关阅读:
    VS 2017 没有工具栏中没有Report Viewer的解决方案
    数据类型和C#关系对应
    .NET CORE部署各种问题
    .NET CORE AutoMapper使用
    .NET CORE 配置Swagger文档
    window快捷登陆linux的的设置方式(设置ssh的config配置)
    linux安装mongodb并启动
    windows更改DNS设置
    scp的使用
    浏览器缓存机制
  • 原文地址:https://www.cnblogs.com/ricardojxu/p/12785505.html
Copyright © 2011-2022 走看看