python探測端口+python监听端口
更新时间:2023-11-29探测端口
要在Python中探测端口,我们可以使用socket模块来建立一个TCP连接,并尝试连接到指定的主机和端口号。如果连接成功,则可以确定该端口是打开的。
import socket def port_scanner(host, port): # 创建一个TCP套接字对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # 尝试连接到指定的主机和端口 s.connect((host, port)) print(f"Port {port} is open") except ConnectionRefusedError: print(f"Port {port} is closed") # 关闭套接字连接 s.close() # 在本地主机上探测端口80 port_scanner("localhost", 80)
监听端口
要在Python中监听端口,我们可以使用socket模块来创建一个TCP服务器套接字对象,并指定要监听的主机和端口号。然后使用bind()方法将套接字绑定到指定的地址,并使用listen()方法开始监听连接请求。一旦有客户端连接到服务器,可以使用accept()方法接受该连接,并在新的线程中处理客户端请求。
import socket import threading def handle_client(client_socket): # 接收客户端请求并发送响应数据 request = client_socket.recv(1024) print(f"Received: {request.decode()}") response = "Hello from the server" client_socket.send(response.encode()) # 关闭客户端套接字连接 client_socket.close() def start_server(host, port): # 创建一个TCP服务器套接字对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将套接字绑定到指定的地址 server_socket.bind((host, port)) # 开始监听连接请求 server_socket.listen(5) print("Server listening on port", port) while True: # 接受客户端连接 client_socket, client_addr = server_socket.accept() print("Accepted connection from", client_addr) # 在新的线程中处理客户端请求 client_thread = threading.Thread(target=handle_client, args=(client_socket,)) client_thread.start() # 在本地主机上监听端口8080 start_server("localhost", 8080)
总结
通过使用socket模块,我们可以在Python中实现端口的探测和监听。探测端口时,我们可以尝试连接到指定的主机和端口,如果连接成功,则表示该端口是打开的。监听端口时,我们可以创建一个TCP服务器套接字对象,并指定要监听的主机和端口号,然后使用bind()方法将套接字绑定到指定的地址,并使用listen()方法开始监听连接请求。一旦有客户端连接到服务器,我们可以使用accept()方法接受该连接,并在新的线程中处理客户端请求。