端口扫描器python脚本

目录

 

原理:

实践:

代码:

模块介绍:

optparse模块

socket模块

简单一句话:


原理:

TCP连接扫描是使用完整的三次握手来确定服务器或端口是否可用,这里我们模仿其,脚本主要分成一下几个部分。

  1. 首先输入一个主机名和用逗号分隔的端口列表并开始扫描;
  2. 将主机名转换成IPV4地址。
  3. 对每个端口都进行TCP连接,抓取目标应用的Banner信息。

实践:

第一步:获取命令参数主机名和端口。这个动作可以通过optparse库来解析命令行参数,调用optparse.OptionPaser([usage message])会生成一个参数解析器类的实列,然后在parser.add_option中指定这个脚本具体要解析哪个命令行参数。

import optparse
parser = optparse.OptionParser('usage %prog -H <target host> -p <target ports>')
parser.add_option('-H',dest='Host',type='string',help='specitfy target host')
parser.add_option('-P',dest='Ports',type='string',help='specify target ports')
(options.args)=parser.parse_args()
Host = options.Host
Posts = str(options.Posts).split(',')
if (Host == None)|(Ports==None):
         print parser.usage
         exit(0)

第二步:生成两个函数connScan和portScan,portScan函数以参数的形式接受主机名和目标端口列表,它会首先尝试用gethostbyname()函数确定主机名对应的IP地址,接下来以connScan函数输出主机名或者IP地址并使用connScan函数逐个连接每一个指定的端口。

import optparse
from socket import *
def connScan(Host,Port):
     try:
            connSkt = socket(AF_INET,SOCK_STREAM)
            connSkt.connect((Host.Port))
            print '[+] %d/tcp open '%Port
            connSkt.close()
     except:
            print '[-] %d/tcp closed'%Port

def portScan(Host,Ports):
     try:
            Ip=gethostbyname(Host)
     except:
            print "[-] Cannot resolve '%s': Unknown host"%Host
            return
     try:
            Name = gethostbyaddr(IP)
            print '\n[+] Scan Results for:'+Name[0]
     except:
            print '\n[+] Scan Results for:'+IP
      setdefaulttimeout(1)
      for Port in Ports:
               print 'Scanning port '+Port
               connscan(Host.int(Port))

第三步:在connScan函数中插入一些新的代码段,检测目标端口开放后,向目标发送一个数据串并等待响应,从响应的消息中推断出目标主机和端口上的应用。

def connScan(Host,Port):
    try:
         connSkt = socket(AF_INET,SOCK_STREAM)
         connSkt.connect((Host,Port))
         connSkt.send('quiet simple\r\n')
         results = connSkt.recv(100)
         connSkt.close();
    except:
          print "%d/tcp closed"%Port

代码:

#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()

模块介绍:

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()

socket模块

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

#创建socket对象

sock=socket(AF_INET,SOCK_STREAM) 

#发起连接

sock.connect((host,port))

#发送数据

sock.send()

#接收数据

sock.recv()

#关闭

sock.close()

简单一句话:

先调用optparse库读取解析命令参数对应的主机名和端口;再定义两个函数,一个用于读取主机名和端口列表,通过gethostbyname()来确定IP,另一个函数用来输出IP和对应的端口,逐个连接之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值