【Python】端口扫描脚本

 0x00   使用模块简介

1、optparse模块

选项分析器,可用来生成脚本使用说明文档,基本使用如下;

import optparse

#程序使用说明

usage="%prog -H <target host> -p <target port>"

#实例化optparse对象

parser=optparse.OptionParser(usage)

#添加-H参数相关内容

parser.add_option('-H',dest='host',type='string',help='target host')

#将上述dest赋给options的属性,即options.host,其值表示的是-H参数后的host值

(options,args)=parser.parse_args()

2、socket模块

socket包含一个非常强大的网络库,用于网络编程,基本用法如下:

#创建socket对象

sock=socket(AF_INET,SOCK_STREAM) 

#发起连接

sock.connect((host,port))

#发送数据

sock.send()

#接收数据

sock.recv()

#关闭

sock.close()

0x01   完整脚本

#coding:utf-8

import optparse
import socket
from socket import *

def main():
    usage="%prog -H <target host> -p <target port>"
    parser=optparse.OptionParser(usage)
    parser.add_option('-H',dest='tgthost',type='string',help='target host')
    parser.add_option('-p',dest='tgtport',type='string',help='target port[s]')
    (options,args)=parser.parse_args()
    port_list=str(options.tgtport).split(',')
    for port in port_list:
        portScan(options.tgthost,int(port))

def portScan(host,port):
    try:
        sock=socket(AF_INET,SOCK_STREAM)
        sock.connect((host,port))
        print "[*]%d/tcp open" % port
        sock.close()
    except:
        print "[*]%d/tcp close" % port

if __name__=='__main__':
    main()

0x02   运行截图

 0x03   问题记录

简述自己遇到的几个坑:

第一个是脚本执行一直报‘module’ object no attribute ‘OptionParser’,而且脚本是无任何错误的,

最终发现是因为脚本名称和python模块名称重复了,然后改了下脚本名称,再删除之前脚本执行生成的pyc文件,

之后脚本就可以正常运行了,一个脚本文件名引发的“血案”,望诸君留意,。。

第二个是使用socket时需要

import socket

from socket import *

如果不加上第二句,脚本执行会一直显示端口关闭。。。

 

posted @ 2018-04-26 16:39  Carrypan  阅读(3062)  评论(0编辑  收藏  举报