教你如何用py大法写C段扫描程序

0x00 前言


很多时候在渗透一个比较大的目标时候,在前期信息收集过程中,我们会发现目标出口规模特别大,有一个或者多个C段甚至B段甚至更大。为了方便撕开口子,所以我们经常需要对目标出口段进行扫描。之前使用的中间件扫描器误报率太高,所以重构了下代码,实现利用网站转换IP,在进行C段端口收集。


0x01 扫描运用到的模块


1.安装python3.7工具。


python官方网站:https://www.python.org


2.安装nmap工具


2.1首先yum下载安装一个nmap


yum -y install nmap


2.2在安装python3的模块,这里python3是我自定义的一个变量,可以在环境下自行设置


python3 -m pip install nmap


3.模块源码安装


3.1远程下载nmap模块


wget http://xael.org/pages/python-nmap-0.6.1.tar.gz


3.2解压nmap模块


tar -zxvf python-nmap-0.6.1.tar.gz


3.3进入nmap模块


cd python-nmap-0.6.1


3.4安装nmap模块


python3 setup.py install


4.安装运用到模块


4.1安装socket模块


python3 -m pip install socket


4.2安装命令行解析接口


python3 -m pip install optparse


4.3安装多线程模块


python3 -m pip install threading


##0x02 源代码

本帖隐藏的内容

# coding:utf-8

import threading

import sys



import socket

import nmap



import time

import optparse

from queue import Queue



event = threading.Event()

event.set()

q = Queue(-1)



class multi_thread(threading.Thread):

    def __init__(self,num,q):

        threading.Thread.__init__(self)

        self.num = num

        self.q = q



    def run(self):

        while event.is_set():

            if self.q.empty():

                event.clear()

            else:

                ip = self.q.get()

                self.ip_port(ip)



    def ip_port(self, ip):

        host = self.www_ip(ip)

        if host:

            iplist = host.split('.')

            for i in range(1, 255):

                try:

                    ip = str(iplist[zxsq-anti-bbcode-0])+str('.')+str(iplist[zxsq-anti-bbcode-1])+str('.')+str(iplist[zxsq-anti-bbcode-2])+str('.')+str(i);

                    if self.nmaps(ip, 80) or self.nmaps(ip, 443):

                        self.save(ip)

                    time.sleep(0.5)

                except Exception as e:

                    print(e)



    def www_ip(self, url):

        try:

            result = socket.getaddrinfo(url, None)

            return result[zxsq-anti-bbcode-0][zxsq-anti-bbcode-4][zxsq-anti-bbcode-0]

        except:

            return False



    def nmaps(self,tgtHost,tgtPort):

        nmScan = nmap.PortScanner()

        try:

            result = nmScan.scan(tgtHost,str(tgtPort))

            state = result[zxsq-anti-bbcode-'scan'][zxsq-anti-bbcode-tgtHost][zxsq-anti-bbcode-'tcp']

            if state[zxsq-anti-bbcode-int(tgtPort)][zxsq-anti-bbcode-'state'] == 'open':

                return tgtHost

            else:

                return False

        except Exception as e:

            return False



    def save(self, ip):

        with open('successs.txt', 'at') as f:

            f.writelines(ip + '\n')



def scan_thread(thread_num):

    threads = []

    for num in range(1,thread_num+1):

        t = multi_thread(num,q)

        threads.append(t)

        t.start()

    for t in threads:

        t.join()



def get_ip(path):

    with open(path, 'rt') as f:

        for ip in f.readlines():

            q.put(ip.strip())



if __name__ == '__main__':

    parse=optparse.OptionParser(usage='"Usage:%prog --path <path> --thread <thread>"',version="1.0")

    parse.add_option('-p','--path',dest='path',type=str,help='Please enter the URL file address.')

    parse.add_option('-t','--thread',dest='thread',type=int,default=100,help='Please enter the thread number.')

    parse.add_option('-v',help='Domain name conversion IP scan C segment!!')

    options,args=parse.parse_args()

    if options.path == None or options.thread == None:

      txt = '''

        Chinese Preview:

          -p 请输入你要扫描的url文件

          -t 请输入你要扫描线程数

          -v 查看版本

        Overseas Preview:

          -p Please enter the URL file address.

          -t Please enter the thread number.

      '''

      print(txt)

      exit(0)

    else:

        get_ip(options.path)

        scan_thread(options.thread)
 

版权保护: 本文由admin所发布,转载请保留本文链接: http://www.yemogege.cn/wzaq-stwz/61.html

免责声明:蓝域安全网所发布的一切渗透技术视频文章,逆向脱壳病毒分析教程,以及相关实用源码仅限用于学习和研究目的
请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除! 

侵权删帖/违法举报/投稿等事物联系邮箱:yemogege@vip.qq.com 网站地图