使用Python进行Pentesting

时间:2017-09-05 11:21:09

标签: python

刚刚从TJ'O Connor的'Violent Python'一书中输入横幅抓取器和端口扫描器,我运行它时没有遇到任何语法错误,但是我没有得到任何输出,有人能告诉我可能有什么问题吗?用python 2.6写的书,我用的是2.7,我不知道这是不是问题呢?任何帮助将不胜感激!这本书也有'导入套接字',但是语法错误,所以我把它拿出来,不知道它做了什么

import optparse
import socket


def connScan(tgtHost,tgtPort):
        try:
                connSkt= socket(AF_INET,SOCK_STREAM)
                connSkt.connect((tgtHost,tgtPort))
                connSkt.send('Violent Python\r\n')
                results= connSkt.recv(1024)
                print '[+]%d/tcp open' % tgtPort
                print '[+]' + str(results)
                connSkt.close()
        except:
                print '[-]%d/tcp closed' % tgtPort

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

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='int', help='specify target port[s] seperated 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()

1 个答案:

答案 0 :(得分:1)

没有发生任何事情的原因是因为您的代码完全由函数声明组成。在任何时候你都不会告诉python运行任何东西。

这项工作应该由if语句完成:

if __name__=='__main__':
        main()

然而,你错误地缩进了太多,从而使它成为main()函数的一部分。要使代码工作,您需要像这样取消它:

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='int', help='specify target port[s] seperated 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__': # NOT a part of the main()
        main()

对于import socket as Ú,此行的目的是导入名为socket的模块,但为其指定别名,在本例中为Ú。从那时起,不要在代码中将其称为socket,而是将其称为Ú