如题 希望通过识别进程pid 对部分进程实现局部socks5,或其他协议
1条回答 默认 最新
m0_54204465 2023-01-12 11:21关注在 Python 中,你可以使用 psutil 库来识别进程的 PID,然后使用 socket 库来控制网络连接。
首先你可以安装 psutil 库,通过命令行:
pip install psutil然后导入并使用 psutil.process_iter() 方法来识别你需要控制的进程,并获取它们的 PID。
import psutil def get_pid_by_name(process_name): pid = None for process in psutil.process_iter(): if process.name() == process_name: pid = process.pid return pid之后你可以使用 socket 库来实现 SOCKS5 协议。首先,你需要创建一个 socket 对象,并连接到 SOCKS5 代理服务器。然后,使用 SOCKS5 协议规定的格式发送认证和连接请求。
import socket def socks5_proxy(proxy_ip, proxy_port, target_ip, target_port, pid): # Connect to the proxy server sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((proxy_ip, proxy_port)) # Send the authentication details sock.sendall(b'\x05\x01\x00') # Receive the response resp = sock.recv(2) if resp != b'\x05\x00': raise Exception('SOCKS5 proxy authentication failed.') # Send the connection request req = b'\x05\x01\x00\x03' + len(target_ip).to_bytes(1, 'big') + target_ip.encode() + target_port.to_bytes(2, 'big') sock.sendall(req) # Receive the response resp = sock.recv(4) if resp[0] != 0x05: raise Exception('Not a SOCKS5 proxy.') if resp[1] != 0x00: raise Exception('SOCKS5 connection failed.') # Receive additional data (such as the chosen IP and port for the bound connection) extra = sock.recv(resp[3]) # use the socket for further communication # and you can also control it as per your requirements such as closing the connection for specific pid #...现在你可以根据 PID 来控制连接。例如,在你需要关闭某个进程的网络连接时,你可以使用 sock.close() 方法来关闭 socket,关闭该进程的网络连接。
if pid == get_pid_by_name(process_name): sock.close()还有另一个可选的方案,比如通过iptables或者是别的网络代理工具来限制连接,可以按需选择
需要注意的是, 如果你想要代理所有进程的网络连接,那么你需要在系统级别设置代理,而不是在 Python 程序中实现。
解决 无用评论 打赏 举报