Python套接字在所有端口上侦听

a2m*_*mky 3 python sockets

基本上,我想使用套接字模块监听所有端口。我该如何做到port=服务器上所有打开的端口?非常感谢任何指导和资源,这是我当前的代码。

import socket

def Main():
    host = '127.0.0.1'
    port = 5000

    s = socket.socket()
    s.bind((host, port))

    s.listen(1)
    c, addr = s.accept()
    print('Connection from: ' + str(addr))
    while True:
        data = c.recv(1024)
        if not data:
            break
        print('from connected user: ' + str(data))
        data = str(data).upper()
        print('sending: ' + str(data))
        c.send(data)
    c.close()


if __name__ == '__main__':
    Main()
Run Code Online (Sandbox Code Playgroud)

M. *_*can 5

您可以尝试所有可能的端口并将它们存储在列表中。请记住,低于1024的端口是保留的,某些端口可能正在使用中。因此,您将遇到一些错误,如果无法绑定到该端口,则需要处理这些错误。另外,由于每个套接字只能侦听一个端口,因此每个端口都需要一个套接字。创建一个create_socket返回套接字的函数,然后将其存储为列表。如果您在尝试连接时遇到错误,只需传递这些错误即可。这可能不是一个好方法,但它将为您工作。

def create_socket(port_number):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(('127.0.0.1', port_number))
    server_socket.listen(1)

    return server_socket

socket_list = []

for port_number in range(1025,65536):
    try:
        socket_list.append(create_socket(port_number))
    except Exception: 
        pass        
Run Code Online (Sandbox Code Playgroud)