【问题标题】:python program will not execute eventhoug no errorspython程序不会执行eventhoug没有错误
【发布时间】:2014-02-25 19:28:16
【问题描述】:

我正在学习 Python,但遇到了问题。我无法在 Windows CMD 中执行以下代码。我只尝试了一个“Hello World”程序,它按预期执行。但是当我尝试这个程序时,什么都没有发生。没有错误信息或任何东西。我正在使用 python 3.3 和 Pycharm 3.1。


__author__ = 'Johan'

import optparse
from socket import *

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))
                connSkt.close()

            except:
                print('[-]%d/tcp closed'% tgtPort)

            def portScan(tgtHost, tgtPorts):
                try:
                    tgtIp = gethostbyname(tgtHost)
                except:
                    print ('[-] Can not resolve '': Unknown host' % tgtHost)
                    return
                try:
                    tgtName = gethostbyaddr(tgtIp)
                    print('\n[+] Scan Results for: ' + tgtName[0])
                except:
                    print('\n[+] Scan Results for: ' + tgtIp.
                        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=str, \
                        help='specify target host')
                    parser.add_option('-p', dest='tgtPort', type='int', \
                                      help='specify target port[s] separated by comma')
                    (options, args) = parser.parse_args()
                    tgtHost = options.tgtHost
                    tgtPorts = options.tgtPort
                    if(tgtHost is None) | (tgtPorts[0] is None):
                        print('[-] You must specify a target host and port[s]')
                        exit(0)
                        portScan(tgtHost, tgtPorts)
                    if __name__== '__main__':
                        main()

【问题讨论】:

  • 如何运行这个脚本?请edit您的问题包括您使用的命令。
  • 这是:if __name__== '__main__': main() 真的深埋在main 里面吗?如果是这样,那是你的问题。它需要完全不缩进才能被调用
  • if __name__ == 'main': 块的缩进看起来不对。应该在行首对齐。
  • 我尝试在 CMD 中运行 "python portscan.py -H 127.0.0.1 -p 20"
  • 一口气从“hello world”到这个是一个令人印象深刻的飞跃:-) 或者你不是原作者?与他或她取得联系可能会有所帮助。

标签: python execution fault compiled


【解决方案1】:

您的缩进都被破坏了 - 除了其他答案和 cmets 中提到的if __name__ == "main" 问题之外,每个函数都嵌套在它之前的一个函数中,这可能不是它应该的方式。你可能想要这样的东西:

__author__ = 'Johan'
import optparse
from socket import *

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))
        connSkt.close()

    except:
        print('[-]%d/tcp closed'% tgtPort)

def portScan(tgtHost, tgtPorts):
    try:
        tgtIp = gethostbyname(tgtHost)
    except:
        print ('[-] Can not resolve '': Unknown host' % tgtHost)
        return
    try:
        tgtName = gethostbyaddr(tgtIp)
        print('\n[+] Scan Results for: ' + tgtName[0])
    except:
        print('\n[+] Scan Results for: ' + tgtIp.
            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=str, \
        help='specify target host')
    parser.add_option('-p', dest='tgtPort', type='int', \
                      help='specify target port[s] separated by comma')
    (options, args) = parser.parse_args()
    tgtHost = options.tgtHost
    tgtPorts = options.tgtPort
    if(tgtHost is None) | (tgtPorts[0] is None):
        print('[-] You must specify a target host and port[s]')
        exit(0)
        portScan(tgtHost, tgtPorts)

if __name__== '__main__':
    main()

【讨论】:

  • 我现在尝试了您的代码,但得到:文件“D:/Documents and Settings/Johan/PycharmProjects/PortScanner/PortScanner.py”,第 52 行,在 如果 name__== '__main':main() 文件“D:/Documents and Settings/Johan/PycharmProjects/PortScanner/PortScanner.py”,第 47 行,在 main if(tgtHost is None) | (tgtPorts[0] 为 None): TypeError: 'NoneType' object is not subscriptable
  • 我应该如何“空格”代码呢?我无法编译该程序,它给了我上面的错误
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多