“someVariable is None”总是假w /从optparse结果导出的值

时间:2015-06-06 15:01:24

标签: python sockets

我真的很生气'因为在python中编写一个简单的教学端口扫描程序时我无法解决这个问题。这是代码:

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

一切都按预期工作,除了一件事:(tgtPorts为None)检查似乎不起作用,而tgtHost控件工作正常。换句话说,这是没有指定-H选项时发生的事情:

    $ python portscanner.py -p 21
    [-] You must specify a target host and port[s].

与主机一起使用而没有-p这里会发生什么:

    $ python portscanner.py -H 1234

    [+] Scan Results for: 0.0.4.210
    Scanning port None
    Traceback (most recent call last):
    File "portscanner.py", line 45, in <module>
    main()
    File "portscanner.py", line 43, in main
    portScan(tgtHost, tgtPorts)
    File "portscanner.py", line 29, in portScan
    connScan(tgtHost, int(tgtPort))
    ValueError: invalid literal for int() with base 10: 'None'

因此脚本会抛出错误,因为它无法将None转换为int,这就是一致性检查的重点。我已经尝试在(tgtPorts [0]为None)中更改(tgtPorts为None),但没有任何改变。用Google搜索,但似乎没有人遇到同样的问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的字符串中包含module - Hello, File name - Hello.js 字样,而不是'None'对象。

你在这里写了一个字符串:

None

不要在那里使用tgtPorts = str((options.tgtPort)).replace(",", " ").split() ,而是测试具有真值的str()(例如,不是options.tgtPort或空字符串):

None

请注意,if options.tgtPort: tgtPorts = options.tgtPort.replace(",", " ").split() 按位或者,您应该使用|代替。我首先测试选项,然后解析:

or

这里省略选项而不指定值是错误。

就个人而言,我在这里使用argparse module并使用必需的参数,并将 ports 参数设置为if not (options.tgtHost and options.tgtPort): print '[-] You must specify a target host and port[s].' exit(1) 来捕获一个或多个值。然后由nargs='+'完成错误处理。