gpt4 book ai didi

python - "someVariable is None"始终为 false w/从 optparse 结果派生的值

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:05 24 4
gpt4 key购买 nike

我真的很生气,因为在用 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 is 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] is None) 中更改 (tgtPorts is None),但没有任何改变。谷歌也搜索过,但似乎没有人遇到同样的问题。有什么想法吗?

最佳答案

您有一个字符串,其中包含单词'None',而不是None对象。

您在这里将其设置为字符串:

tgtPorts = str((options.tgtPort)).replace(",", " ").split()

不要在那里使用 str(),而是测试 options.tgtPort 是否具有真值(例如,不是 None 或空字符串) :

if options.tgtPort:
tgtPorts = options.tgtPort.replace(",", " ").split()

请注意,|按位,或者,您实际上应该使用or 来代替。我首先测试选项,然后解析:

if not (options.tgtHost and options.tgtPort):
print '[-] You must specify a target host and port[s].'
exit(1)

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

就我个人而言,我会使用 argparse module此处并使用必需的参数,并将 ports 参数设置为 nargs='+' 来捕获一个或多个值。然后错误处理也由 argparse 完成。

关于python - "someVariable is None"始终为 false w/从 optparse 结果派生的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com