我在范围内循环,以检查给定IP输入中的所有端口是否已打开,或者某些端口套接字库没有识别它,因此它给了我一个未找到端口的错误,
所以我使用了“尝试”和“除了修改错误代码”,但是我不能继续到下一个端口,脚本停止,不能使用“继续”,除了跳过那个端口并检查下一个端口。
def all_ports():
target = input('Type The IP : ')
try:
for port in range(1 , 65,536):
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target , port))
if r == 0:
service = socket.getservbyport(port)
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
service = socket.getservbyport(port)
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'we dont have port {port} in our system !')
发布于 2021-05-16 13:15:04
您可以更改for
和try
的顺序,将异常处理仅包装在一个套接字连接上,而不是全部,这样,当一个端口失败时,代码就可以恢复。
def all_ports():
target = input('Type The IP : ')
for port in range(1, 65536):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
r = s.connect_ex((target, port))
service = socket.getservbyport(port)
if r == 0:
print(f'{port} is open !!!!!!!! , and service is {service}')
else:
print(f'{port} is closed !!!! and service is {service}')
s.close()
except:
print(f'We dont have port {port} in our system !')
发布于 2021-05-16 13:19:28
我可以通过简单地在for循环中放置try和以外块来解决这个问题。
为了简单起见,这里是这两种情况的一个简单示例:
不工作
item_list = [1, 2, 3, "a", 5]
try:
for item in item_list:
item += 1 # will give error for "a" as it is not a number
print("item is:", item)
except:
print("wrong input")
产出:
item is: 2
item is: 3
item is: 4
wrong input
要解决这个问题:
Works
for item in item_list:
try:
item += 1
print("item is:", item)
except:
print("wrong input")
产出:
item is: 2
item is: 3
item is: 4
wrong input
item is: 6
https://stackoverflow.com/questions/67561608
复制相似问题