Вопрос или проблема
Я пытаюсь отправить команду в netcat
, которая даст результат, и я хочу сохранить этот результат в файл.
while true; do echo "showHistory userx"; done | nc -w1 xxx.xxx.xxx.xx 2222 > out.txt &
Я сделал много поисков в Google и прочитал много вопросов на Stackexchange, но не смог решить эту проблему. Я экспериментировал с while
, tee
, mkfifo
, но без успеха.
Файл out.txt
остается пустым, но содержит много символов NUL
Редактирование: я обновил showhistory
на showHistory userx
, чтобы подчеркнуть, что это команда, которую нужно передать через сессию telnet/netcat
Я нашел что-то подобное
для вывода сканирования портов (например, мой роутер)
nc -zv 192.168.0.1 1-1000 2>&1 | grep open | tee report.txt
чтобы прочитать отчет
cat report.txt
вывод
_gateway [192.168.0.1] 80 (http) open
_gateway [192.168.0.1] 22 (ssh) open
Ответ или решение
Чтобы отправить ввод в netcat
и сохранить вывод в файл, нужно правильно настроить команду так, чтобы она корректно обрабатывала ввод и вывод. Поскольку вы сталкиваетесь с пустым файлом out.txt
и получаете ненужные символы (например, NUL
), проблема может заключаться в методе, с помощью которого передается управление и обрабатывается вывод.
Поскольку ваша цель заключается в том, чтобы посылать команду (showHistory userx
) непрерывно в netcat
и сохранять вывод в файл, вот предписание для правильной реализации этой задачи:
1. Описание и корректировка команды
Для успешного выполнения задачи попробуйте использовать следующую команду:
while true; do echo "showHistory userx"; sleep 1; done | nc -w 1 xxx.xxx.xxx.xx 2222 > out.txt
2. Элементы команды
while true; do ...; done
: Этот цикл будет бесконечно отправлять командуshowHistory userx
с задержкой.sleep 1
: Это добавляет задержку в 1 секунду между отправками, чтобы избежать перегрузки сервера командой.nc -w 1 xxx.xxx.xxx.xx 2222
: Эта часть команды используетnetcat
для подключения к указанному IP адресу по порту 2222. Параметр-w 1
устанавливает таймаут ожидания в 1 секунду после завершения ввода.> out.txt
: Этот оператор перенаправления сохраняет вывод в файлout.txt
.
3. Изменения и дополнения
Если вы хотите сохранять вывод не только в out.txt
, но и видеть его в реальном времени, можно использовать оболочку tee
:
while true; do echo "showHistory userx"; sleep 1; done | nc -w 1 xxx.xxx.xxx.xx 2222 | tee out.txt
4. Устранение ошибок
- Убедитесь, что ваша команда
showHistory userx
действительно возвращает вывод, когда вы вручную вводите его черезnetcat
илиtelnet
. Это может быть полезно для отладки. - Убедитесь, что IP-адрес и порт правильны, и что сервер, к которому вы подключаетесь, доступен и слушает на указанном порту.
- Если вы видите
NUL
символы вout.txt
, это может быть связано с тем, что команда не возвращает ожидаемый текст или происходит сбой при соединении.
5. Заключение
Следуя приведенным выше инструкциям, вы должны получить стабильное соединение с netcat
, которое будет отправлять команды и сохранять вывод в файл. Не забудьте экспериментировать с задержкой в sleep
, чтобы оптимизировать ваше соединение и убедиться, что вы не перегружаете сервер запрашиваемыми командами.