2017-09-02 69 views
0

我正在研究一个简单的portscanner,并且我希望我的程序在由命令shell执行时采用两个选项。一般来说,它只能从shell执行,因为程序绝对需要这些选项。optparse不会收集传递给选项的所有值

我想要的选项是:

-H:主机的IP地址

-p:应该被扫描

这里所有端口的列表是我的问题:我想要的端口

D:\LocalUser\MyPython\Portscanner>C:\Users\LocalUser\AppData\Local\Programs\Pytho n\Python35-32\python.exe portscanner_v0.0.py -H 192.168.1.1 -p 21, 1720, 8000

:由逗号和空白在开始我的程序的本实施例中分离时,像

不幸的是,他们似乎并没有被我的程序收集,只有第二个选项的第一个值被读取到我的代码中的变量中。我正在使用optparse和Python 3.5,请告诉我如何从shell中获取所有端口。

这里是我的代码:

def portScan(tgtHost, tgtPorts): 
    #doing my port scans 
    #wont show my actual code here, it's working fine 


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).split(', ') 
    if ((tgtHost == None) | (tgtPorts[0]==None)): 
     print(parser.usage) 
     exit(0) 
    portScan(tgtHost, tgtPorts) 

if __name__ == "__main__": 
    main() 

回答

1

参数数量已经由空格分割,所以你需要使用

tgtPorts = str(options.tgtPort).split(',') 

,并把它作为python.exe portscanner_v0.0.py -H 192.168.1.1 -p 21,1720,8000

还要注意的是, optparse模块is deprecated since Python 2.7并替换为argparse

+0

工作正常,谢谢!有没有办法使用空间(只是问...)? –