我真的很生气'因为在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搜索,但似乎没有人遇到同样的问题。有什么想法吗?
答案 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='+'
完成错误处理。