zoukankan      html  css  js  c++  java
  • 笔记整理1——python实现端口扫描器

    1.编写一个端口扫描器:代码见文末尾

    2.实现思路
    (1).实现一个完整的TCP握手作为tcp端口是否开放的判断依据
    (2).给定一个ip和端口列表进行判断端口是否开放,开放则加入列表中
    (3).利用多线程实现高性能扫描,利用信号量防止线程冲突导致打印结果混乱
    主要调用模块:

    import optparse
    from socket import *
    from threading import *
    
    socket模块常用于TCP端口连接
    threading 模块用于线程处理
    
    optparse 模块用于解析参数选项,如:
    python xxx.py <-r file>  <>即为参数解析
    
    设计了两个函数
    def connport(tHost,tPort): #与端口建立连接
    def scanport(tHost,tPorts): #扫描主机的端口列表
    
    
    线程的使用方法:
    for tPort in tPorts:
    # print '[*] scanning Port %d'%tPort 出现了神奇的BUG
      t = Thread(target=connport, args=(tHost,int(tPort)))
      t.start()
    2.编写一个调用Nmap工具的脚本:代码
    
    主要调用模块
    import nmap
    import optparse
    from threading import *
    from socket import *
    其中Nmap 模块并非是python的内置库
    
    主要函数
    def nmapScan(tHost,tPort):
    def main():
    

    3.复习思考
    1.TCP端口扫描:
    完整的TCP扫描使用操作系统原生网络功能不能实现底层控制,因此这种扫描方式并不流行。并且TCP扫描很容易被发现,尤其作为端口清扫的手段:这些服务会记录发送者的IP地址
    2.利用ip连接:result = sock.connect_ex((target_ip, port))
    利用主机名连接:result = sock.connect((target_host, port))
    主机名除了web服务器比较好获取,其他都难找到
    python-namp包:
    https://xael.org/pages/python-nmap-en.html
    利用dns的api接口可以将ip进行反向解析。
    可以导入dns模块
    3.可以考虑尝试常用服务端口扫描后,对开放相应端口的主机进行漏洞检测(即是否符合banner),如果有,实施攻击(down机,蓝屏,等)。

    #!/usr/bin/python
    # coding: utf-8
    
    import nmap
    import optparse
    from threading import *
    from socket import *
    
    def nmapScan(tHost,tPort):
        nmscan = nmap.PortScanner()
        nmscan.scan(tHost,tPort)
        state = nmscan[tHost]['tcp'][int(tPort)]['state']
        print '[*] '+str(tHost) + 'tcp/' +str(tPort)+' '+str(state)
    
    def main():
        parser = optparse.OptionParser('usage%prog'+' -H <target Host> -p <target Port>')# 参数解析
        parser.add_option('-H',dest='Host',type='string',help='specify Host')
        parser.add_option('-p',dest='Port',type='string',help='specify Port')
        (options, args) = parser.parse_args() #参数和parser实例建立联系
        tHost = gethostbyname(options.Host)
        tPorts = str(options.Port).split(',')
        if(tHost == None) | (tPorts == None):
            print 'please input your Host and Port'
            exit(0)
        setdefaulttimeout(1)
        for tPort in tPorts:
            nmapScan(tHost,tPort)
          
    
    if __name__ == '__main__':
        main()
    
    
  • 相关阅读:
    《图书管理系统》可行性分析的安排
    成员的个人介绍
    [译] 数据库是如何工作(一)介绍
    [译]数据库是如何工作(二)回到原点 算法基础
    [译]数据库是如何工作(三)全文概述
    [译]数据库是如何工作(四)客户端管理
    [译]数据库是如何工作(五)查询管理器
    [译]数据库是如何工作(六)数据管理器
    docker 集群 zookeeper 碰到 java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
    啰嗦的 java,简洁的 lombok —— lombok 的使用及简单实现单例模式注解
  • 原文地址:https://www.cnblogs.com/qianxinggz/p/11402504.html
Copyright © 2011-2022 走看看