2017-03-17 26 views
0

我正在使用python循环来查找打开的端口。它应该工作的方式是,如果我的列表中的一个端口打开并接受tcp连接,它会发送一个响应,如果没有,它将跳到下一个端口号。在套接字错误后继续循环

我遇到的问题是,如果第一个端口没有响应,我收到来自套接字的错误,并停止循环。这里是脚本,包括如何定义我的端口列表。

import numpy; 
import socket; 
import sys; 

with open("ports.ls") as f: 
    ports = f.read().split(","); 

portslist = [] 
for i in ports: 
    portslist.append(i.strip()); 

portslist = [int(i) for i in portslist] 

for i in portslist: 
    target_host = sys.argv[1]; 
    target_port = i; 
    print "[*] port:%d" % target_port; 
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM); 
    client.connect((target_host, i)); 
    client.send("GET/HTTP/1.1\r\nHost: %s\r\n\r\n" % target_host); 
    response = client.recv(4096); 
    print response; 

,我得到的错误是

socket.error: [Errno 11] Resource temporarily unavailable 

如何继续循环到下一个迭代尽管第一口没有响应?

+1

你可以使用'try'语句吗? – Neil

+0

你只是得到那一行或堆栈跟踪? – tdelaney

回答

0

假设这是该脚本中引发的异常,并且未从远程服务器传回,则可以添加异常处理程序。

...并摆脱分号!

import numpy 
import socket 
import sys 

with open("ports.ls") as f: 
    ports = f.read().split(",") 

portslist = [] 
for i in ports: 
    portslist.append(i.strip()) 

portslist = [int(i) for i in portslist] 

for i in portslist: 
    target_host = sys.argv[1] 
    target_port = i 
    print "[*] port:%d" % target_port 
    try: 
     client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     client.connect((target_host, i)) 
     client.send("GET/HTTP/1.1\r\nHost: %s\r\n\r\n" % target_host) 
     response = client.recv(4096) 
     print response 
    except socket.error as e: 
     print e 
+0

谢谢你!只要这个问题得到解决,我想实施的其余部分就很简单。对于分号,对其他语言的习惯感到遗憾。 – saniboy