Python3多线程版TCP端口扫描器

本文实例为大家分享了Python3多线程版TCP端口扫描器的具体代码,供大家参考,具体内容如下

使用命令

python BannerDemo.py -H 192.168.200.101 -p 22,3306

代码如下

import optparse
import socket
from socket import *
from threading import *

screenLock = Semaphore(value=1)

def connScan(tgtHost,tgtPort):
  try:
    connSkt = socket(AF_INET,SOCK_STREAM)
    connSkt.connect((tgtHost,tgtPort))
    connSkt.send('ViolentPython\r\n'.encode('utf-8'))
    result = connSkt.recv(1024)
    screenLock.acquire()
    print("[+] %d/tcp open"%tgtPort)
    print("[+]"+str(result))
  except Exception as e:
    screenLock.acquire()
    print(e)
  finally:
    screenLock.release()
    connSkt.close()

def portScan(tgtHost,tgtPorts):
  try:
    tgtIp = gethostbyname(tgtHost)
  except:
    print("[-] Cannot reslove '%s' : Unknown host" % tgtHost)
    return

  try:
    tgtName = gethostbyaddr(tgtIp)
    print("\n [+] Scan Result for: " + tgtName[0])
  except:
    print("\n [+] Scan Result for: " + tgtIp)

  setdefaulttimeout(1)
  for tgtPort in tgtPorts:
    print("Scanning port "+ tgtPort)
    t = Thread(target=connScan,args=(tgtHost,int(tgtPort)))
    t.start()

def main():
  parser = optparse.OptionParser("usage%prog -H <target host> -p <target port>")
  parser.add_option('-H',dest='tgtHost',type='string',help='specify target host')
  parser.add_option('-p',dest='tgtPort',type='string',help='specify target port[s] separated by comma')
  options,args = parser.parse_args()
  tgtHost = options.tgtHost
  tgtPorts = str(options.tgtPort).split(',')
  if(tgtHost == None or tgtPorts[0] == None):
    print("[-] You must specify a target host and port[s]")
    exit(0)
  portScan(tgtHost,tgtPorts)

if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-08-29

使用Python编写简单的端口扫描器的实例分享

单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务.随便修改了一下就ok了,代码如下,最终得到自己的IP地址. #!/usr/bin/env python import socket if __name__=='__main__': port=3389 s=socket.socket() for cnt in range(253,2,-1): address='XXX.XXX.XXX.'+str(cnt) #XXX.XXX.XXX I

Python端口扫描简单程序

本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下 获取本机的IP和端口号: import socket def get_my_ip(): try: csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) csock.connect(('8.8.8.8', 80)) (addr, port) = csock.getsockname() csock.close() return addr,port except s

Python扫描IP段查看指定端口是否开放的方法

本文实例讲述了Python扫描IP段查看指定端口是否开放的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### ################################################## #BLOG:http://hi.baidu.com/alal

实例探究Python以并发方式编写高性能端口扫描器的方法

关于端口扫描器 端口扫描工具(Port Scanner)指用于探测服务器或主机开放端口情况的工具.常被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务. 端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口.虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段.端口扫描的主要用途仍然只是确认远程机器某个服务的可用性. 扫描多个主机以获取特定的某个端口被称为端口清扫(Portsweep),以此获取特

使用python实现扫描端口示例

python最简洁易懂的扫描端口代码.运行绝对会很有惊奇感 复制代码 代码如下: from threading import Thread, activeCount import socket import os def test_port(dst,port): os.system('title '+str(port)) cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: indicator = cli_sock.c

使用Python3制作TCP端口扫描器

在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端口扫描一般分为以下几种类型: TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到. TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应

python多线程扫描端口示例

复制代码 代码如下: # -*- coding: cp936 -*-import socketfrom threading import Thread,activeCount,Lockfrom time import ctimemutex = Lock() class Loop(Thread):    def __init__(self,ip,port,que):        Thread.__init__(self)        self.ip     = ip        self.p

python端口扫描系统实现方法

本文实例讲述了python端口扫描系统实现方法.分享给大家供大家参考.具体实现方法如下: 该程序的主要功能如下: 1. 从自有API接口获取所有的外网IP段: 2. 用Nmap 遍历扫描所有的IP段,-oX 生成XML的扫描报告: 3. 用xml.etree.ElementTree模块方法读取XML文件,将ip,开放端口,对应服务等写入Mysql数据库. 功能很简单,没有满足老大高大上的需求,所以这个小项目就这么英勇的挂掉了!~~~完全都还没考虑程序异常终止,扫描服务器异常歇菜的情况. 贴上代码

Python实现的多线程端口扫描工具分享

昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具. 水平有限,实话中间有一些困惑和不解的地方,代码可能也写的比较乱.有些问题并未找到很好的解决方法,还望大家谅解.速度大家自己试验,我感觉还行. 送上效果图两份,分别是扫单IP和扫IP段: 源码: 复制代码 代码如下: # -*- coding: utf-8 -*- __author__ = 'Phtih0n' import threading, socket, sys,

python基础教程之udp端口扫描

一.概述任务描述:开发一个程序,用于获取局域网中开启snmp服务的主机ip地址列表,并写入相应文件以便其它程序使用.背景知识:SNMP是基于UDP的,而且标准的SNMP服务使用161和162端口.思路:1.获取局域在线主机列表:2.获取各个主机的snmp端口(比如161)开启状况:3.以特定格式写入特定文件.这里只实现前两步. 二.nmap实现1.安装nmapLinux平台(CentOS为例): yum install nmap -y     widows平台(下载地址):http://nmap

Python基础教程之if判断,while循环,循环嵌套

if判断 判断的定义 如果条件满足,就做一件事:条件不满足,就做另一件事:  判断语句又被称为分支语句,有判断,才有分支: if判断语句基本语法 if语句格式: if 判断的条件:     条件成立后做的事     ... ... 代码缩进为一个tab键,或者四个空格,官方建议使用空格:但应注意,在python开发中,tab和空格不能混用! 判断年龄示例: # 判断是否成年,成年则可以进网吧 age = 19 if age>=18: print("你满了18岁,可以进网吧") i

Python 基础教程之str和repr的详解

Python str和repr的详解 str可以将值转化为合理的字符串形式,以便用户可以理解: repr会以合法Python表达式的形式来表达值. 举例如下: # str输出用户通常习惯的格式,repr输出系统存储格式 >>> print str("Hello World") Hello World >>> print repr("Hello World") 'Hello World' >>> print str

python基础教程之python消息摘要算法使用示例

复制代码 代码如下: #! /usr/bin/python'''      File      : testHash.py      Author    : Mike'''import hashlibsrc = raw_input("Input string : ")funcNameList = ["MD5","SHA1","SHA224","SHA256","SHA384","

python基础教程之lambda表达式使用方法

Python中,如果函数体是一个单独的return expression语句,开发者可以选择使用特殊的lambda表达式形式替换该函数: 复制代码 代码如下: lambda parameters: expression lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位置使用lambda表达式.在开发者想要使用一个简单函数作为参数或者返回值时,使用lambda表达式是很方便的.下面是

Python基础教程之tcp socket编程详解及简单实例

Python tcp socket编程详解 初学脚本语言Python,测试可用的tcp通讯程序: 服务器: #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import threading import time def tcplink(sock, addr): print('Accept new connection from %s:%s...' % addr); sock.send(b'Welcome!!!'); whi

python基础教程之Hello World!

Python命令行 假设你已经安装好了Python, 那么在Linux命令行输入: 复制代码 代码如下: $python 将直接进入python.然后在命令行提示符>>>后面输入: 复制代码 代码如下: >>>print('Hello World!') 可以看到,随后在屏幕上输出: 复制代码 代码如下: Hello World! print是一个常用函数,其功能就是输出括号中得字符串. (在Python 2.x中,print还可以是一个关键字,可写成print 'Hel

python 基础教程之Map使用方法

Python Map Map会将一个函数映射到一个输入列表的所有元素上.Map的规范为:map(function_to_apply, list_of_inputs) 大多数时候,我们需要将列表中的所有元素一个个传递给一个函数,并收集输出.例如: items = [1, 2, 3, 4, 5] squared = [] for i in items: squared.append(i**2) 使用Map的话,可以让我们以一种更加简便的方法解决这种问题. items = [1, 2, 3, 4, 5

python基础教程之Filter使用方法

python Filter Python中的内置函数filter()主要用于过滤序列. 和map类似,filter()也接收一个函数和序列,和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 True还是False决定保留还是丢弃该元素. 例1: number_list = range(-5, 5) less_than_zero = list(filter(lambda x: x < 0, number_list)) print(less_than_zero)

python基础教程之popen函数操作其它程序的输入和输出示例

一.函数介绍 1.1 函数原型: 复制代码 代码如下: #include <stdio.h>FILE *popen(const char *command,const char *open_mode); 1.2 说明 popen函数允许一个程序将另一个程序作为新进程启动,并可以传递数据给它或者通过它接收数据.command字符串是要运行的程序名和相应参数(比如:ls或ls -l),openmode必须是 r 或w.如果是r,被调用程序的输出可以被调用它的程序使用:如果是w,调用程序就可以用fw