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')
本程序采用了多线程来自动扫描指定局域网主机、端口
目录
相关文章
|
3月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
285 5
|
4月前
|
Python
Python编程--使用NMAP端口扫描
Python编程--使用NMAP端口扫描
53 1
|
4月前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
84 1
|
4月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
87 0
|
5月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
80 0
|
1天前
|
SQL 关系型数据库 MySQL
云服务器常用端口作用
了解云服务器常用端口的作用有助于高效管理资源、快速定位问题及更好地使用云服务。常见端口包括:21(FTP,文件传输)、22(SSH,远程连接Linux)、25(SMTP,发送邮件)、80(HTTP,网页服务)、110/143(POP3/IMAP,接收邮件)、443(HTTPS,加密网页)、1433(SQL Server)、3306(MySQL)、3389(RDP,远程访问Windows桌面)和8080(代理服务)。
19 2
|
7天前
|
存储 安全 网络安全
阿里云国际站:阿里云服务器端口配置
悟空云@CloudWuKong阿里云是全球领先的云计算服务提供商,为用户提供弹性计算、数据库、存储、网络安全等一系列云计算服务。在使用阿里云服务器时,合理配置端口非常重要,可以提高服务器安全性和稳定性。
|
7月前
|
弹性计算 应用服务中间件 Linux
阿里云服务器开放端口完整图文教程
笔者近期开发完成的服务端程序部署在阿里云的ECS云服务器上面,一些应用程序配置文件需要设置监听的端口(如Tomcat的8080、443端口等),虽然通过CentOs 7系统的的「防火墙」开放了对应的端口号,任然无法访问端口号对应的应用程序,后面了解到原来还需要设置云服务器的「安全组规则」,开放相应的端口权限,服务端的接口才能真正开放。
844 1
|
7月前
|
弹性计算 运维 数据安全/隐私保护
云服务器 ECS产品使用问题之如何更改服务器的IP地址或端口号
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
7月前
|
网络协议 Linux Unix
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
177 0
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解

热门文章

最新文章