python 扫描局域网主机、爆破端口

简介: python 扫描局域网主机、爆破端口
import telnetlib
from multiprocessing import Pool 
import threading
import time
import sys
import re
import os
class Scan():
    def __init__(self,ip,mode):
        self.__ip=ip
        self.__open=[]
        self.__mode=mode
    def check_host(self,ip):
        output = os.popen('ping -n 1 {}'.format(ip)).readlines()
        if('无法访问目标主机' not in ''.join(output)):
            return ip
    def scanning(self):    #探测ip类型  
        ip_list=[]
        if(re.match(r'^\d+?\.\d+?\.\d+?\.\d+?$',self.__ip)):             #单一ip
            output = os.popen('ping -n 1 {}'.format(self.__ip)).readlines()
            if('无法访问目标主机'not  in ''.join(output)):                
                ip_list.append(self.__ip)
        elif(re.match(r'^(\d+?\.\d+?\.\d+?\.)(\d+?)/24$',self.__ip)):    #检测局域网存活主机
            ip_list.clear()
            t=self.__ip.split()[0]
            ip_result=[re.match(r'(\d+?\.\d+?\.\d+?\.)(\d+?)/24',self.__ip).group(1)+str(i) for i in range(0,256)]
            with  Pool(10) as pool:
                ip_result=pool.map(self.check_host,ip_result)
                for i in ip_result:
                    if(i!=None):
                        ip_list.append(i)
        elif(re.match(r'^(\d+?\.\d+?\.\d+?\.)(\d+?)-(\d+?\.\d+?\.\d+?\.)(\d+)$',self.__ip)):   #检测范围内ip
            ip_list.clear()
            min=int(re.match(r'(\d+?\.\d+?\.\d+?\.)(\d+?)-(\d+?\.\d+?\.\d+?\.)(\d+)',self.__ip).group(2))
            max=int(re.match(r'(\d+?\.\d+?\.\d+?\.)(\d+?)-(\d+?\.\d+?\.\d+?\.)(\d+)',self.__ip).group(4))+1
            ip_result=[re.match(r'(\d+?\.\d+?\.\d+?\.)(\d+?)-(\d+?\.\d+?\.\d+?\.)(\d+?)',self.__ip).group(1)+str(i) for i in range(min,max)]
            with  Pool(10) as pool:
                ip_result=pool.map(self.check_host,ip_result)
                for i in ip_result:
                    if(i!=None):
                        ip_list.append(i)
        elif(re.match(r'^(\d+?\.\d+?\.\d+?\.)(\d+?),',self.__ip)):   #检测多个自定义ip
            ip_list.clear()
            list_result=self.__ip.split(',')
            for ip in list_result:
                if(re.match(r'\d+?\.\d+?\.\d+?\.\d+?',ip)):
                    output = os.popen('ping -n 1 {}'.format(ip)).readlines()
                    if('无法访问目标主机'not in ''.join(output)):
                        ip_list.append(ip)
        else:
            sys.exit('\n\nthe input of ip is wrong! please try again!')
        if(len(ip_list)==0):
            sys.exit('\n\nthe host of ip inputed is not exits!!!\n\n')
        print("\n\n","扫描进行中".center(21,'*'),"\n")   
        print("\n存活的主机:\n\n"+'\n'.join(ip_list)+'\n\n')
        for ip in ip_list:
            self.__ip=ip
            if(self.__mode==0):
                port_list=[80,8080,443,3306,3389,21,22]
            elif(self.__mode==1):
                port_list=[x for x in range(1,65535)]
            else:
                sys.exit('\nthe input of mode is wrong! please try again!')
            pool=Pool(6)
            list_result=pool.map(self.is_open,port_list)
            pool.close()      
            pool.join()    
            for i in list_result:
                if(i != None):
                    self.__open.append(i)
            self.__open.sort()
            self.Get()
    def is_open(self,port): #判断是否开启
        check=telnetlib.Telnet()  #扫描函数
        try:
            check.open(self.__ip,port)
            return str(port)
        except:
            pass
    def Get(self):
        if(len(self.__open)!=0):
            print("\n "+self.__ip+"开放的端口: \n "+'\n '.join(self.__open)+"\n")
        else:
            print("\n "+self.__ip+"开放的端口: \n "+'\n 没有开放端口'+"\n")
if __name__ == "__main__":
    start=time.time()
    s=Scan(input('\n\nthe type of ip  1. xxx.xxx.xxx.xxx  2. xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx\
    3. xxx.xxx.xxx.xxx/24 4. xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx,…… \ninput ip: '),int(input("\n\n0. scan the usual ports  1. scan all ports\nmode: ")))
    s.scanning()
    # s.Get()
    print("\n扫描用时: "+str(round(time.time()-start,2))+ "s")
    print("\n\n","扫描完成,欢迎下次使用".center(21,'*'),'\n\n')
本程序采用了多线程来自动扫描指定局域网主机、端口
目录
相关文章
|
JSON 测试技术 API
优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言
REST Assured 是一个强大的 Java 库,用于简化 RESTful API 测试。本文详解了其核心功能:设置默认主机和端口以减少代码重复、发起 GET 请求并验证响应结果,以及通过断言确保接口行为符合预期。同时推荐 Apipost 工具,助力开发者提升 API 测试效率,实现更高效的接口管理与团队协作。掌握这些技巧,可显著优化测试流程与代码质量。
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
480 28
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
1149 5
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
811 16
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
357 1
|
网络安全 网络架构
Nmap扫描六种端口状态介绍
Nmap扫描六种端口状态介绍
1804 2
|
安全 网络协议 IDE
使用Python编写网络扫描程序
使用Python编写网络扫描程序
455 0
|
监控 安全 网络协议
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1798 102

热门文章

最新文章

推荐镜像

更多