python寻找3389端口(2)

直接上脚本吧,多线程,加了队列,然后尝试用不同的banner头去连接1-65535端口,如果开放,总有一个是的,当从注册表无法读取RDP端口的时候。

#!/usr/bin/python
# coding: utf-8

import socket
import binascii
import sys
import threading
from Queue import Queue


def verify(sock, port):
        while 1:
                buff = sock.recv(2048)
                if not buff:
                        break
                b = bytearray(buff)
                print "[+] %s" % binascii.hexlify(b)
                detect_os(binascii.hexlify(b), port)
                # if len(binascii.hexlify(b)) == 38:
                #         print "[+] RDP Port is %s" % port
                #         sys.exit(0)


def detect_os(res, port):
        d = {
                "2000": "0300000b06d00000123400",
                "2003": "030000130ed000001234000300080002000000",
                "2008": "030000130ed000001234000200080002000000",
                "win7OR2008R2": "030000130ed000001234000209080002000000",
                "2008R2DC": "030000130ed000001234000201080002000000",
                "2012R2OR8": "030000130ed00000123400020f080002000000"
        }
        for key, value in d.iteritems():
                if value == res:
                        print "[+] Os May be: %s" % key
                        print "[+] RDP Port is %s" % port
                        sys.exit(0)
def send_payload(sock):
        sock.send("\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00")


def worker():
        while not q.empty():
                port = q.get()
                try:
                        scan(port)
                finally:
                        q.task_done()


def scan(port):
        try:
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.settimeout(2)
                sys.stdout.write('[+] Check Port %s \r' % port)
                sys.stdout.flush()
                if s.connect_ex((ip, port)) == 0:
                        print "[+] Connect Success %s" % port
                        send_payload(s)
                        verify(s, port)
        except Exception, e:
                # raise e
                pass
        s.close()

if __name__ == '__main__':
        if len(sys.argv) != 2:
                print "Usage: %s IP" % sys.argv[0]
                sys.exit(0)
        ip = sys.argv[1]
        q = Queue()
        map(q.put, xrange(1, 65535))
        threads = [threading.Thread(target=worker) for i in xrange(50)]
        map(lambda x: x.start(), threads)
        q.join()

本文分享自微信公众号 - 晨星先生(MoXuanIT)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刺客博客

TCP/UDP常用端口列表

1.1K40
来自专栏Golang语言社区

golang使用原始套接字构造UDP包

RAW SOCKET 介绍 TCP/IP协议中,最常见的就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)...

58540
来自专栏Django Scrapy

端口的常用端口

端口号---具有网络功能的应用软件的标识号。注意,端口号是不固定的,即可以由用户手工可以分配(当然,一般在软件编写时就已经定义)。当然,有很多应用软件有公认的默...

1K50
来自专栏FreeBuf

一个FreeBSD下的通信协议监控程序

最近想要在一个内核里的小聊天服务器练手用,现在写完的内容,可以作为一个通讯协议的监控程序使用。

10420
来自专栏拂晓风起

Flash Actionscript 多线程Worker 压缩图片

13140
来自专栏PHP在线

TCP/IP、HTTP协议概述

术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议。“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另 一个网络。把IP想像成一种...

34750
来自专栏尚国

Healwire Online Pharmacy 3.0 Cross Site Request Forgery / Cross Site Scripting

Healwire Online Pharmacy version 3.0 suffers from cross site request forgery and...

15520
来自专栏跟着阿笨一起玩NET

C#分析URL参数获取参数和值得对应列表(二)

49220
来自专栏吴伟祥

JPush API Java Library 原

$master_secret = 'a36fef7cbd5b47b74c20278c'; $app_key='1d2bd69d09c3756fa20f9c96...

12220
来自专栏Golang语言社区

golang(GO语言)http详解简单基础

因为好像长时间的写PHP可能大家感觉烦躁了,所以写一点golang的东西大家可以拿去玩玩,golang在web开发中让你得心应手,其实也是很好的东西,只要你玩进...

56860

扫码关注云+社区

领取腾讯云代金券