Эта строка неверна для получения входящего TCP-соединения:
s=socket.socket(socket.AF_UNIX,socket.SOCK_DGRAM);
Вместо этого должно быть:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
Кроме того, s.setblocking(False)
, вероятно, не то, что вы хотите сделать, поскольку вы, вероятно, хотите, чтобы accept()
блокировался до получения входящего TCP-соединения.
Обновление: помимо проблемы, описанной выше, другая проблема заключается в том, что предполагаемый код сканирования портов, размещенный в вопросе, нефактически не сканирует никакие порты, поскольку он никогда не пытается установить исходящее TCP-соединение.Для справки, вот версия этого кода, которая на самом деле пытается подключиться к портам 0-20000 на локальном хосте, а затем распечатывает, к каким портам удалось установить соединение:
import socket
connectedPorts = []
for port in range(0,20001):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
try:
s.connect(('127.0.0.1',port))
print("Connect succeeded on port %i" % port)
connectedPorts.append(port)
except Exception as e:
print "Port %i: %s" % (port, e)
s.close()
print("")
print("Connect succeeded on the following ports: ", connectedPorts)
... идля полноты вот рабочий код accept-on-port-20000:
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.bind(('127.0.0.1',20000))
s.listen(1);
print("Calling accept...")
c,addr=s.accept()
print("Accept returned: [%s, %s]" % (c,addr))