从参数创建范围

时间:2018-04-22 13:49:26

标签: python range command-line-arguments

对python来说真的很新,但是我尝试使用python练习并做一些事情来使学习体验变得有趣,我正在尝试为一系列端口做一个扫描程序,但我想将端口指定为cli论点。但是,当我把它们放在范围内时,没有任何反应,所以我认为我没有正确解析参数,我该怎么做?

以下是我的代码的一部分:

host = sys.argv[1]
first_port = sys.argv[2]
ending_port = sys.argv[3]


print "Checking ports on the range of " + start_port + " to " + end_port

try:
    for port in range(first_port, ending_port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = s.connect_ex((host, port))
        if result == 0:
            print "--> Port " + str(port) + "open"
        s.close()
except:
    pass

如果我放range(1, 1024)它确实有效,但不喜欢我传递论据的方式。另外,我尝试使用first_port = int(sys.argv[2])转换为int,但是没有任何反应。我对此缺少什么?

1 个答案:

答案 0 :(得分:0)

更改

first_port = sys.argv[2]
ending_port = sys.argv[3]


print "Checking ports on the range of " + start_port + " to " + end_port

first_port = int(sys.argv[2])
ending_port = int(sys.argv[3])


print "Checking ports on the range of {} to {}".format(first_port, ending_port)

产生正确的行为。此外,您可能希望范围

for port in range(first_port, ending_port+1):

因为范围的结束是非包容性的。

这里(我认为)的一个重要教训就是不要在pass中使用except,除非您明确知道它应该被传递。如果您的输入参数有一些错误,那么您只是吞下异常而不是获得有用的堆栈跟踪/错误消息。