Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 套接字错误后继续循环_Python_Sockets - Fatal编程技术网

Python 套接字错误后继续循环

Python 套接字错误后继续循环,python,sockets,Python,Sockets,我使用python循环查找开放端口。它的工作方式是,如果列表中的一个端口打开并接受tcp连接,它将向我发送响应,如果没有,它将跳到下一个端口号 我遇到的问题是,如果第一个端口没有响应,我从套接字收到一个错误,循环停止。下面是脚本,包括如何定义我的端口列表 import numpy; import socket; import sys; with open("ports.ls") as f: ports = f.read().split(","); portslist = [] for

我使用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

如何在第一个端口没有响应的情况下继续循环到下一个迭代?

假设此脚本中引发了异常,并且没有从远程服务器传回,您可以添加一个异常处理程序

…然后去掉分号

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

你能用
try
语句吗?你只得到那一行还是堆栈跟踪?谢谢!一旦这个问题得到解决,我想实现的其余部分就很简单了。很抱歉分号,这是其他语言遗留下来的习惯。