2017-11-18 171 views
1

基本上,我想监听所有使用套接字模块的端口。我该怎么做才能让port = =服务器上的所有开放端口?任何指南和/或资源高度赞赏这是我目前的代码。Python套接字监听所有端口

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() 
+1

你真的是指*全部*端口吗?其中有65535个。 –

+1

[我如何让服务器在多个端口上侦听]的可能重复(https://stackoverflow.com/questions/25135790/how-do-i-make-a-server-listen-on-multiple-ports) – agtoever

+0

@PaulCornelius是所有65535性感端口。 – a2mky

回答

2

您可以尝试所有可能的端口并将它们存储在列表中。请记住,保留低于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