笔记整理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()

posted @ 2019-08-23 20:42  qianxinggz  阅读(3888)  评论(0编辑  收藏  举报