• 大小: 5KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Python
  • 标签: Python  端口扫描  

资源简介

使用Python实现的端口扫描,多线程,区间扫描,指定端口,端口区间 更多用法 -h 参数

资源截图

代码片段和文件信息

import socket
import threading
import sys
import re


class Scanner(threading.Thread):

    def __init__(self target_url target_port):
        threading.Thread.__init__(self)
        self.url = target_url
        self.port = target_port

    def run(self):
        if not self.check():
            return

        for port in self.port:
            p = threading.Thread(target=self.port_scan args=(port))
            p.start()

    def check(self):
        if re.findall(r‘[a-zA-Z]‘ self.url):
            try:
                ip = socket.gethostbyname(self.url)
                print(‘\033[33m[>] THE IP OF %s IS %s\n\033[0m‘ % (self.url ip))
            except socket.error as e:
                print(‘\033[31m[!] %s NAME ERROR!\033[0m‘ % self.url)
                return False
        else:
            n_list = self.url.split(‘.‘)
            for n in n_list:
                if int(n) > 255:
                    print(‘\033[31m[!] %s IP ERROR!\033[0m‘ % self.url)
                    return False
        return True

    def port_scan(self port):
        scanner = socket.socket(socket.AF_INET socket.SOCK_STREAM)
        scanner.settimeout(0.1)

        try:
            result = scanner.connect_ex((self.url port))
            if result == 0:
                print(‘\033[32m[+] %s port %d is open\033[0m‘ % (self.url port))
            else:
                print(‘\033[34m[-] %s port %d is closed\033[0m‘ % (self.url port))
        except socket.errno as e:
            print(‘\033[34m[-] %s port %d is closed\033[0m‘ % (self.url port))

        finally:
            scanner.close()


def ip2num(ip):
    ip = [int(x) for x in ip.split(‘.‘)]
    return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3]


def num2ip(num):
    return ‘%s.%s.%s.%s‘ % ((num & 0xff000000) >> 24 (num & 0x00ff0000) >> 16
                            (num & 0x0000ff00) >> 8 num & 0x000000ff)


def generate_ip(ip1 ip2):
    return [num2ip(num) for num in range(ip1 ip2+1) if num & 0xff]


def check(start end):
    for s e in zip(start.split(‘.‘) end.split(‘.‘)):
        if int(s) > 255 or int(e) > 255:
            if int(s) > 255:
                print(‘\033[31m[!] %s IP ERROE!\033[0m‘ % start)
            else:
                print(‘\033[31m[!] %s IP ERROE!\033[0m‘ % end)
            return False
    if

评论

共有 条评论