用python写简易的端口扫描

BitTigerio 2017-12-15

import optparse
import socket
from socket import *<br /><br />'''<br />python 2.7.12<br />通过TCP连接来判断指定IP是否开放了指定端口<br />'''<br />def connScan(tgtHost,tgtPort):
    try:
        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.connect((tgtHost,tgtPort))
        connSkt.send('ViolentPython\r\n')
        results = connSkt.recv(100)
        print '[+] %d/tcp open' % tgtPort
        print '[+] ' + str(results) + '\n'
        connSkt.close()
    except:
        print '[-] %d/tcp closed' % tgtPort + '\n'

def portScan(tgtHost,tgtPorts):
    try:
        tgtIP = gethostbyname(tgtHost)
    except:
        print "[-] Cannot resolve '%s': Unknown host" %tgtHost + '\n'
        return
    try:
        tgtName = gethostbyaddr(tgtIP)
        print '\n[+] Scan Results for: ' + tgtName[0]
    except:
        print '\n[+] Scan Results for: ' + tgtIP + '\n'
    setdefaulttimeout(1)
    for tgtPort in tgtPorts:
        print '[*] Scanning port ' + tgtPort
        connScan(tgtHost,int(tgtPort))

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) | (tgtPorts[0] == None):
        print '[-] You must specify a target host and port[s].'
        exit(0)
    portScan(tgtHost,tgtPorts)

if __name__ == '__main__':
    main()

相关推荐