对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,但是没有任何反应。我对此缺少什么?
答案 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
,除非您明确知道它应该被传递。如果您的输入参数有一些错误,那么您只是吞下异常而不是获得有用的堆栈跟踪/错误消息。