我正在制作一个脚本,该脚本可以读取一个充满代理服务器的文件并检查它们是启动还是关闭。
import socket
proxyFile = open("proxies.txt","r");
lines = proxyFile.readlines();
class Colors:
none = " 33[0m";
red = " 33[31m";
green = " 33[32m";
yellow = " 33[33m";
blue = " 33[34m";
purple = " 33[35m";
cyan = " 33[36m";
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
sock.settimeout(3);
for line in lines:
line = line.replace(":"," : ");
reader = line.split();
ip = reader[reader.index(":") - 1];
port = int(reader[reader.index(":") + 1]);
try:
sock.connect((ip,port));
print Colors.cyan + ip + ":" + str(port) + Colors.none + " is " + Colors.green + "UP";
sock.close();
except socket.timeout:
print Colors.cyan + ip + Colors.yellow + ":" + Colors.cyan + str(port) + Colors.none + " is " + Colors.red + "DOWN";
似乎文件读取正常并且套接字创建,但它只连接到一台服务器,然后给出错误。
代理文件:
1.0.134.56:8080
1.165.192.248:3128
1.172.185.143:53281
1.179.156.233:8080
1.179.164.213:8080
1.179.185.253:8080
1.192.242.191:3128
1.20.169.166:8080
1.20.179.68:8080
1.20.99.163:8080
您无法重新connect
套接字。一旦连接,它就连接了。即使您打电话给close
:
将来对套接字对象的所有操作都将失败。
正确的答案是每次通过循环创建一个新套接字,无论是使用create_connection
还是使用socket
和connect
.例如,将try
块更改为:
try:
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
sock.settimeout(3);
sock.connect((ip,port));
print Colors.cyan + ip + ":" + str(port) + Colors.none + " is " + Colors.green + "UP";
sock.close();
except socket.timeout:
print Colors.cyan + ip + Colors.yellow + ":" + Colors.cyan + str(port) + Colors.none + " is " + Colors.red + "DOWN";