Не могу выполнить netcat - PullRequest
       22

Не могу выполнить netcat

1 голос
/ 19 марта 2019

Я пытаюсь выполнить следующую команду из C:

netcat 127.0.0.1 4444

Это мой код:

#include <unistd.h>

int main() {
    execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
}

Тем не менее, я получаю сообщение об ошибке: Ошибка: не указаны порты для подключения .

Чтобы ответить на несколько вопросов, я чувствую, может возникнуть:

  • which netcat дает /usr/bin/netcat
  • Я пытался использовать execvp и получил те же результаты
  • Выполнение команды в обычном режиме, т. Е. Через терминал, прошло успешно (Обычно я также даю аргумент -e /bin/bash, но для простоты я его опускаю. Добавление этого не приводит к изменению результатов.)

1 Ответ

1 голос
/ 19 марта 2019

Проблема в том, что ваш первый аргумент - "4444".Почему?

Посмотрите на эту строку:

execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);

Аргумент first для execlp() - это исполняемый двоичный файл.Остальные аргументы образуют argv[] -вектор, передаваемый процессу.

По соглашению argv[0] должен содержать имя исполняемого файла, а первый "настоящий" аргумент - argv[1], что"4444" в вашем случае.То, что вы делаете, является эквивалентом оболочки

netcat 4444

, и правильный вызов будет:

execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);

Btw.использование execlp() имеет смысл только при вызове двоичного файла без полного пути, поскольку он ищет сам правильный путь (используя переменную среды PATH).В противном случае следует использовать execl().Но это все равно будет работать.

...