Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;someVariable是None";始终为false w/从OptPass结果导出的值_Python_Sockets - Fatal编程技术网

Python &引用;someVariable是None";始终为false w/从OptPass结果导出的值

Python &引用;someVariable是None";始终为false w/从OptPass结果导出的值,python,sockets,Python,Sockets,我真的很生气,因为我在用python编写一个简单的说教式portscanner时遇到了一个无法解决的问题。代码如下: def main(): parser = optparse.OptionParser("usage%prog "+\ "-H <target host> -p <target port>") parser.add_option('-H', dest='tgtHost', type='string', \ help='spec

我真的很生气,因为我在用python编写一个简单的说教式portscanner时遇到了一个无法解决的问题。代码如下:

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)
在使用主机和不使用-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'
$python portscanner.py-H 1234
[+]的扫描结果:0.0.4.210
扫描端口无
回溯(最近一次呼叫最后一次):
文件“portscanner.py”,第45行,在
main()
文件“portscanner.py”,第43行,主
端口扫描(tgtHost、tgtPorts)
portScan中第29行的文件“portscanner.py”
连接扫描(tgtHost,int(tgtPort))
ValueError:基数为10的int()的文本无效:“无”
所以脚本抛出一个错误,因为它无法将None转换为int,这就是一致性检查的要点。我已经尝试在(tgtPorts[0]为无)中更改(tgtPorts为无),但没有更改。谷歌也搜索过,但似乎没有人有同样的问题。有什么想法吗?

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

您在此处将其设置为字符串:

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

请注意,
|
按位的或者,您应该真正使用
或者
。我首先测试选项,然后分析:

在这里,省略选项和不指定值都是错误的


就我个人而言,我会使用here和required参数,将port参数设置为
nargs='+'
,以捕获一个或多个值。错误处理然后由AgPARSE> 进行。

下次你在这里问一些事情时,考虑下面的指导方针——正如目前所写的,这个问题不太可能对其他人有帮助,因为它对你的代码非常特殊。@查尔斯达菲,对不起,我是新来的,我想尽我所能提供每一个信息。但是我注意到我发布的大部分代码对于我的问题来说都是毫无用处的。编辑了这篇文章,希望它更便于携带:)真的好得多!我也试着改进一下标题——使用
[…]
表明您的价值可能是一个列表或列表理解(这两种情况都表明了不同的实际原因和解决方案)。谢谢,这不仅有效,而且您以清晰易懂的方式解释了它。
tgtPorts = str((options.tgtPort)).replace(",", " ").split()
if options.tgtPort:
    tgtPorts = options.tgtPort.replace(",", " ").split()
if not (options.tgtHost and options.tgtPort):
    print '[-] You must specify a target host and port[s].'
    exit(1)