zoukankan      html  css  js  c++  java
  • nmap实现对某网段的简单扫描

    本次实现对某个网段的主机端口(0—65535)扫描,因为端口较多进而耗时较长,可根据实际情况指定扫描的范围

    import nmap
    import os
    import threading
    import time
    
    from concurrent.futures import ThreadPoolExecutor
    from concurrent.futures import ProcessPoolExecutor
    
    IP_list = []
    lock = threading.Lock()
    pool = ThreadPoolExecutor(5)
    
    
    # 写入文件操作
    def openfile(path, content):
        with open(path, 'W+')as f:
            f.write(content+'
    ')
    
    
    # 查看当前主机操作系统
    def find_os(ip):
        ret = os.popen("nmap -O %s" % ip).read().split('
    ')
        for i in ret:
            if 'Running' in i:
                return i
            continue
        return 'noting'
    
    
    # 局域网存活的主机
    def ping_ip(ip):
        output = os.popen('ping -n 1 %s' % ip).readlines()
        for w in output:
            if str(w).upper().find('TTL') >= 0:
                print(ip)
                IP_list.append(ip)
                pool.submit(nmapScan, ip)
    
    
    def Alive_host(ip):
        wd_ip = '.'.join(ip.split('.')[:-1])
        for i in range(1, 256):
            new_ip = wd_ip + '.' + str(i)
            t = threading.Thread(target=ping_ip, args=(new_ip,))
            t.start()
            time.sleep(0.01)
    
    
    def nmapScan(ip):
        port_list = []
        nm = nmap.PortScanner()
        ret = nm.scan(hosts=ip, arguments='-v -n -A')['scan'][ip]['tcp']
        for port in ret:
            port_list.append(str(port))
    
        content = ip+" "+find_os(ip)+" "+','.join(port_list)
        print(content)
        openfile('./result', content)
    
    
    if __name__ == '__main__':
        Alive_host('192.168.16.0/24')

     关于对“192.168.0.0/24” 的理解

    24是CIDR值。简单说就是一个CIDR值对应一个子网掩码,然后对网络就行分段。

    /24对应的是255.255.255.0,与ip作位运算,将挡住的部分作为网段,其余部分做电脑的地址,如 192.168.0 属于网段

    192.168.0.0/24就代表了192.168.0.0至192.168.0.255

    一直分下去有 192.168.1.0至192.168.1.255

    192.168.2.0至192.168.2.255等等

    每个IP地址的长度为32位(bit),分4段,每段8位(1个字节)。简单的说24代表从前往后有24个1,就是11111111.11111111.11111111.00000000

  • 相关阅读:
    Socket和数据库的一些使用---郭雪彬
    懒加载--初步理解. by:王朋
    自定义带图片和文字的Button的排版--陈棚
    一些开源库分享 ---严焕培
    实现“手机qq”侧滑菜单 -- 吴欧
    iOS 小技巧总结
    Responder一点也不神秘————iOS用户响应者链完全剖析 周傅琦君
    通过版本号来判断用户是否是第一次登陆----By张秀清
    常用第三方推荐
    static, const 和 static const 变量的初始化问题
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/10235377.html
Copyright © 2011-2022 走看看